Index: gm/inversepaths.cpp |
diff --git a/gm/inversepaths.cpp b/gm/inversepaths.cpp |
index 92ea051d123c9e0ecb3889f9fc85964354412675..6eb054e22aa6581142454ee537fad7fdc5f6c6b8 100644 |
--- a/gm/inversepaths.cpp |
+++ b/gm/inversepaths.cpp |
@@ -8,6 +8,7 @@ |
#include "gm.h" |
#include "SkCanvas.h" |
#include "SkPath.h" |
+#include "SkDashPathEffect.h" |
static SkPath generate_square(SkScalar cx, SkScalar cy, SkScalar w) { |
SkRect rect = SkRect::MakeXYWH(cx - w / 2, cy - w / 2, w, w); |
@@ -37,11 +38,26 @@ static SkPath generate_line(SkScalar cx, SkScalar cy, SkScalar l) { |
} |
namespace { |
-SkPaint::Style styles[] = { |
- SkPaint::kStroke_Style, |
- SkPaint::kStrokeAndFill_Style, |
- SkPaint::kFill_Style |
+struct Style { |
+ Style(SkPaint::Style paintStyle, sk_sp<SkPathEffect> pe = sk_sp<SkPathEffect>()) |
+ : fPaintStyle(paintStyle) |
+ , fPathEffect(std::move(pe)) {} |
+ SkPaint::Style fPaintStyle; |
+ sk_sp<SkPathEffect> fPathEffect; |
}; |
+ |
+sk_sp<SkPathEffect> make_dash() { |
+ static constexpr SkScalar kIntervals[] = { 4.f, 3.f }; |
+ return SkDashPathEffect::Make(kIntervals, SK_ARRAY_COUNT(kIntervals), 0); |
+} |
+ |
+Style styles[] { |
+ {SkPaint::kStroke_Style}, |
+ {SkPaint::kStrokeAndFill_Style}, |
+ {SkPaint::kFill_Style}, |
+ {SkPaint::kStroke_Style, make_dash()}, |
+}; |
+ |
SkScalar pathSizes[] = { |
40, |
10, |
@@ -63,62 +79,62 @@ const SkScalar slideBoundary = 5; |
} // namespace |
-DEF_SIMPLE_GM(inverse_paths, canvas, 800, 900) { |
- SkScalar cx = slideWidth / 2 + slideBoundary; |
- SkScalar cy = slideHeight / 2 + slideBoundary; |
- SkScalar dx = slideWidth + 2 * slideBoundary; |
- SkScalar dy = slideHeight + 2 * slideBoundary; |
- |
- SkRect clipRect = SkRect::MakeLTRB(slideBoundary, slideBoundary, |
- slideBoundary + slideWidth, |
- slideBoundary + slideHeight); |
- SkPaint clipPaint; |
- clipPaint.setStyle(SkPaint::kStroke_Style); |
- clipPaint.setStrokeWidth(SkIntToScalar(2)); |
- |
- SkPaint outlinePaint; |
- outlinePaint.setColor(0x40000000); |
- outlinePaint.setStyle(SkPaint::kStroke_Style); |
- outlinePaint.setStrokeWidth(SkIntToScalar(0)); |
- |
- for (size_t styleIndex = 0; styleIndex < SK_ARRAY_COUNT(styles); |
- styleIndex++) { |
- for (size_t sizeIndex = 0; sizeIndex < SK_ARRAY_COUNT(pathSizes); |
- sizeIndex++) { |
- SkScalar size = pathSizes[sizeIndex]; |
- |
- canvas->save(); |
- |
- for (size_t widthIndex = 0; |
- widthIndex < SK_ARRAY_COUNT(strokeWidths); |
- widthIndex++) { |
- SkPaint paint; |
- paint.setColor(0xff007000); |
- paint.setStrokeWidth(strokeWidths[widthIndex]); |
- paint.setStyle(styles[styleIndex]); |
- |
- for (size_t pathIndex = 0; |
- pathIndex < SK_ARRAY_COUNT(paths); |
- pathIndex++) { |
- canvas->drawRect(clipRect, clipPaint); |
- |
- canvas->save(); |
- canvas->clipRect(clipRect); |
- |
- SkPath path = paths[pathIndex](cx, cy, size); |
- path.setFillType(SkPath::kInverseWinding_FillType); |
- canvas->drawPath(path, paint); |
- |
- path.setFillType(SkPath::kWinding_FillType); |
- canvas->drawPath(path, outlinePaint); |
- |
- canvas->restore(); |
- canvas->translate(dx, 0); |
- } |
+DEF_SIMPLE_GM(inverse_paths, canvas, 800, 1200) { |
+ SkScalar cx = slideWidth / 2 + slideBoundary; |
+ SkScalar cy = slideHeight / 2 + slideBoundary; |
+ SkScalar dx = slideWidth + 2 * slideBoundary; |
+ SkScalar dy = slideHeight + 2 * slideBoundary; |
+ |
+ SkRect clipRect = SkRect::MakeLTRB(slideBoundary, slideBoundary, |
+ slideBoundary + slideWidth, |
+ slideBoundary + slideHeight); |
+ SkPaint clipPaint; |
+ clipPaint.setStyle(SkPaint::kStroke_Style); |
+ clipPaint.setStrokeWidth(SkIntToScalar(2)); |
+ |
+ SkPaint outlinePaint; |
+ outlinePaint.setColor(0x40000000); |
+ outlinePaint.setStyle(SkPaint::kStroke_Style); |
+ outlinePaint.setStrokeWidth(SkIntToScalar(0)); |
+ |
+ for (size_t styleIndex = 0; styleIndex < SK_ARRAY_COUNT(styles); |
+ styleIndex++) { |
+ for (size_t sizeIndex = 0; sizeIndex < SK_ARRAY_COUNT(pathSizes); |
+ sizeIndex++) { |
+ SkScalar size = pathSizes[sizeIndex]; |
+ |
+ canvas->save(); |
+ |
+ for (size_t widthIndex = 0; |
+ widthIndex < SK_ARRAY_COUNT(strokeWidths); |
+ widthIndex++) { |
+ SkPaint paint; |
+ paint.setColor(0xff007000); |
+ paint.setStrokeWidth(strokeWidths[widthIndex]); |
+ paint.setStyle(styles[styleIndex].fPaintStyle); |
+ paint.setPathEffect(styles[styleIndex].fPathEffect); |
+ |
+ for (size_t pathIndex = 0; |
+ pathIndex < SK_ARRAY_COUNT(paths); |
+ pathIndex++) { |
+ canvas->drawRect(clipRect, clipPaint); |
+ |
+ canvas->save(); |
+ canvas->clipRect(clipRect); |
+ |
+ SkPath path = paths[pathIndex](cx, cy, size); |
+ path.setFillType(SkPath::kInverseWinding_FillType); |
+ canvas->drawPath(path, paint); |
+ |
+ path.setFillType(SkPath::kWinding_FillType); |
+ canvas->drawPath(path, outlinePaint); |
+ |
+ canvas->restore(); |
+ canvas->translate(dx, 0); |
} |
- |
- canvas->restore(); |
- canvas->translate(0, dy); |
} |
+ canvas->restore(); |
+ canvas->translate(0, dy); |
} |
+ } |
} |