aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-05-16 17:16:46 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-05-16 17:16:46 +0000
commit4a3b714d73e585a3985d614600c6b79d5c8b1f1e (patch)
tree84c21a9c3bbe64fdac59b466636080d63a1f5a1a /src
parent292aff6aca8677d5159cc2f7fa2bb933a450f049 (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.cpp4
-rw-r--r--src/core/SkPath.cpp7
-rw-r--r--src/core/SkRegion_path.cpp2
-rw-r--r--src/core/SkScan_Hairline.cpp2
-rw-r--r--src/core/SkStroke.cpp2
-rw-r--r--src/effects/SkCornerPathEffect.cpp2
-rw-r--r--src/utils/SkDumpCanvas.cpp2
-rw-r--r--src/utils/SkParsePath.cpp2
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;