diff options
author | bsalomon <bsalomon@google.com> | 2016-06-10 12:09:59 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-06-10 12:09:59 -0700 |
commit | 687d9d2eccec4fe86bc414015e6cbb4b4fb9be27 (patch) | |
tree | 72746284a0c1531b4c1a93bdb937f391d2eb8b7b | |
parent | b7b4293524e0c1d4c1635c4710aceafaca47b313 (diff) |
Extend inverse_paths GM to test dashing
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2057213002
Review-Url: https://codereview.chromium.org/2057213002
-rw-r--r-- | gm/inversepaths.cpp | 134 |
1 files changed, 75 insertions, 59 deletions
diff --git a/gm/inversepaths.cpp b/gm/inversepaths.cpp index 92ea051d12..6eb054e22a 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); } + } } |