Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(346)

Unified Diff: third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp

Issue 2408913002: Push hasValidAttributeName/Type down into SVGAnimateElement (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
diff --git a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
index 7d467b58f0df4f01a4757b7605f58abd54c29a23..b605ff60cec34e53cd03a5cf8e28f130a6f7bbd9 100644
--- a/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGAnimateMotionElement.cpp
@@ -34,10 +34,30 @@
namespace blink {
-using namespace SVGNames;
+namespace {
+
+bool targetCanHaveMotionTransform(const SVGElement& target) {
+ // We don't have a special attribute name to verify the animation type. Check
+ // the element name instead.
+ if (!target.isSVGGraphicsElement())
+ return false;
+ // Spec: SVG 1.1 section 19.2.15
+ // FIXME: svgTag is missing. Needs to be checked, if transforming <svg> could
+ // cause problems.
+ return isSVGGElement(target) || isSVGDefsElement(target) ||
+ isSVGUseElement(target) || isSVGImageElement(target) ||
+ isSVGSwitchElement(target) || isSVGPathElement(target) ||
+ isSVGRectElement(target) || isSVGCircleElement(target) ||
+ isSVGEllipseElement(target) || isSVGLineElement(target) ||
+ isSVGPolylineElement(target) || isSVGPolygonElement(target) ||
+ isSVGTextElement(target) || isSVGClipPathElement(target) ||
+ isSVGMaskElement(target) || isSVGAElement(target) ||
+ isSVGForeignObjectElement(target);
+}
+}
inline SVGAnimateMotionElement::SVGAnimateMotionElement(Document& document)
- : SVGAnimationElement(animateMotionTag, document),
+ : SVGAnimationElement(SVGNames::animateMotionTag, document),
m_hasToPointAtEndOfDuration(false) {
setCalcMode(CalcModePaced);
}
@@ -46,34 +66,9 @@ DEFINE_NODE_FACTORY(SVGAnimateMotionElement)
SVGAnimateMotionElement::~SVGAnimateMotionElement() {}
-bool SVGAnimateMotionElement::hasValidAttributeType() {
- SVGElement* targetElement = this->targetElement();
- if (!targetElement)
- return false;
-
- // We don't have a special attribute name to verify the animation type. Check
- // the element name instead.
- if (!targetElement->isSVGGraphicsElement())
- return false;
- // Spec: SVG 1.1 section 19.2.15
- // FIXME: svgTag is missing. Needs to be checked, if transforming <svg> could
- // cause problems.
- return (
- isSVGGElement(*targetElement) || isSVGDefsElement(*targetElement) ||
- isSVGUseElement(*targetElement) || isSVGImageElement(*targetElement) ||
- isSVGSwitchElement(*targetElement) || isSVGPathElement(*targetElement) ||
- isSVGRectElement(*targetElement) || isSVGCircleElement(*targetElement) ||
- isSVGEllipseElement(*targetElement) || isSVGLineElement(*targetElement) ||
- isSVGPolylineElement(*targetElement) ||
- isSVGPolygonElement(*targetElement) || isSVGTextElement(*targetElement) ||
- isSVGClipPathElement(*targetElement) ||
- isSVGMaskElement(*targetElement) || isSVGAElement(*targetElement) ||
- isSVGForeignObjectElement(*targetElement));
-}
-
-bool SVGAnimateMotionElement::hasValidAttributeName() {
- // AnimateMotion does not use attributeName so it is always valid.
- return true;
+bool SVGAnimateMotionElement::hasValidTarget() {
+ return SVGAnimationElement::hasValidTarget() &&
+ targetCanHaveMotionTransform(*targetElement());
}
void SVGAnimateMotionElement::parseAttribute(const QualifiedName& name,
@@ -151,10 +146,8 @@ static bool parsePoint(const String& string, FloatPoint& point) {
}
void SVGAnimateMotionElement::resetAnimatedType() {
- if (!hasValidAttributeType())
- return;
SVGElement* targetElement = this->targetElement();
- if (!targetElement)
+ if (!targetElement || !targetCanHaveMotionTransform(*targetElement))
return;
if (AffineTransform* transform = targetElement->animateMotionTransform())
transform->makeIdentity();

Powered by Google App Engine
This is Rietveld 408576698