| Index: gm/convexpaths.cpp
|
| diff --git a/gm/convexpaths.cpp b/gm/convexpaths.cpp
|
| index a354bd4cef3489c9419b3682bb790cb261bda75f..4b3c7b6b478daa585a2e7a8a68626e3fe6701ef7 100644
|
| --- a/gm/convexpaths.cpp
|
| +++ b/gm/convexpaths.cpp
|
| @@ -48,32 +48,18 @@ protected:
|
| return;
|
| }
|
| fOnce.accomplished();
|
| - // CW
|
| +
|
| fPaths.push_back().moveTo(0, 0);
|
| fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1,
|
| 0, 100 * SK_Scalar1);
|
| fPaths.back().lineTo(0, 0);
|
|
|
| - // CCW
|
| - fPaths.push_back().moveTo(0, 0);
|
| - fPaths.back().lineTo(0, 100 * SK_Scalar1);
|
| - fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1,
|
| - 0, 0);
|
| -
|
| - // CW
|
| fPaths.push_back().moveTo(0, 50 * SK_Scalar1);
|
| fPaths.back().quadTo(50 * SK_Scalar1, 0,
|
| 100 * SK_Scalar1, 50 * SK_Scalar1);
|
| fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1,
|
| 0, 50 * SK_Scalar1);
|
|
|
| - // CCW
|
| - fPaths.push_back().moveTo(0, 50 * SK_Scalar1);
|
| - fPaths.back().quadTo(50 * SK_Scalar1, 100 * SK_Scalar1,
|
| - 100 * SK_Scalar1, 50 * SK_Scalar1);
|
| - fPaths.back().quadTo(50 * SK_Scalar1, 0,
|
| - 0, 50 * SK_Scalar1);
|
| -
|
| fPaths.push_back().addRect(0, 0,
|
| 100 * SK_Scalar1, 100 * SK_Scalar1,
|
| SkPath::kCW_Direction);
|
| @@ -85,8 +71,6 @@ protected:
|
| fPaths.push_back().addCircle(50 * SK_Scalar1, 50 * SK_Scalar1,
|
| 50 * SK_Scalar1, SkPath::kCW_Direction);
|
|
|
| - fPaths.push_back().addCircle(50 * SK_Scalar1, 50 * SK_Scalar1,
|
| - 40 * SK_Scalar1, SkPath::kCCW_Direction);
|
|
|
| fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0,
|
| 50 * SK_Scalar1,
|
| @@ -95,18 +79,13 @@ protected:
|
|
|
| fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0,
|
| 100 * SK_Scalar1,
|
| - 50 * SK_Scalar1),
|
| - SkPath::kCCW_Direction);
|
| -
|
| - fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0,
|
| - 100 * SK_Scalar1,
|
| 5 * SK_Scalar1),
|
| SkPath::kCCW_Direction);
|
|
|
| fPaths.push_back().addOval(SkRect::MakeXYWH(0, 0,
|
| SK_Scalar1,
|
| 100 * SK_Scalar1),
|
| - SkPath::kCCW_Direction);
|
| + SkPath::kCCW_Direction);
|
|
|
| fPaths.push_back().addRoundRect(SkRect::MakeXYWH(0, 0,
|
| SK_Scalar1 * 100,
|
| @@ -114,12 +93,6 @@ protected:
|
| 40 * SK_Scalar1, 20 * SK_Scalar1,
|
| SkPath::kCW_Direction);
|
|
|
| - fPaths.push_back().addRoundRect(SkRect::MakeXYWH(0, 0,
|
| - SK_Scalar1 * 100,
|
| - SK_Scalar1 * 100),
|
| - 20 * SK_Scalar1, 40 * SK_Scalar1,
|
| - SkPath::kCCW_Direction);
|
| -
|
| // large number of points
|
| enum {
|
| kLength = 100,
|
| @@ -144,12 +117,10 @@ protected:
|
| fPaths.back().lineTo(98 * SK_Scalar1, 100 * SK_Scalar1);
|
| fPaths.back().lineTo(3 * SK_Scalar1, 96 * SK_Scalar1);
|
|
|
| - //It turns out arcTos are not automatically marked as convex and they
|
| - //may in fact be ever so slightly concave.
|
| - //fPaths.push_back().arcTo(SkRect::MakeXYWH(0, 0,
|
| - // 50 * SK_Scalar1,
|
| - // 100 * SK_Scalar1),
|
| - // 25 * SK_Scalar1, 130 * SK_Scalar1, false);
|
| + fPaths.push_back().arcTo(SkRect::MakeXYWH(0, 0,
|
| + 50 * SK_Scalar1,
|
| + 100 * SK_Scalar1),
|
| + 25 * SK_Scalar1, 130 * SK_Scalar1, false);
|
|
|
| // cubics
|
| fPaths.push_back().cubicTo( 1 * SK_Scalar1, 1 * SK_Scalar1,
|
| @@ -211,13 +182,49 @@ protected:
|
| fPaths.back().lineTo(100 * SK_Scalar1, 100 * SK_Scalar1);
|
| fPaths.back().lineTo(SkFloatToScalar(8.59375f), 45 * SK_Scalar1);
|
|
|
| - // point degenerate
|
| + // triangle where one edge is a quad with a repeated point
|
| + fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
|
| + fPaths.back().lineTo(50 * SK_Scalar1, 0);
|
| + fPaths.back().quadTo(50 * SK_Scalar1, 50 * SK_Scalar1, 50 * SK_Scalar1, 50 * SK_Scalar1);
|
| +
|
| + // triangle where one edge is a cubic with a 2x repeated point
|
| + fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
|
| + fPaths.back().lineTo(50 * SK_Scalar1, 0);
|
| + fPaths.back().cubicTo(50 * SK_Scalar1, 0,
|
| + 50 * SK_Scalar1, 50 * SK_Scalar1,
|
| + 50 * SK_Scalar1, 50 * SK_Scalar1);
|
| +
|
| + // triangle where one edge is a quad with a nearly repeated point
|
| + fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
|
| + fPaths.back().lineTo(50 * SK_Scalar1, 0);
|
| + fPaths.back().quadTo(50 * SK_Scalar1, SkFloatToScalar(49.95f),
|
| + 50 * SK_Scalar1, 50 * SK_Scalar1);
|
| +
|
| + // triangle where one edge is a cubic with a 3x nearly repeated point
|
| + fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
|
| + fPaths.back().lineTo(50 * SK_Scalar1, 0);
|
| + fPaths.back().cubicTo(50 * SK_Scalar1, SkFloatToScalar(49.95f),
|
| + 50 * SK_Scalar1, SkFloatToScalar(49.97f),
|
| + 50 * SK_Scalar1, 50 * SK_Scalar1);
|
| +
|
| + // triangle where there is a point degenerate cubic at one corner
|
| + fPaths.push_back().moveTo(0, 25 * SK_Scalar1);
|
| + fPaths.back().lineTo(50 * SK_Scalar1, 0);
|
| + fPaths.back().lineTo(50 * SK_Scalar1, 50 * SK_Scalar1);
|
| + fPaths.back().cubicTo(50 * SK_Scalar1, 50 * SK_Scalar1,
|
| + 50 * SK_Scalar1, 50 * SK_Scalar1,
|
| + 50 * SK_Scalar1, 50 * SK_Scalar1);
|
| +
|
| + // point line
|
| fPaths.push_back().moveTo(50 * SK_Scalar1, 50 * SK_Scalar1);
|
| fPaths.back().lineTo(50 * SK_Scalar1, 50 * SK_Scalar1);
|
|
|
| + // point quad
|
| fPaths.push_back().moveTo(50 * SK_Scalar1, 50 * SK_Scalar1);
|
| fPaths.back().quadTo(50 * SK_Scalar1, 50 * SK_Scalar1,
|
| 50 * SK_Scalar1, 50 * SK_Scalar1);
|
| +
|
| + // point cubic
|
| fPaths.push_back().moveTo(50 * SK_Scalar1, 50 * SK_Scalar1);
|
| fPaths.back().cubicTo(50 * SK_Scalar1, 50 * SK_Scalar1,
|
| 50 * SK_Scalar1, 50 * SK_Scalar1,
|
| @@ -246,7 +253,7 @@ protected:
|
|
|
| // small circle. This is listed last so that it has device coords far
|
| // from the origin (small area relative to x,y values).
|
| - fPaths.push_back().addCircle(0, 0, SkFloatToScalar(0.8f));
|
| + fPaths.push_back().addCircle(0, 0, SkFloatToScalar(1.2f));
|
| }
|
|
|
| virtual void onDraw(SkCanvas* canvas) {
|
| @@ -256,11 +263,15 @@ protected:
|
| paint.setAntiAlias(true);
|
| SkRandom rand;
|
| canvas->translate(20 * SK_Scalar1, 20 * SK_Scalar1);
|
| +
|
| + // As we've added more paths this has gotten pretty big. Scale the whole thing down.
|
| + canvas->scale(2 * SK_Scalar1 / 3, 2 * SK_Scalar1 / 3);
|
| +
|
| for (int i = 0; i < fPaths.count(); ++i) {
|
| canvas->save();
|
| // position the path, and make it at off-integer coords.
|
| - canvas->translate(SK_Scalar1 * 200 * (i % 5) + SK_Scalar1 / 4,
|
| - SK_Scalar1 * 200 * (i / 5) + 3 * SK_Scalar1 / 4);
|
| + canvas->translate(SK_Scalar1 * 200 * (i % 5) + SK_Scalar1 / 10,
|
| + SK_Scalar1 * 200 * (i / 5) + 9 * SK_Scalar1 / 10);
|
| SkColor color = rand.nextU();
|
| color |= 0xff000000;
|
| paint.setColor(color);
|
|
|