From 92a50eaab977543031f12a1b0b1d4ce07f80ba75 Mon Sep 17 00:00:00 2001 From: "reed@android.com" Date: Fri, 14 Aug 2009 19:27:37 +0000 Subject: [PATCH] close out previous contour (so we don't miss the last segment) git-svn-id: http://skia.googlecode.com/svn/trunk@325 2bbb7eff-a529-9590-31e7-b0007b416f81 --- samplecode/SamplePathEffects.cpp | 45 +++++++++++------------------- src/effects/SkCornerPathEffect.cpp | 4 +++ 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/samplecode/SamplePathEffects.cpp b/samplecode/SamplePathEffects.cpp index 1036db611..42f50a38d 100644 --- a/samplecode/SamplePathEffects.cpp +++ b/samplecode/SamplePathEffects.cpp @@ -110,7 +110,7 @@ public: { SkRandom rand; int steps = 20; - SkScalar dist = SkIntToScalar(500); + SkScalar dist = SkIntToScalar(400); SkScalar x = SkIntToScalar(20); SkScalar y = SkIntToScalar(50); @@ -118,9 +118,22 @@ public: for (int i = 0; i < steps; i++) { x += dist/steps; - fPath.lineTo(x, y + SkIntToScalar(rand.nextS() % 25)); + SkScalar tmpY = y + SkIntToScalar(rand.nextS() % 25); + if (i == steps/2) { + fPath.moveTo(x, tmpY); + } else { + fPath.lineTo(x, tmpY); + } } + { + SkRect oval; + oval.set(SkIntToScalar(20), SkIntToScalar(30), + SkIntToScalar(100), SkIntToScalar(60)); + oval.offset(x, 0); + fPath.addRoundRect(oval, SkIntToScalar(8), SkIntToScalar(8)); + } + fClickPt.set(SkIntToScalar(200), SkIntToScalar(200)); } @@ -175,32 +188,6 @@ protected: // return; } - if (false) - { - SkPath path; - SkPoint pts[] = { SkIntToScalar(100), SkIntToScalar(100), - SkIntToScalar(200), SkIntToScalar(100), - SkIntToScalar(100), SkIntToScalar(200) - }; - SkPaint paint; - - pts[2] = fClickPt; - - paint.setAntiAlias(true); - paint.setStyle(SkPaint::kStroke_Style); - paint.setStrokeWidth(SkIntToScalar(5)); - - path.moveTo(pts[0]); - path.arcTo(pts[1], pts[2], SkIntToScalar(50)); - canvas->drawPath(path, paint); - - paint.setStrokeWidth(0); - paint.setColor(SK_ColorRED); - canvas->drawLine(pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, paint); - canvas->drawLine(pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, paint); - return; - } - gPhase -= SK_Scalar1; this->inval(NULL); @@ -212,7 +199,7 @@ protected: canvas->drawPath(fPath, paint); paint.setStrokeWidth(0); - paint.setColor(SK_ColorRED); + paint.setColor(SK_ColorWHITE); paint.setPathEffect(make_pe(1))->unref(); canvas->drawPath(fPath, paint); diff --git a/src/effects/SkCornerPathEffect.cpp b/src/effects/SkCornerPathEffect.cpp index 43d571ab0..27d765f07 100644 --- a/src/effects/SkCornerPathEffect.cpp +++ b/src/effects/SkCornerPathEffect.cpp @@ -66,6 +66,10 @@ bool SkCornerPathEffect::filterPath(SkPath* dst, const SkPath& src, SkScalar* wi for (;;) { switch (verb = iter.next(pts)) { case SkPath::kMove_Verb: + // close out the previous (open) contour + if (SkPath::kLine_Verb == prevVerb) { + dst->lineTo(lastCorner); + } closed = iter.isClosedContour(); if (closed) { moveTo = pts[0];