Index: src/core/SkStroke.cpp |
diff --git a/src/core/SkStroke.cpp b/src/core/SkStroke.cpp |
index 1689f9730b008716e2217fb756953d2b48ede1b4..522a000712f875f22bcfa2fdee65eba13ba1a240 100644 |
--- a/src/core/SkStroke.cpp |
+++ b/src/core/SkStroke.cpp |
@@ -619,6 +619,10 @@ void SkPathStroker::conicTo(const SkPoint& pt1, const SkPoint& pt2, SkScalar wei |
SkPoint reduction; |
ReductionType reductionType = CheckConicLinear(conic, &reduction); |
if (kPoint_ReductionType == reductionType) { |
+ /* If the stroke consists of a moveTo followed by a degenerate curve, treat it |
+ as if it were followed by a zero-length line. Lines without length |
+ can have square and round end caps. */ |
+ this->lineTo(pt2); |
return; |
} |
if (kLine_ReductionType == reductionType) { |
@@ -653,6 +657,10 @@ void SkPathStroker::quadTo(const SkPoint& pt1, const SkPoint& pt2) { |
SkPoint reduction; |
ReductionType reductionType = CheckQuadLinear(quad, &reduction); |
if (kPoint_ReductionType == reductionType) { |
+ /* If the stroke consists of a moveTo followed by a degenerate curve, treat it |
+ as if it were followed by a zero-length line. Lines without length |
+ can have square and round end caps. */ |
+ this->lineTo(pt2); |
return; |
} |
if (kLine_ReductionType == reductionType) { |
@@ -1168,6 +1176,10 @@ void SkPathStroker::cubicTo(const SkPoint& pt1, const SkPoint& pt2, |
const SkPoint* tangentPt; |
ReductionType reductionType = CheckCubicLinear(cubic, reduction, &tangentPt); |
if (kPoint_ReductionType == reductionType) { |
+ /* If the stroke consists of a moveTo followed by a degenerate curve, treat it |
+ as if it were followed by a zero-length line. Lines without length |
+ can have square and round end caps. */ |
+ this->lineTo(pt3); |
return; |
} |
if (kLine_ReductionType == reductionType) { |