Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1345)

Unified Diff: Source/core/layout/svg/LayoutSVGPath.cpp

Issue 1328693002: Drop special-case handling of zero-length subpaths (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase; TEs. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/layout/svg/LayoutSVGPath.h ('k') | Source/core/layout/svg/LayoutSVGShape.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/layout/svg/LayoutSVGPath.cpp
diff --git a/Source/core/layout/svg/LayoutSVGPath.cpp b/Source/core/layout/svg/LayoutSVGPath.cpp
index 2d14461c137230652dbb042e1b3687562a1e4c11..89e82d7eaca0f4082b352a428fa018ae4222aed6 100644
--- a/Source/core/layout/svg/LayoutSVGPath.cpp
+++ b/Source/core/layout/svg/LayoutSVGPath.cpp
@@ -32,7 +32,6 @@
#include "core/layout/svg/LayoutSVGResourceMarker.h"
#include "core/layout/svg/SVGResources.h"
#include "core/layout/svg/SVGResourcesCache.h"
-#include "core/layout/svg/SVGSubpathData.h"
#include "core/svg/SVGGeometryElement.h"
#include "wtf/MathExtras.h"
@@ -47,12 +46,6 @@ LayoutSVGPath::~LayoutSVGPath()
{
}
-void LayoutSVGPath::updateShapeFromElement()
-{
- LayoutSVGShape::updateShapeFromElement();
- updateZeroLengthSubpaths();
-}
-
void LayoutSVGPath::updateStrokeAndFillBoundingBoxes()
{
LayoutSVGShape::updateStrokeAndFillBoundingBoxes();
@@ -61,13 +54,6 @@ void LayoutSVGPath::updateStrokeAndFillBoundingBoxes()
processMarkerPositions();
if (!m_markerPositions.isEmpty())
m_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)
- m_strokeBoundingBox.unite(zeroLengthSubpathRect(m_zeroLengthLinecapLocations[i], strokeWidth));
- }
}
FloatRect LayoutSVGPath::hitTestStrokeBoundingBox() const
@@ -98,59 +84,9 @@ FloatRect LayoutSVGPath::hitTestStrokeBoundingBox() const
}
box.inflate(delta);
-
- for (size_t i = 0; i < m_zeroLengthLinecapLocations.size(); ++i)
- box.unite(zeroLengthSubpathRect(m_zeroLengthLinecapLocations[i], strokeWidth));
-
return box;
}
-bool LayoutSVGPath::shapeDependentStrokeContains(const FloatPoint& point)
-{
- if (LayoutSVGShape::shapeDependentStrokeContains(point))
- return true;
-
- const SVGComputedStyle& svgStyle = style()->svgStyle();
- const float strokeWidth = this->strokeWidth();
- for (size_t i = 0; i < m_zeroLengthLinecapLocations.size(); ++i) {
- ASSERT(svgStyle.hasStroke());
- if (svgStyle.capStyle() == SquareCap) {
- if (zeroLengthSubpathRect(m_zeroLengthLinecapLocations[i], strokeWidth).contains(point))
- return true;
- } else {
- ASSERT(svgStyle.capStyle() == RoundCap);
- FloatPoint radiusVector(point.x() - m_zeroLengthLinecapLocations[i].x(), point.y() - m_zeroLengthLinecapLocations[i].y());
- if (radiusVector.lengthSquared() < strokeWidth * strokeWidth * .25f)
- return true;
- }
- }
- return false;
-}
-
-bool LayoutSVGPath::shouldStrokeZeroLengthSubpath() const
-{
- // Spec(11.4): Any zero length subpath shall not be stroked if the "stroke-linecap" property has a value of butt
- // but shall be stroked if the "stroke-linecap" property has a value of round or square
- return style()->svgStyle().hasStroke() && style()->svgStyle().capStyle() != ButtCap;
-}
-
-FloatRect LayoutSVGPath::zeroLengthSubpathRect(const FloatPoint& linecapPosition, float strokeWidth)
-{
- return FloatRect(linecapPosition.x() - strokeWidth / 2, linecapPosition.y() - strokeWidth / 2, strokeWidth, strokeWidth);
-}
-
-void LayoutSVGPath::updateZeroLengthSubpaths()
-{
- m_zeroLengthLinecapLocations.clear();
-
- if (!strokeWidth() || !shouldStrokeZeroLengthSubpath())
- return;
-
- SVGSubpathData subpathData(m_zeroLengthLinecapLocations);
- path().apply(&subpathData, SVGSubpathData::updateFromPathElement);
- subpathData.pathIsDone();
-}
-
FloatRect LayoutSVGPath::markerRect(float strokeWidth) const
{
ASSERT(!m_markerPositions.isEmpty());
« no previous file with comments | « Source/core/layout/svg/LayoutSVGPath.h ('k') | Source/core/layout/svg/LayoutSVGShape.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698