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..6af63577485c656c2504daa1ee167af4b123096a 100644 |
--- a/Source/core/rendering/svg/RenderSVGShape.cpp |
+++ b/Source/core/rendering/svg/RenderSVGShape.cpp |
@@ -123,7 +123,16 @@ void RenderSVGShape::layout() |
} |
if (m_needsTransformUpdate) { |
- m_localTransform = toSVGGraphicsElement(element())->calculateAnimatedLocalTransform(); |
+ SVGGraphicsElement* graphicsElement = toSVGGraphicsElement(element()); |
+ if (graphicsElement->hasAnimatedLocalTransform()) { |
pdr.
2014/11/07 04:21:33
I'm not a huge fan of how this looks... do either
f(malita)
2014/11/07 18:23:12
Not necessarily better, but if you want to optimiz
fs
2014/11/10 11:36:43
No greater suggestions here either. You could get
|
+ if (m_localTransform) |
+ *m_localTransform = graphicsElement->calculateAnimatedLocalTransform(); |
+ else |
+ m_localTransform = adoptPtr(new AffineTransform(graphicsElement->calculateAnimatedLocalTransform())); |
+ } else { |
+ m_localTransform = 0; |
+ } |
+ |
m_needsTransformUpdate = false; |
updateCachedBoundariesInParents = true; |
} |
@@ -175,7 +184,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()); |