| Index: third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp b/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp
|
| index a7bdf9680f7f2dac68b94e3285a4ab87e027df77..b223120dafd0ce1e9b5b7fd50a45e5bacee4c5b6 100644
|
| --- a/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/svg/SVGLayoutSupport.cpp
|
| @@ -34,6 +34,7 @@
|
| #include "core/layout/svg/LayoutSVGRoot.h"
|
| #include "core/layout/svg/LayoutSVGShape.h"
|
| #include "core/layout/svg/LayoutSVGText.h"
|
| +#include "core/layout/svg/LayoutSVGTransformableContainer.h"
|
| #include "core/layout/svg/LayoutSVGViewportContainer.h"
|
| #include "core/layout/svg/SVGResources.h"
|
| #include "core/layout/svg/SVGResourcesCache.h"
|
| @@ -259,35 +260,33 @@ inline bool SVGLayoutSupport::layoutSizeOfNearestViewportChanged(const LayoutObj
|
| return toLayoutSVGRoot(start)->isLayoutSizeChanged();
|
| }
|
|
|
| -bool SVGLayoutSupport::transformToRootChanged(LayoutObject* ancestor)
|
| +bool SVGLayoutSupport::transformToRootChanged(const LayoutObject* ancestor)
|
| {
|
| while (ancestor && !ancestor->isSVGRoot()) {
|
| if (ancestor->isSVGTransformableContainer())
|
| - return toLayoutSVGContainer(ancestor)->didTransformToRootUpdate();
|
| + return toLayoutSVGTransformableContainer(ancestor)->didTransformToRootUpdate();
|
| if (ancestor->isSVGViewportContainer())
|
| return toLayoutSVGViewportContainer(ancestor)->didTransformToRootUpdate();
|
| ancestor = ancestor->parent();
|
| }
|
| -
|
| return false;
|
| }
|
|
|
| -void SVGLayoutSupport::layoutChildren(LayoutObject* start, bool selfNeedsLayout)
|
| +void SVGLayoutSupport::layoutChildren(LayoutObject* start, bool forceLayout, bool transformChanged)
|
| {
|
| // When hasRelativeLengths() is false, no descendants have relative lengths
|
| // (hence no one is interested in viewport size changes).
|
| bool layoutSizeChanged = toSVGElement(start->node())->hasRelativeLengths()
|
| && layoutSizeOfNearestViewportChanged(start);
|
| - bool transformChanged = transformToRootChanged(start);
|
|
|
| for (LayoutObject* child = start->slowFirstChild(); child; child = child->nextSibling()) {
|
| - bool forceLayout = selfNeedsLayout;
|
| + bool forceChildLayout = forceLayout;
|
|
|
| if (transformChanged) {
|
| // If the transform changed we need to update the text metrics (note: this also happens for layoutSizeChanged=true).
|
| if (child->isSVGText())
|
| toLayoutSVGText(child)->setNeedsTextMetricsUpdate();
|
| - forceLayout = true;
|
| + forceChildLayout = true;
|
| }
|
|
|
| if (layoutSizeChanged) {
|
| @@ -303,7 +302,7 @@ void SVGLayoutSupport::layoutChildren(LayoutObject* start, bool selfNeedsLayout)
|
| toLayoutSVGText(child)->setNeedsPositioningValuesUpdate();
|
| }
|
|
|
| - forceLayout = true;
|
| + forceChildLayout = true;
|
| }
|
| }
|
| }
|
| @@ -321,7 +320,7 @@ void SVGLayoutSupport::layoutChildren(LayoutObject* start, bool selfNeedsLayout)
|
| child->layoutIfNeeded();
|
| } else {
|
| SubtreeLayoutScope layoutScope(*child);
|
| - if (forceLayout)
|
| + if (forceChildLayout)
|
| layoutScope.setNeedsLayout(child, LayoutInvalidationReason::SvgChanged);
|
|
|
| // Lay out any referenced resources before the child.
|
|
|