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..b4ab298affd99d79346b5c3546521f41a6603a7b 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGViewportContainer.cpp |
@@ -64,14 +64,27 @@ 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()); |
+} |
+ |
+LayoutSVGContainer::TransformChange LayoutSVGViewportContainer::calculateLocalTransform() |
{ |
if (!m_needsTransformUpdate) |
- return false; |
+ return TransformChange::None; |
+ std::pair<double, double> oldScale = scaleReference(m_localToParentTransform); |
m_localToParentTransform = AffineTransform::translation(m_viewport.x(), m_viewport.y()) * viewportTransform(); |
m_needsTransformUpdate = false; |
- return true; |
+ return scaleReference(m_localToParentTransform) != oldScale |
+ ? TransformChange::Full : TransformChange::ScaleInvariant; |
} |
AffineTransform LayoutSVGViewportContainer::viewportTransform() const |