Index: third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.cpp |
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.cpp |
index 452d7234e434a72b169f17fbdad3f42e98af7acc..6b93388b791d60205060d5c0cee5f84a78b921cb 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGBlock.cpp |
@@ -99,6 +99,9 @@ void LayoutSVGBlock::styleDidChange(StyleDifference diff, |
void LayoutSVGBlock::mapLocalToAncestor(const LayoutBoxModelObject* ancestor, |
TransformState& transformState, |
MapCoordinatesFlags flags) const { |
+ // Convert from local HTML coordinates to local SVG coordinates. |
+ transformState.move(locationOffset()); |
+ // Apply other mappings on local SVG coordinates. |
SVGLayoutSupport::mapLocalToAncestor(this, ancestor, transformState, flags); |
} |
@@ -108,12 +111,18 @@ void LayoutSVGBlock::mapAncestorToLocal(const LayoutBoxModelObject* ancestor, |
if (this == ancestor) |
return; |
+ // Map to local SVG coordinates. |
SVGLayoutSupport::mapAncestorToLocal(*this, ancestor, transformState, flags); |
+ // Convert from local SVG coordinates to local HTML coordinates. |
+ transformState.move(locationOffset()); |
Xianzhu
2017/03/28 17:45:09
This is the fix. In the original patch, this was "
|
} |
const LayoutObject* LayoutSVGBlock::pushMappingToContainer( |
const LayoutBoxModelObject* ancestorToStopAt, |
LayoutGeometryMap& geometryMap) const { |
+ // Convert from local HTML coordinates to local SVG coordinates. |
+ geometryMap.push(this, locationOffset()); |
+ // Apply other mappings on local SVG coordinates. |
return SVGLayoutSupport::pushMappingToContainer(this, ancestorToStopAt, |
geometryMap); |
} |
@@ -128,6 +137,9 @@ bool LayoutSVGBlock::mapToVisualRectInAncestorSpaceInternal( |
VisualRectFlags) const { |
transformState.flatten(); |
LayoutRect rect(transformState.lastPlanarQuad().boundingBox()); |
+ // Convert from local HTML coordinates to local SVG coordinates. |
+ rect.moveBy(location()); |
+ // Apply other mappings on local SVG coordinates. |
bool retval = SVGLayoutSupport::mapToVisualRectInAncestorSpace( |
*this, ancestor, FloatRect(rect), rect); |
transformState.setQuad(FloatQuad(FloatRect(rect))); |