Index: Source/core/rendering/svg/RenderSVGShape.cpp |
diff --git a/Source/core/rendering/svg/RenderSVGShape.cpp b/Source/core/rendering/svg/RenderSVGShape.cpp |
index ba966d95be3449e7eb0e36b9f6a72cebb94d4431..5573a80d007fe9b4f2a334bd99a75f19a8f944cc 100644 |
--- a/Source/core/rendering/svg/RenderSVGShape.cpp |
+++ b/Source/core/rendering/svg/RenderSVGShape.cpp |
@@ -110,6 +110,19 @@ bool RenderSVGShape::strokeContains(const FloatPoint& point, bool requiresStroke |
return shapeDependentStrokeContains(point); |
} |
+void RenderSVGShape::updateLocalTransform() |
+{ |
+ SVGGraphicsElement* graphicsElement = toSVGGraphicsElement(element()); |
+ if (graphicsElement->hasAnimatedLocalTransform()) { |
+ if (m_localTransform) |
+ m_localTransform->setTransform(graphicsElement->calculateAnimatedLocalTransform()); |
+ else |
+ m_localTransform = adoptPtr(new AffineTransform(graphicsElement->calculateAnimatedLocalTransform())); |
+ } else { |
+ m_localTransform = 0; |
+ } |
+} |
+ |
void RenderSVGShape::layout() |
{ |
bool updateCachedBoundariesInParents = false; |
@@ -123,7 +136,7 @@ void RenderSVGShape::layout() |
} |
if (m_needsTransformUpdate) { |
- m_localTransform = toSVGGraphicsElement(element())->calculateAnimatedLocalTransform(); |
+ updateLocalTransform(); |
m_needsTransformUpdate = false; |
updateCachedBoundariesInParents = true; |
} |
@@ -175,7 +188,7 @@ bool RenderSVGShape::nodeAtFloatPoint(const HitTestRequest& request, HitTestResu |
return false; |
FloatPoint localPoint; |
- if (!SVGRenderSupport::transformToUserSpaceAndCheckClipping(this, m_localTransform, pointInParent, localPoint)) |
+ if (!SVGRenderSupport::transformToUserSpaceAndCheckClipping(this, localToParentTransform(), pointInParent, localPoint)) |
return false; |
PointerEventsHitRules hitRules(PointerEventsHitRules::SVG_GEOMETRY_HITTESTING, request, style()->pointerEvents()); |