summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/svg/SVGUseElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/svg/SVGUseElement.cpp')
-rw-r--r--Source/WebCore/svg/SVGUseElement.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/WebCore/svg/SVGUseElement.cpp b/Source/WebCore/svg/SVGUseElement.cpp
index 9f43f82..cc53bda 100644
--- a/Source/WebCore/svg/SVGUseElement.cpp
+++ b/Source/WebCore/svg/SVGUseElement.cpp
@@ -227,6 +227,24 @@ void SVGUseElement::synchronizeProperty(const QualifiedName& attrName)
SVGTests::synchronizeProperties(this, attrName);
}
+AttributeToPropertyTypeMap& SVGUseElement::attributeToPropertyTypeMap()
+{
+ DEFINE_STATIC_LOCAL(AttributeToPropertyTypeMap, s_attributeToPropertyTypeMap, ());
+ return s_attributeToPropertyTypeMap;
+}
+
+void SVGUseElement::fillAttributeToPropertyTypeMap()
+{
+ AttributeToPropertyTypeMap& attributeToPropertyTypeMap = this->attributeToPropertyTypeMap();
+
+ SVGStyledTransformableElement::fillPassedAttributeToPropertyTypeMap(attributeToPropertyTypeMap);
+ attributeToPropertyTypeMap.set(SVGNames::xAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::yAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::widthAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(SVGNames::heightAttr, AnimatedLength);
+ attributeToPropertyTypeMap.set(XLinkNames::hrefAttr, AnimatedLength);
+}
+
static void updateContainerSize(SVGUseElement* useElement, SVGElementInstance* targetInstance)
{
// Depth-first used to write the method in early exit style, no particular other reason.
@@ -716,6 +734,8 @@ void SVGUseElement::buildInstanceTree(SVGElement* target, SVGElementInstance* ta
// Enter recursion, appending new instance tree nodes to the "instance" object.
buildInstanceTree(element, instancePtr, foundProblem);
+ if (foundProblem)
+ return;
}
if (!targetHasUseTag || !newTarget)