Index: third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp |
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp |
index d0d69377816a2f37d2f07ea860ee979d49ee2d61..edd346104c2246b95f78aa32038576b5ba09cea9 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp |
@@ -64,14 +64,29 @@ void LayoutSVGViewportContainer::calcViewport() |
} |
} |
-bool LayoutSVGViewportContainer::calculateLocalTransform() |
+void LayoutSVGViewportContainer::setNeedsTransformUpdate() |
+{ |
+ setMayNeedPaintInvalidationSubtree(); |
+ m_needsTransformUpdate = true; |
+} |
+ |
+static std::pair<double, double> scaleReference(const AffineTransform& transform) |
+{ |
+ return std::make_pair(transform.xScaleSquared(), transform.yScaleSquared()); |
+} |
+ |
+unsigned LayoutSVGViewportContainer::calculateLocalTransform() |
{ |
if (!m_needsTransformUpdate) |
- return false; |
+ return NoTransformChange; |
+ std::pair<double, double> oldScale = scaleReference(m_localToParentTransform); |
m_localToParentTransform = AffineTransform::translation(m_viewport.x(), m_viewport.y()) * viewportTransform(); |
m_needsTransformUpdate = false; |
- return true; |
+ |
+ unsigned changeFlags = TransformChange; |
+ changeFlags |= scaleReference(m_localToParentTransform) != oldScale ? ScaleChange : 0; |
+ return changeFlags; |
} |
AffineTransform LayoutSVGViewportContainer::viewportTransform() const |