| Index: Source/core/paint/SVGShapePainter.cpp
|
| diff --git a/Source/core/paint/SVGShapePainter.cpp b/Source/core/paint/SVGShapePainter.cpp
|
| index 1b240fa4a7e3dbeb4683035aa35a6f7460946e97..24c484159044a0e073dde8449aef26a58ae2b8f5 100644
|
| --- a/Source/core/paint/SVGShapePainter.cpp
|
| +++ b/Source/core/paint/SVGShapePainter.cpp
|
| @@ -240,23 +240,23 @@ void SVGShapePainter::strokeZeroLengthLineCaps(GraphicsContext* context, const S
|
| fillPaint.setStyle(SkPaint::kFill_Style);
|
|
|
| AffineTransform nonScalingTransform;
|
| - if (m_layoutSVGShape.hasNonScalingStroke())
|
| + bool hasNonScalingStroke = m_layoutSVGShape.hasNonScalingStroke();
|
| + if (hasNonScalingStroke)
|
| nonScalingTransform = m_layoutSVGShape.nonScalingStrokeTransform();
|
|
|
| - Path tempPath;
|
| - for (size_t i = 0; i < zeroLengthLineCaps->size(); ++i) {
|
| - FloatRect subpathRect = LayoutSVGPath::zeroLengthSubpathRect((*zeroLengthLineCaps)[i], m_layoutSVGShape.strokeWidth());
|
| - tempPath.clear();
|
| + for (const FloatPoint& capPosition : *zeroLengthLineCaps) {
|
| + FloatPoint position = capPosition;
|
| + // If non-scaling-stroke is in effect, apply the transform to the
|
| + // position (being the non-stroke geometry), and then paint the
|
| + // requested shape. The CTM should've been adjusted in
|
| + // SVGShapePainter::paint.
|
| + if (hasNonScalingStroke)
|
| + position = nonScalingTransform.mapPoint(position);
|
| + FloatRect subpathRect = LayoutSVGPath::zeroLengthSubpathRect(position, m_layoutSVGShape.strokeWidth());
|
| if (m_layoutSVGShape.style()->svgStyle().capStyle() == SquareCap)
|
| - tempPath.addRect(subpathRect);
|
| + context->drawRect(subpathRect, fillPaint);
|
| else
|
| - tempPath.addEllipse(subpathRect);
|
| - // This open-codes LayoutSVGShape::nonScalingStrokePath, because the
|
| - // requirements here differ (we have a temporary path that we can
|
| - // mutate.)
|
| - if (m_layoutSVGShape.hasNonScalingStroke())
|
| - tempPath.transform(nonScalingTransform);
|
| - context->drawPath(tempPath.skPath(), fillPaint);
|
| + context->drawOval(subpathRect, fillPaint);
|
| }
|
| }
|
|
|
|
|