diff options
author | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-05-16 17:16:46 +0000 |
---|---|---|
committer | reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-05-16 17:16:46 +0000 |
commit | 4a3b714d73e585a3985d614600c6b79d5c8b1f1e (patch) | |
tree | 84c21a9c3bbe64fdac59b466636080d63a1f5a1a /src | |
parent | 292aff6aca8677d5159cc2f7fa2bb933a450f049 (diff) |
Iter::next takes a bool (defaults to true for now) if we want to consume degenerates.
path-filling and stroking pass false, as they already are written to handle
small segments (and it makes next() run 2x faster if you pass false).
Review URL: https://codereview.appspot.com/6214049
git-svn-id: http://skia.googlecode.com/svn/trunk@3974 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src')
-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 |
8 files changed, 11 insertions, 12 deletions
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; |