diff options
-rw-r--r-- | include/core/SkPath.h | 10 | ||||
-rw-r--r-- | src/core/SkEdgeBuilder.cpp | 4 | ||||
-rw-r--r-- | src/core/SkPath.cpp | 7 | ||||
-rw-r--r-- | src/core/SkRegion_path.cpp | 2 | ||||
-rw-r--r-- | src/core/SkScan_Hairline.cpp | 2 | ||||
-rw-r--r-- | src/core/SkStroke.cpp | 2 | ||||
-rw-r--r-- | src/effects/SkCornerPathEffect.cpp | 2 | ||||
-rw-r--r-- | src/utils/SkDumpCanvas.cpp | 2 | ||||
-rw-r--r-- | src/utils/SkParsePath.cpp | 2 |
9 files changed, 20 insertions, 13 deletions
diff --git a/include/core/SkPath.h b/include/core/SkPath.h index 4453abd482..03108dfd5b 100644 --- a/include/core/SkPath.h +++ b/include/core/SkPath.h @@ -684,9 +684,16 @@ public: segments have been visited, return kDone_Verb. @param pts The points representing the current verb and/or segment + @param doConsumeDegerates If true, first scan for segments that are + deemed degenerate (too short) and skip those. @return The verb for the current segment */ - Verb next(SkPoint pts[4]); + Verb next(SkPoint pts[4], bool doConsumeDegerates = true) { + if (doConsumeDegerates) { + this->consumeDegenerateSegments(); + } + return this->doNext(pts); + } /** If next() returns kLine_Verb, then this query returns true if the line was the result of a close() command (i.e. the end point is the @@ -717,6 +724,7 @@ public: inline const SkPoint& cons_moveTo(); Verb autoClose(SkPoint pts[2]); void consumeDegenerateSegments(); + Verb doNext(SkPoint pts[4]); }; /** Iterate through the verbs in the path, providing the associated points. diff --git a/src/core/SkEdgeBuilder.cpp b/src/core/SkEdgeBuilder.cpp index 01417e4101..7474ba9502 100644 --- a/src/core/SkEdgeBuilder.cpp +++ b/src/core/SkEdgeBuilder.cpp @@ -92,7 +92,7 @@ int SkEdgeBuilder::build(const SkPath& path, const SkIRect* iclip, setShiftedClip(&clip, *iclip, shiftUp); SkEdgeClipper clipper; - while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { + while ((verb = iter.next(pts, false)) != SkPath::kDone_Verb) { switch (verb) { case SkPath::kMove_Verb: case SkPath::kClose_Verb: @@ -123,7 +123,7 @@ int SkEdgeBuilder::build(const SkPath& path, const SkIRect* iclip, } } } else { - while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { + while ((verb = iter.next(pts, false)) != SkPath::kDone_Verb) { switch (verb) { case SkPath::kMove_Verb: case SkPath::kClose_Verb: diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp index 1a488308c7..ee6a1712f5 100644 --- a/src/core/SkPath.cpp +++ b/src/core/SkPath.cpp @@ -1265,7 +1265,7 @@ void SkPath::transform(const SkMatrix& matrix, SkPath* dst) const { SkPoint pts[4]; SkPath::Verb verb; - while ((verb = iter.next(pts)) != kDone_Verb) { + while ((verb = iter.next(pts, false)) != kDone_Verb) { switch (verb) { case kMove_Verb: tmp.moveTo(pts[0]); @@ -1498,9 +1498,8 @@ void SkPath::Iter::consumeDegenerateSegments() { } } -SkPath::Verb SkPath::Iter::next(SkPoint ptsParam[4]) { +SkPath::Verb SkPath::Iter::doNext(SkPoint ptsParam[4]) { SkASSERT(ptsParam); - this->consumeDegenerateSegments(); if (fVerbs == fVerbStop) { // Close the curve if requested and if there is some curve to close @@ -1689,7 +1688,7 @@ void SkPath::dump(bool forceClose, const char title[]) const { SkDebugf("path: forceClose=%s %s\n", forceClose ? "true" : "false", title ? title : ""); - while ((verb = iter.next(pts)) != kDone_Verb) { + while ((verb = iter.next(pts, false)) != kDone_Verb) { switch (verb) { case kMove_Verb: #ifdef SK_CAN_USE_FLOAT diff --git a/src/core/SkRegion_path.cpp b/src/core/SkRegion_path.cpp index 85fd6bfb43..5ea792afb7 100644 --- a/src/core/SkRegion_path.cpp +++ b/src/core/SkRegion_path.cpp @@ -243,7 +243,7 @@ static int count_path_runtype_values(const SkPath& path, int* itop, int* ibot) { SkScalar top = SkIntToScalar(SK_MaxS16); SkScalar bot = SkIntToScalar(SK_MinS16); - while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { + while ((verb = iter.next(pts, false)) != SkPath::kDone_Verb) { maxEdges += gPathVerbToMaxEdges[verb]; int lastIndex = gPathVerbToInitialLastIndex[verb]; diff --git a/src/core/SkScan_Hairline.cpp b/src/core/SkScan_Hairline.cpp index ffdf92f1fa..2a9660a154 100644 --- a/src/core/SkScan_Hairline.cpp +++ b/src/core/SkScan_Hairline.cpp @@ -303,7 +303,7 @@ static void hair_path(const SkPath& path, const SkRasterClip& rclip, SkBlitter* SkPoint pts[4]; SkPath::Verb verb; - while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { + while ((verb = iter.next(pts, false)) != SkPath::kDone_Verb) { switch (verb) { case SkPath::kLine_Verb: lineproc(pts[0], pts[1], clip, blitter); diff --git a/src/core/SkStroke.cpp b/src/core/SkStroke.cpp index 1c9b0c04d7..fd7dccc6c7 100644 --- a/src/core/SkStroke.cpp +++ b/src/core/SkStroke.cpp @@ -591,7 +591,7 @@ void SkStroke::strokePath(const SkPath& src, SkPath* dst) const { SkPoint pts[4]; SkPath::Verb verb, lastSegment = SkPath::kMove_Verb; - while ((verb = iter.next(pts)) != SkPath::kDone_Verb) { + while ((verb = iter.next(pts, false)) != SkPath::kDone_Verb) { switch (verb) { case SkPath::kMove_Verb: APPLY_PROC(proc, &pts[0], 1); diff --git a/src/effects/SkCornerPathEffect.cpp b/src/effects/SkCornerPathEffect.cpp index bf59a27a1b..474623175b 100644 --- a/src/effects/SkCornerPathEffect.cpp +++ b/src/effects/SkCornerPathEffect.cpp @@ -56,7 +56,7 @@ bool SkCornerPathEffect::filterPath(SkPath* dst, const SkPath& src, lastCorner.set(0, 0); for (;;) { - switch (verb = iter.next(pts)) { + switch (verb = iter.next(pts, false)) { case SkPath::kMove_Verb: // close out the previous (open) contour if (SkPath::kLine_Verb == prevVerb) { diff --git a/src/utils/SkDumpCanvas.cpp b/src/utils/SkDumpCanvas.cpp index 72a5c9299c..8a9ab7a28b 100644 --- a/src/utils/SkDumpCanvas.cpp +++ b/src/utils/SkDumpCanvas.cpp @@ -33,7 +33,7 @@ static void dumpVerbs(const SkPath& path, SkString* str) { SkPath::Iter iter(path, false); SkPoint pts[4]; for (;;) { - switch (iter.next(pts)) { + switch (iter.next(pts, false)) { case SkPath::kMove_Verb: str->appendf(" M%g,%g", pts[0].fX, pts[0].fY); break; diff --git a/src/utils/SkParsePath.cpp b/src/utils/SkParsePath.cpp index 60304935fd..22433e6b7d 100644 --- a/src/utils/SkParsePath.cpp +++ b/src/utils/SkParsePath.cpp @@ -220,7 +220,7 @@ void SkParsePath::ToSVGString(const SkPath& path, SkString* str) { SkPoint pts[4]; for (;;) { - switch (iter.next(pts)) { + switch (iter.next(pts, false)) { case SkPath::kMove_Verb: append_scalars(&stream, 'M', &pts[0].fX, 2); break; |