Index: Source/core/svg/SVGGraphicsElement.cpp |
diff --git a/Source/core/svg/SVGGraphicsElement.cpp b/Source/core/svg/SVGGraphicsElement.cpp |
index b02670e20cc4b83c76781e5d019443ac8b64e7f1..1f4a7c5d56fe8c8dd35fc7a07d22bcc02d52e321 100644 |
--- a/Source/core/svg/SVGGraphicsElement.cpp |
+++ b/Source/core/svg/SVGGraphicsElement.cpp |
@@ -32,17 +32,17 @@ |
namespace WebCore { |
// Animated property definitions |
-DEFINE_ANIMATED_TRANSFORM_LIST(SVGGraphicsElement, SVGNames::transformAttr, Transform, transform) |
BEGIN_REGISTER_ANIMATED_PROPERTIES(SVGGraphicsElement) |
- REGISTER_LOCAL_ANIMATED_PROPERTY(transform) |
REGISTER_PARENT_ANIMATED_PROPERTIES(SVGElement) |
END_REGISTER_ANIMATED_PROPERTIES |
SVGGraphicsElement::SVGGraphicsElement(const QualifiedName& tagName, Document& document, ConstructionType constructionType) |
: SVGElement(tagName, document, constructionType) |
, SVGTests(this) |
+ , m_transform(SVGAnimatedTransformList::create(this, SVGNames::transformAttr, SVGTransformList::create())) |
{ |
+ addToPropertyMap(m_transform); |
registerAnimatedPropertiesForSVGGraphicsElement(); |
} |
@@ -50,7 +50,7 @@ SVGGraphicsElement::~SVGGraphicsElement() |
{ |
} |
-AffineTransform SVGGraphicsElement::getTransformToElement(SVGElement* target, ExceptionState& exceptionState) |
+PassRefPtr<SVGMatrixTearOff> SVGGraphicsElement::getTransformToElement(SVGElement* target, ExceptionState& exceptionState) |
{ |
AffineTransform ctm = getCTM(AllowStyleUpdate); |
@@ -58,12 +58,12 @@ AffineTransform SVGGraphicsElement::getTransformToElement(SVGElement* target, Ex |
AffineTransform targetCTM = toSVGGraphicsElement(target)->getCTM(AllowStyleUpdate); |
if (!targetCTM.isInvertible()) { |
exceptionState.throwDOMException(InvalidStateError, "The target transformation is not invertable."); |
- return ctm; |
+ return 0; |
} |
ctm = targetCTM.inverse() * ctm; |
} |
- return ctm; |
+ return SVGMatrixTearOff::create(ctm); |
} |
static AffineTransform computeCTM(SVGGraphicsElement* element, SVGElement::CTMScope mode, SVGGraphicsElement::StyleUpdateStrategy styleUpdateStrategy) |
@@ -99,6 +99,16 @@ AffineTransform SVGGraphicsElement::getScreenCTM(StyleUpdateStrategy styleUpdate |
return computeCTM(this, ScreenScope, styleUpdateStrategy); |
} |
+PassRefPtr<SVGMatrixTearOff> SVGGraphicsElement::getCTMFromJavascript() |
+{ |
+ return SVGMatrixTearOff::create(getCTM()); |
+} |
+ |
+PassRefPtr<SVGMatrixTearOff> SVGGraphicsElement::getScreenCTMFromJavascript() |
+{ |
+ return SVGMatrixTearOff::create(getScreenCTM()); |
+} |
+ |
AffineTransform SVGGraphicsElement::animatedLocalTransform() const |
{ |
AffineTransform matrix; |
@@ -122,7 +132,7 @@ AffineTransform SVGGraphicsElement::animatedLocalTransform() const |
matrix.setF(matrix.f() / zoom); |
} |
} else { |
- transformCurrentValue().concatenate(matrix); |
+ m_transform->currentValue()->concatenate(matrix); |
} |
if (m_supplementalTransform) |
@@ -154,17 +164,16 @@ void SVGGraphicsElement::parseAttribute(const QualifiedName& name, const AtomicS |
return; |
} |
- if (name == SVGNames::transformAttr) { |
- SVGTransformList newList; |
- newList.parse(value); |
- detachAnimatedTransformListWrappers(newList.size()); |
- setTransformBaseValue(newList); |
- return; |
- } else if (SVGTests::parseAttribute(name, value)) { |
+ SVGParsingError parseError = NoError; |
+ |
+ if (name == SVGNames::transformAttr) |
+ m_transform->setBaseValueAsString(value, parseError); |
+ else if (SVGTests::parseAttribute(name, value)) |
return; |
- } |
+ else |
+ ASSERT_NOT_REACHED(); |
- ASSERT_NOT_REACHED(); |
+ reportAttributeParsingError(parseError, name, value); |
} |
void SVGGraphicsElement::svgAttributeChanged(const QualifiedName& attrName) |