Chromium Code Reviews| Index: Source/core/rendering/svg/RenderSVGPath.cpp |
| diff --git a/Source/core/rendering/svg/RenderSVGPath.cpp b/Source/core/rendering/svg/RenderSVGPath.cpp |
| index a6344ec8aeae9892b7eb8c974b7cec8464798d1b..530e2cdb6ce5ea97af90631fe72a9559ec6ebb8d 100644 |
| --- a/Source/core/rendering/svg/RenderSVGPath.cpp |
| +++ b/Source/core/rendering/svg/RenderSVGPath.cpp |
| @@ -49,24 +49,27 @@ RenderSVGPath::~RenderSVGPath() |
| void RenderSVGPath::updateShapeFromElement() |
| { |
| RenderSVGShape::updateShapeFromElement(); |
| + |
| updateZeroLengthSubpaths(); |
| + m_hitTestStrokeBoundingBox = calculateUpdatedHitTestStrokeBoundingBox(); |
| + |
| + m_strokeBoundingBox = style()->svgStyle().hasStroke() ? m_hitTestStrokeBoundingBox : m_fillBoundingBox; |
| - m_strokeBoundingBox = calculateUpdatedStrokeBoundingBox(); |
| + if (!m_markerPositions.isEmpty()) { |
| + const FloatRect markerRect = this->markerRect(strokeWidth()); |
| + m_hitTestStrokeBoundingBox.unite(markerRect); |
|
fs
2015/01/23 11:26:48
This line not needed. (Markers not "sensitive" to
|
| + m_strokeBoundingBox.unite(markerRect); |
| + } |
| } |
| -FloatRect RenderSVGPath::calculateUpdatedStrokeBoundingBox() const |
| +FloatRect RenderSVGPath::calculateUpdatedHitTestStrokeBoundingBox() const |
| { |
| - FloatRect strokeBoundingBox = m_strokeBoundingBox; |
| + FloatRect strokeBoundingBox = m_hitTestStrokeBoundingBox; |
| - if (!m_markerPositions.isEmpty()) |
| - strokeBoundingBox.unite(markerRect(strokeWidth())); |
| - |
| - if (style()->svgStyle().hasStroke()) { |
| - // FIXME: zero-length subpaths do not respect vector-effect = non-scaling-stroke. |
| - float strokeWidth = this->strokeWidth(); |
| - for (size_t i = 0; i < m_zeroLengthLinecapLocations.size(); ++i) |
| - strokeBoundingBox.unite(zeroLengthSubpathRect(m_zeroLengthLinecapLocations[i], strokeWidth)); |
| - } |
| + // FIXME: zero-length subpaths do not respect vector-effect = non-scaling-stroke. |
| + const float strokeWidth = this->strokeWidth(); |
| + for (size_t i = 0; i < m_zeroLengthLinecapLocations.size(); ++i) |
| + strokeBoundingBox.unite(zeroLengthSubpathRect(m_zeroLengthLinecapLocations[i], strokeWidth)); |
| return strokeBoundingBox; |
| } |
| @@ -77,9 +80,9 @@ bool RenderSVGPath::shapeDependentStrokeContains(const FloatPoint& point) |
| return true; |
| const SVGRenderStyle& svgStyle = style()->svgStyle(); |
| + const float strokeWidth = this->strokeWidth(); |
| for (size_t i = 0; i < m_zeroLengthLinecapLocations.size(); ++i) { |
| ASSERT(svgStyle.hasStroke()); |
| - float strokeWidth = this->strokeWidth(); |
| if (svgStyle.capStyle() == SquareCap) { |
| if (zeroLengthSubpathRect(m_zeroLengthLinecapLocations[i], strokeWidth).contains(point)) |
| return true; |