| Index: Source/core/rendering/svg/RenderSVGRoot.cpp
|
| diff --git a/Source/core/rendering/svg/RenderSVGRoot.cpp b/Source/core/rendering/svg/RenderSVGRoot.cpp
|
| index 5c07b8281743446d2a0adb82fed6ef8e6df633b3..91de8cf66a81b2e1cda962012ca3af04a6d9206d 100644
|
| --- a/Source/core/rendering/svg/RenderSVGRoot.cpp
|
| +++ b/Source/core/rendering/svg/RenderSVGRoot.cpp
|
| @@ -163,9 +163,6 @@
|
| {
|
| ASSERT(needsLayout());
|
|
|
| - // Arbitrary affine transforms are incompatible with LayoutState.
|
| - ForceHorriblySlowRectMapping slowRectMapping(*this);
|
| -
|
| bool needsLayout = selfNeedsLayout();
|
|
|
| LayoutSize oldSize = size();
|
| @@ -347,7 +344,7 @@
|
| return m_localToParentTransform;
|
| }
|
|
|
| -LayoutRect RenderSVGRoot::clippedOverflowRectForPaintInvalidation(const RenderLayerModelObject* paintInvalidationContainer) const
|
| +LayoutRect RenderSVGRoot::clippedOverflowRectForPaintInvalidation(const RenderLayerModelObject* paintInvalidationContainer, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| // This is an open-coded aggregate of SVGRenderSupport::clippedOverflowRectForPaintInvalidation,
|
| // RenderSVGRoot::computeFloatRectForPaintInvalidation and RenderReplaced::clippedOverflowRectForPaintInvalidation.
|
| @@ -377,11 +374,11 @@
|
|
|
| // Compute the repaint rect in the parent coordinate space.
|
| LayoutRect rect = enclosingIntRect(repaintRect);
|
| - RenderReplaced::mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect);
|
| + RenderReplaced::mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect, paintInvalidationState);
|
| return rect;
|
| }
|
|
|
| -void RenderSVGRoot::computeFloatRectForPaintInvalidation(const RenderLayerModelObject* paintInvalidationContainer, FloatRect& paintInvalidationRect, bool fixed) const
|
| +void RenderSVGRoot::computeFloatRectForPaintInvalidation(const RenderLayerModelObject* paintInvalidationContainer, FloatRect& paintInvalidationRect, bool fixed, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| // Apply our local transforms (except for x/y translation), then our shadow,
|
| // and then call RenderBox's method to handle all the normal CSS Box model bits
|
| @@ -392,21 +389,21 @@
|
| paintInvalidationRect.intersect(pixelSnappedBorderBoxRect());
|
|
|
| LayoutRect rect = enclosingIntRect(paintInvalidationRect);
|
| - RenderReplaced::mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect, fixed);
|
| + RenderReplaced::mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect, fixed, paintInvalidationState);
|
| paintInvalidationRect = rect;
|
| }
|
|
|
| // This method expects local CSS box coordinates.
|
| // Callers with local SVG viewport coordinates should first apply the localToBorderBoxTransform
|
| // to convert from SVG viewport coordinates to local CSS box coordinates.
|
| -void RenderSVGRoot::mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
|
| +void RenderSVGRoot::mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed, const PaintInvalidationState* paintInvalidationState) const
|
| {
|
| ASSERT(mode & ~IsFixed); // We should have no fixed content in the SVG rendering tree.
|
| // We used to have this ASSERT here, but we removed it when enabling layer squashing.
|
| // See http://crbug.com/364901
|
| // ASSERT(mode & UseTransforms); // mapping a point through SVG w/o respecting trasnforms is useless.
|
|
|
| - RenderReplaced::mapLocalToContainer(repaintContainer, transformState, mode | ApplyContainerFlip, wasFixed);
|
| + RenderReplaced::mapLocalToContainer(repaintContainer, transformState, mode | ApplyContainerFlip, wasFixed, paintInvalidationState);
|
| }
|
|
|
| const RenderObject* RenderSVGRoot::pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap& geometryMap) const
|
|
|