diff options
-rw-r--r-- | gm/concavepaths.cpp | 84 | ||||
-rw-r--r-- | gm/dropshadowimagefilter.cpp | 110 | ||||
-rw-r--r-- | gm/imagefilterscropexpand.cpp | 209 | ||||
-rw-r--r-- | gm/localmatriximagefilter.cpp | 104 | ||||
-rw-r--r-- | gm/thinconcavepaths.cpp | 42 |
5 files changed, 229 insertions, 320 deletions
diff --git a/gm/concavepaths.cpp b/gm/concavepaths.cpp index c68265b99f..c371615f2f 100644 --- a/gm/concavepaths.cpp +++ b/gm/concavepaths.cpp @@ -9,9 +9,6 @@ #include "SkCanvas.h" #include "SkPath.h" -#define WIDTH 400 -#define HEIGHT 600 - namespace { // Concave test void test_concave(SkCanvas* canvas, const SkPaint& paint) { @@ -363,53 +360,34 @@ void test_coincident_edges_4(SkCanvas* canvas, const SkPaint& paint) { }; -class ConcavePathsGM : public skiagm::GM { -public: - ConcavePathsGM() {} - -protected: - SkString onShortName() override { - return SkString("concavepaths"); - } - - SkISize onISize() override { - return SkISize::Make(WIDTH, HEIGHT); - } - - void onDraw(SkCanvas* canvas) override { - SkPaint paint; - - paint.setAntiAlias(true); - paint.setStyle(SkPaint::kFill_Style); - - test_concave(canvas, paint); - test_reverse_concave(canvas, paint); - test_bowtie(canvas, paint); - test_fake_bowtie(canvas, paint); - test_fish(canvas, paint); - test_fast_forward(canvas, paint); - test_hole(canvas, paint); - test_star(canvas, paint); - test_stairstep(canvas, paint); - test_stairstep2(canvas, paint); - test_overlapping(canvas, paint); - test_partners(canvas, paint); - test_monotone_1(canvas, paint); - test_monotone_2(canvas, paint); - test_monotone_3(canvas, paint); - test_monotone_4(canvas, paint); - test_monotone_5(canvas, paint); - test_degenerate(canvas, paint); - test_coincident_edge(canvas, paint); - test_bowtie_coincident_triangle(canvas, paint); - test_coincident_edges_1(canvas, paint); - test_coincident_edges_2(canvas, paint); - test_coincident_edges_3(canvas, paint); - test_coincident_edges_4(canvas, paint); - } - -private: - typedef skiagm::GM INHERITED; -}; - -DEF_GM( return new ConcavePathsGM; ) +DEF_SIMPLE_GM(concavepaths, canvas, 400, 600) { + SkPaint paint; + + paint.setAntiAlias(true); + paint.setStyle(SkPaint::kFill_Style); + + test_concave(canvas, paint); + test_reverse_concave(canvas, paint); + test_bowtie(canvas, paint); + test_fake_bowtie(canvas, paint); + test_fish(canvas, paint); + test_fast_forward(canvas, paint); + test_hole(canvas, paint); + test_star(canvas, paint); + test_stairstep(canvas, paint); + test_stairstep2(canvas, paint); + test_overlapping(canvas, paint); + test_partners(canvas, paint); + test_monotone_1(canvas, paint); + test_monotone_2(canvas, paint); + test_monotone_3(canvas, paint); + test_monotone_4(canvas, paint); + test_monotone_5(canvas, paint); + test_degenerate(canvas, paint); + test_coincident_edge(canvas, paint); + test_bowtie_coincident_triangle(canvas, paint); + test_coincident_edges_1(canvas, paint); + test_coincident_edges_2(canvas, paint); + test_coincident_edges_3(canvas, paint); + test_coincident_edges_4(canvas, paint); +} diff --git a/gm/dropshadowimagefilter.cpp b/gm/dropshadowimagefilter.cpp index fff318ee57..d32f0480e0 100644 --- a/gm/dropshadowimagefilter.cpp +++ b/gm/dropshadowimagefilter.cpp @@ -69,70 +69,50 @@ static void draw_bitmap(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> /////////////////////////////////////////////////////////////////////////////// -class DropShadowImageFilterGM : public skiagm::GM { -public: - DropShadowImageFilterGM () {} - -protected: - - SkString onShortName() override { - return SkString("dropshadowimagefilter"); - } - - SkISize onISize() override { return SkISize::Make(400, 656); } - - void onDraw(SkCanvas* canvas) override { - void (*drawProc[])(SkCanvas*, const SkRect&, sk_sp<SkImageFilter>) = { - draw_bitmap, draw_path, draw_paint, draw_text - }; - - sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorMAGENTA, - SkBlendMode::kSrcIn)); - sk_sp<SkImageFilter> cfif(SkColorFilterImageFilter::Make(std::move(cf), nullptr)); - SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 44, 44)), - SkImageFilter::CropRect::kHasAll_CropEdge); - SkImageFilter::CropRect bogusRect(SkRect::Make(SkIRect::MakeXYWH(-100, -100, 10, 10)), - SkImageFilter::CropRect::kHasAll_CropEdge); - - sk_sp<SkImageFilter> filters[] = { - nullptr, - SkDropShadowImageFilter::Make(7.0f, 0.0f, 0.0f, 3.0f, SK_ColorBLUE, - SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr), - SkDropShadowImageFilter::Make(0.0f, 7.0f, 3.0f, 0.0f, SK_ColorBLUE, - SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr), - SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, - SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr), - SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, - SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, std::move(cfif)), - SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, - SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr, &cropRect), - SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, - SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr, &bogusRect), - SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, - SkDropShadowImageFilter::kDrawShadowOnly_ShadowMode, nullptr), - }; - - SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); - SkScalar MARGIN = SkIntToScalar(16); - SkScalar DX = r.width() + MARGIN; - SkScalar DY = r.height() + MARGIN; - - canvas->translate(MARGIN, MARGIN); - for (size_t j = 0; j < SK_ARRAY_COUNT(drawProc); ++j) { - canvas->save(); - for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { - drawProc[j](canvas, r, filters[i]); - canvas->translate(0, DY); - } - canvas->restore(); - canvas->translate(DX, 0); +DEF_SIMPLE_GM(dropshadowimagefilter, canvas, 400, 656) { + void (*drawProc[])(SkCanvas*, const SkRect&, sk_sp<SkImageFilter>) = { + draw_bitmap, draw_path, draw_paint, draw_text + }; + + sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorMAGENTA, + SkBlendMode::kSrcIn)); + sk_sp<SkImageFilter> cfif(SkColorFilterImageFilter::Make(std::move(cf), nullptr)); + SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 44, 44)), + SkImageFilter::CropRect::kHasAll_CropEdge); + SkImageFilter::CropRect bogusRect(SkRect::Make(SkIRect::MakeXYWH(-100, -100, 10, 10)), + SkImageFilter::CropRect::kHasAll_CropEdge); + + sk_sp<SkImageFilter> filters[] = { + nullptr, + SkDropShadowImageFilter::Make(7.0f, 0.0f, 0.0f, 3.0f, SK_ColorBLUE, + SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr), + SkDropShadowImageFilter::Make(0.0f, 7.0f, 3.0f, 0.0f, SK_ColorBLUE, + SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr), + SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, + SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr), + SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, + SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, std::move(cfif)), + SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, + SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr, &cropRect), + SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, + SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, nullptr, &bogusRect), + SkDropShadowImageFilter::Make(7.0f, 7.0f, 3.0f, 3.0f, SK_ColorBLUE, + SkDropShadowImageFilter::kDrawShadowOnly_ShadowMode, nullptr), + }; + + SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); + SkScalar MARGIN = SkIntToScalar(16); + SkScalar DX = r.width() + MARGIN; + SkScalar DY = r.height() + MARGIN; + + canvas->translate(MARGIN, MARGIN); + for (size_t j = 0; j < SK_ARRAY_COUNT(drawProc); ++j) { + canvas->save(); + for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { + drawProc[j](canvas, r, filters[i]); + canvas->translate(0, DY); } + canvas->restore(); + canvas->translate(DX, 0); } - -private: - typedef GM INHERITED; -}; - -/////////////////////////////////////////////////////////////////////////////// - -DEF_GM( return new DropShadowImageFilterGM; ) +} diff --git a/gm/imagefilterscropexpand.cpp b/gm/imagefilterscropexpand.cpp index 9b9f7ee817..57ff14b4a0 100644 --- a/gm/imagefilterscropexpand.cpp +++ b/gm/imagefilterscropexpand.cpp @@ -25,117 +25,114 @@ #include "SkPoint3.h" #include "SkSurface.h" -/////////////////////////////////////////////////////////////////////////////// - -class ImageFiltersCropExpandGM : public skiagm::GM { -public: - ImageFiltersCropExpandGM () {} +namespace { -protected: +void make_checkerboard(SkBitmap* bitmap); +sk_sp<SkImage> make_gradient_circle(int width, int height); +void draw(SkCanvas* canvas, const SkBitmap& bitmap, const SkRect& rect, + sk_sp<SkImageFilter> filter); - SkString onShortName() override { - return SkString("imagefilterscropexpand"); - } +}; - SkISize onISize() override { return SkISize::Make(730, 650); } - - void onDraw(SkCanvas* canvas) override { - SkImageFilter::CropRect cropRect( - SkRect::Make(SkIRect::MakeXYWH(10, 10, 44, 44)), - SkImageFilter::CropRect::kHasAll_CropEdge); - - sk_sp<SkImage> gradientCircle(MakeGradientCircle(64, 64)); - SkBitmap checkerboard; - MakeCheckerboard(&checkerboard); - - sk_sp<SkImageFilter> gradientCircleSource(SkImageSource::Make(std::move(gradientCircle))); - sk_sp<SkImageFilter> noopCropped(SkOffsetImageFilter::Make(0, 0, nullptr, &cropRect)); - // This color matrix saturates the green component but only partly increases the opacity. - // For the opaque checkerboard, the opacity boost doesn't matter but it does impact the - // area outside the checkerboard. - SkScalar matrix[20] = { 1, 0, 0, 0, 0, - 0, 1, 0, 0, 255, - 0, 0, 1, 0, 0, - 0, 0, 0, 1, 32 }; - sk_sp<SkColorFilter> cfAlphaTrans(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); - - SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); - SkScalar MARGIN = SkIntToScalar(12); - - SkPoint3 pointLocation = SkPoint3::Make(0, 0, SkIntToScalar(10)); - SkScalar kd = SkIntToScalar(2); - SkScalar surfaceScale = SkIntToScalar(1); - SkIRect bounds; - r.roundOut(&bounds); +/////////////////////////////////////////////////////////////////////////////// - SkPaint paint; - canvas->translate(MARGIN, MARGIN); - for (int outset = -15; outset <= 20; outset += 5) { - canvas->save(); - SkRect rect = cropRect.rect(); - rect.outset(SkIntToScalar(outset), - SkIntToScalar(outset)); - SkImageFilter::CropRect bigRect(rect, SkImageFilter::CropRect::kHasAll_CropEdge); - - Draw(canvas, checkerboard, rect, SkColorFilterImageFilter::Make(cfAlphaTrans, - noopCropped, - &bigRect)); - - Draw(canvas, checkerboard, rect, SkBlurImageFilter::Make(0.3f, 0.3f, - noopCropped, - &bigRect)); - - Draw(canvas, checkerboard, rect, SkBlurImageFilter::Make(8.0f, 8.0f, - noopCropped, - &bigRect)); - - Draw(canvas, checkerboard, rect, SkDilateImageFilter::Make(2, 2, - noopCropped, - &bigRect)); - - Draw(canvas, checkerboard, rect, SkErodeImageFilter::Make(2, 2, - noopCropped, - &bigRect)); - - Draw(canvas, checkerboard, rect, - SkDropShadowImageFilter::Make( - SkIntToScalar(10), - SkIntToScalar(10), - SkIntToScalar(3), - SkIntToScalar(3), - SK_ColorBLUE, - SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, - noopCropped, - &bigRect)); - - Draw(canvas, checkerboard, rect, - SkDisplacementMapEffect::Make(SkDisplacementMapEffect::kR_ChannelSelectorType, - SkDisplacementMapEffect::kR_ChannelSelectorType, - SkIntToScalar(12), - gradientCircleSource, - noopCropped, - &bigRect)); - - Draw(canvas, checkerboard, rect, - SkOffsetImageFilter::Make(SkIntToScalar(-8), SkIntToScalar(16), +DEF_SIMPLE_GM(imagefilterscropexpand, canvas, 730, 650) { + SkImageFilter::CropRect cropRect( + SkRect::Make(SkIRect::MakeXYWH(10, 10, 44, 44)), + SkImageFilter::CropRect::kHasAll_CropEdge); + + sk_sp<SkImage> gradientCircle(make_gradient_circle(64, 64)); + SkBitmap checkerboard; + make_checkerboard(&checkerboard); + + sk_sp<SkImageFilter> gradientCircleSource(SkImageSource::Make(std::move(gradientCircle))); + sk_sp<SkImageFilter> noopCropped(SkOffsetImageFilter::Make(0, 0, nullptr, &cropRect)); + // This color matrix saturates the green component but only partly increases the opacity. + // For the opaque checkerboard, the opacity boost doesn't matter but it does impact the + // area outside the checkerboard. + SkScalar matrix[20] = { 1, 0, 0, 0, 0, + 0, 1, 0, 0, 255, + 0, 0, 1, 0, 0, + 0, 0, 0, 1, 32 }; + sk_sp<SkColorFilter> cfAlphaTrans(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); + + SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); + SkScalar MARGIN = SkIntToScalar(12); + + SkPoint3 pointLocation = SkPoint3::Make(0, 0, SkIntToScalar(10)); + SkScalar kd = SkIntToScalar(2); + SkScalar surfaceScale = SkIntToScalar(1); + SkIRect bounds; + r.roundOut(&bounds); + + SkPaint paint; + canvas->translate(MARGIN, MARGIN); + for (int outset = -15; outset <= 20; outset += 5) { + canvas->save(); + SkRect rect = cropRect.rect(); + rect.outset(SkIntToScalar(outset), + SkIntToScalar(outset)); + SkImageFilter::CropRect bigRect(rect, SkImageFilter::CropRect::kHasAll_CropEdge); + + draw(canvas, checkerboard, rect, SkColorFilterImageFilter::Make(cfAlphaTrans, + noopCropped, + &bigRect)); + + draw(canvas, checkerboard, rect, SkBlurImageFilter::Make(0.3f, 0.3f, + noopCropped, + &bigRect)); + + draw(canvas, checkerboard, rect, SkBlurImageFilter::Make(8.0f, 8.0f, + noopCropped, + &bigRect)); + + draw(canvas, checkerboard, rect, SkDilateImageFilter::Make(2, 2, + noopCropped, + &bigRect)); + + draw(canvas, checkerboard, rect, SkErodeImageFilter::Make(2, 2, + noopCropped, + &bigRect)); + + draw(canvas, checkerboard, rect, + SkDropShadowImageFilter::Make( + SkIntToScalar(10), + SkIntToScalar(10), + SkIntToScalar(3), + SkIntToScalar(3), + SK_ColorBLUE, + SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, + noopCropped, + &bigRect)); + + draw(canvas, checkerboard, rect, + SkDisplacementMapEffect::Make(SkDisplacementMapEffect::kR_ChannelSelectorType, + SkDisplacementMapEffect::kR_ChannelSelectorType, + SkIntToScalar(12), + gradientCircleSource, noopCropped, &bigRect)); - Draw(canvas, checkerboard, rect, - SkLightingImageFilter::MakePointLitDiffuse(pointLocation, - SK_ColorWHITE, - surfaceScale, - kd, - noopCropped, - &bigRect)); + draw(canvas, checkerboard, rect, + SkOffsetImageFilter::Make(SkIntToScalar(-8), SkIntToScalar(16), + noopCropped, + &bigRect)); - canvas->restore(); - canvas->translate(0, SkIntToScalar(80)); - } + draw(canvas, checkerboard, rect, + SkLightingImageFilter::MakePointLitDiffuse(pointLocation, + SK_ColorWHITE, + surfaceScale, + kd, + noopCropped, + &bigRect)); + + canvas->restore(); + canvas->translate(0, SkIntToScalar(80)); } +} -private: - static void MakeCheckerboard(SkBitmap* bitmap) { +namespace { + void make_checkerboard(SkBitmap* bitmap) { bitmap->allocN32Pixels(64, 64); SkCanvas canvas(*bitmap); canvas.clear(0xFFFF0000); @@ -156,7 +153,7 @@ private: } } - static sk_sp<SkImage> MakeGradientCircle(int width, int height) { + sk_sp<SkImage> make_gradient_circle(int width, int height) { SkScalar x = SkIntToScalar(width / 2); SkScalar y = SkIntToScalar(height / 2); SkScalar radius = SkMinScalar(x, y) * 0.8f; @@ -174,7 +171,7 @@ private: return surface->makeImageSnapshot(); } - static void Draw(SkCanvas* canvas, const SkBitmap& bitmap, const SkRect& rect, + void draw(SkCanvas* canvas, const SkBitmap& bitmap, const SkRect& rect, sk_sp<SkImageFilter> filter) { SkPaint paint; paint.setImageFilter(std::move(filter)); @@ -189,10 +186,4 @@ private: canvas->translate(SkIntToScalar(80), 0); } - - typedef GM INHERITED; }; - -/////////////////////////////////////////////////////////////////////////////// - -DEF_GM( return new ImageFiltersCropExpandGM; ) diff --git a/gm/localmatriximagefilter.cpp b/gm/localmatriximagefilter.cpp index d5b7e3e50d..14bbd32b84 100644 --- a/gm/localmatriximagefilter.cpp +++ b/gm/localmatriximagefilter.cpp @@ -28,6 +28,18 @@ static sk_sp<SkImage> make_image(SkCanvas* rootCanvas) { return surface->makeImageSnapshot(); } +static void show_image(SkCanvas* canvas, SkImage* image, sk_sp<SkImageFilter> filter) { + SkPaint paint; + paint.setStyle(SkPaint::kStroke_Style); + SkRect r = SkRect::MakeIWH(image->width(), image->height()).makeOutset(SK_ScalarHalf, + SK_ScalarHalf); + canvas->drawRect(r, paint); + + paint.setStyle(SkPaint::kFill_Style); + paint.setImageFilter(filter); + canvas->drawImage(image, 0, 0, &paint); +} + typedef sk_sp<SkImageFilter> (*ImageFilterFactory)(); // +[]{...} did not work on windows (VS) @@ -36,66 +48,36 @@ typedef sk_sp<SkImageFilter> (*ImageFilterFactory)(); template <typename T> ImageFilterFactory IFCCast(T arg) { return arg; } // Show the effect of localmatriximagefilter with various matrices, on various filters -class LocalMatrixImageFilterGM : public skiagm::GM { -public: - LocalMatrixImageFilterGM() {} - -protected: - SkString onShortName() override { - return SkString("localmatriximagefilter"); - } - - SkISize onISize() override { - return SkISize::Make(640, 640); - } - - static void show_image(SkCanvas* canvas, SkImage* image, sk_sp<SkImageFilter> filter) { - SkPaint paint; - paint.setStyle(SkPaint::kStroke_Style); - SkRect r = SkRect::MakeIWH(image->width(), image->height()).makeOutset(SK_ScalarHalf, - SK_ScalarHalf); - canvas->drawRect(r, paint); - - paint.setStyle(SkPaint::kFill_Style); - paint.setImageFilter(filter); - canvas->drawImage(image, 0, 0, &paint); - } - - void onDraw(SkCanvas* canvas) override { - sk_sp<SkImage> image0(make_image(canvas)); - - const ImageFilterFactory factories[] = { - IFCCast([]{ return SkBlurImageFilter::Make(8, 8, nullptr); }), - IFCCast([]{ return SkDilateImageFilter::Make(8, 8, nullptr); }), - IFCCast([]{ return SkErodeImageFilter::Make(8, 8, nullptr); }), - IFCCast([]{ return SkOffsetImageFilter::Make(8, 8, nullptr); }), - }; - - const SkMatrix matrices[] = { - SkMatrix::MakeScale(SK_ScalarHalf, SK_ScalarHalf), - SkMatrix::MakeScale(2, 2), - SkMatrix::MakeTrans(10, 10) - }; - - const SkScalar spacer = image0->width() * 3.0f / 2; - - canvas->translate(40, 40); - for (auto&& factory : factories) { - sk_sp<SkImageFilter> filter(factory()); - - canvas->save(); - show_image(canvas, image0.get(), filter); - for (const auto& matrix : matrices) { - sk_sp<SkImageFilter> localFilter(filter->makeWithLocalMatrix(matrix)); - canvas->translate(spacer, 0); - show_image(canvas, image0.get(), std::move(localFilter)); - } - canvas->restore(); - canvas->translate(0, spacer); +DEF_SIMPLE_GM(localmatriximagefilter, canvas, 640, 640) { + sk_sp<SkImage> image0(make_image(canvas)); + + const ImageFilterFactory factories[] = { + IFCCast([]{ return SkBlurImageFilter::Make(8, 8, nullptr); }), + IFCCast([]{ return SkDilateImageFilter::Make(8, 8, nullptr); }), + IFCCast([]{ return SkErodeImageFilter::Make(8, 8, nullptr); }), + IFCCast([]{ return SkOffsetImageFilter::Make(8, 8, nullptr); }), + }; + + const SkMatrix matrices[] = { + SkMatrix::MakeScale(SK_ScalarHalf, SK_ScalarHalf), + SkMatrix::MakeScale(2, 2), + SkMatrix::MakeTrans(10, 10) + }; + + const SkScalar spacer = image0->width() * 3.0f / 2; + + canvas->translate(40, 40); + for (auto&& factory : factories) { + sk_sp<SkImageFilter> filter(factory()); + + canvas->save(); + show_image(canvas, image0.get(), filter); + for (const auto& matrix : matrices) { + sk_sp<SkImageFilter> localFilter(filter->makeWithLocalMatrix(matrix)); + canvas->translate(spacer, 0); + show_image(canvas, image0.get(), std::move(localFilter)); } + canvas->restore(); + canvas->translate(0, spacer); } - -private: - typedef GM INHERITED; -}; -DEF_GM( return new LocalMatrixImageFilterGM; ) +} diff --git a/gm/thinconcavepaths.cpp b/gm/thinconcavepaths.cpp index 6c81d7c272..0f4dd507bf 100644 --- a/gm/thinconcavepaths.cpp +++ b/gm/thinconcavepaths.cpp @@ -9,9 +9,6 @@ #include "SkCanvas.h" #include "SkPath.h" -#define WIDTH 400 -#define HEIGHT 400 - namespace { // Test thin stroked rect (stroked "by hand", not by stroking). void draw_thin_stroked_rect(SkCanvas* canvas, const SkPaint& paint, SkScalar width) { @@ -29,35 +26,16 @@ void draw_thin_stroked_rect(SkCanvas* canvas, const SkPaint& paint, SkScalar wid }; -class ThinConcavePathsGM : public skiagm::GM { -public: - ThinConcavePathsGM() {} - -protected: - SkString onShortName() override { - return SkString("thinconcavepaths"); - } - - SkISize onISize() override { - return SkISize::Make(WIDTH, HEIGHT); - } - - void onDraw(SkCanvas* canvas) override { - SkPaint paint; +DEF_SIMPLE_GM(thinconcavepaths, canvas, 400, 400) { + SkPaint paint; - paint.setAntiAlias(true); - paint.setStyle(SkPaint::kFill_Style); + paint.setAntiAlias(true); + paint.setStyle(SkPaint::kFill_Style); - canvas->save(); - for (SkScalar width = 1.0; width < 2.05; width += 0.25) { - draw_thin_stroked_rect(canvas, paint, width); - canvas->translate(0, 25); - } - canvas->restore(); + canvas->save(); + for (SkScalar width = 1.0; width < 2.05; width += 0.25) { + draw_thin_stroked_rect(canvas, paint, width); + canvas->translate(0, 25); } - -private: - typedef skiagm::GM INHERITED; -}; - -DEF_GM( return new ThinConcavePathsGM; ) + canvas->restore(); +} |