aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/imagefilterscropexpand.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gm/imagefilterscropexpand.cpp')
-rw-r--r--gm/imagefilterscropexpand.cpp209
1 files changed, 100 insertions, 109 deletions
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; )