| Index: gm/pictureimagefilter.cpp
|
| diff --git a/gm/pictureimagefilter.cpp b/gm/pictureimagefilter.cpp
|
| index f25c86823bd347faaff77ed7b146a107624557f8..8e5f1ef2a675b4776b6f6211a455ca0647bfd538 100644
|
| --- a/gm/pictureimagefilter.cpp
|
| +++ b/gm/pictureimagefilter.cpp
|
| @@ -12,43 +12,44 @@
|
|
|
| // This GM exercises the SkPictureImageFilter ImageFilter class.
|
|
|
| +static void fill_rect_filtered(SkCanvas* canvas,
|
| + const SkRect& clipRect,
|
| + sk_sp<SkImageFilter> filter) {
|
| + SkPaint paint;
|
| + paint.setImageFilter(filter);
|
| + canvas->save();
|
| + canvas->clipRect(clipRect);
|
| + canvas->drawPaint(paint);
|
| + canvas->restore();
|
| +}
|
| +
|
| +static sk_sp<SkPicture> make_picture() {
|
| + SkPictureRecorder recorder;
|
| + SkCanvas* canvas = recorder.beginRecording(100, 100, nullptr, 0);
|
| + canvas->clear(SK_ColorBLACK);
|
| + SkPaint paint;
|
| + paint.setAntiAlias(true);
|
| + sk_tool_utils::set_portable_typeface(&paint);
|
| + paint.setColor(0xFFFFFFFF);
|
| + paint.setTextSize(SkIntToScalar(96));
|
| + const char* str = "e";
|
| + canvas->drawText(str, strlen(str), SkIntToScalar(20), SkIntToScalar(70), paint);
|
| + return recorder.finishRecordingAsPicture();
|
| +}
|
| +
|
| class PictureImageFilterGM : public skiagm::GM {
|
| public:
|
| - PictureImageFilterGM() {
|
| - }
|
| + PictureImageFilterGM() { }
|
|
|
| protected:
|
| SkString onShortName() override {
|
| return SkString("pictureimagefilter");
|
| }
|
|
|
| - void makePicture() {
|
| - SkPictureRecorder recorder;
|
| - SkCanvas* canvas = recorder.beginRecording(100, 100, nullptr, 0);
|
| - canvas->clear(SK_ColorBLACK);
|
| - SkPaint paint;
|
| - paint.setAntiAlias(true);
|
| - sk_tool_utils::set_portable_typeface(&paint);
|
| - paint.setColor(0xFFFFFFFF);
|
| - paint.setTextSize(SkIntToScalar(96));
|
| - const char* str = "e";
|
| - canvas->drawText(str, strlen(str), SkIntToScalar(20), SkIntToScalar(70), paint);
|
| - fPicture = recorder.finishRecordingAsPicture();
|
| - }
|
| -
|
| SkISize onISize() override { return SkISize::Make(600, 300); }
|
|
|
| void onOnceBeforeDraw() override {
|
| - this->makePicture();
|
| - }
|
| -
|
| - static void fillRectFiltered(SkCanvas* canvas, const SkRect& clipRect, SkImageFilter* filter) {
|
| - SkPaint paint;
|
| - paint.setImageFilter(filter);
|
| - canvas->save();
|
| - canvas->clipRect(clipRect);
|
| - canvas->drawPaint(paint);
|
| - canvas->restore();
|
| + fPicture = make_picture();
|
| }
|
|
|
| void onDraw(SkCanvas* canvas) override {
|
| @@ -57,30 +58,31 @@ protected:
|
| SkRect srcRect = SkRect::MakeXYWH(20, 20, 30, 30);
|
| SkRect emptyRect = SkRect::MakeXYWH(20, 20, 0, 0);
|
| SkRect bounds = SkRect::MakeXYWH(0, 0, 100, 100);
|
| - SkAutoTUnref<SkImageFilter> pictureSource(
|
| - SkPictureImageFilter::Create(fPicture.get()));
|
| - SkAutoTUnref<SkImageFilter> pictureSourceSrcRect(
|
| - SkPictureImageFilter::Create(fPicture.get(), srcRect));
|
| - SkAutoTUnref<SkImageFilter> pictureSourceEmptyRect(
|
| - SkPictureImageFilter::Create(fPicture.get(), emptyRect));
|
| - SkAutoTUnref<SkImageFilter> pictureSourceResampled(
|
| - SkPictureImageFilter::CreateForLocalSpace(fPicture.get(), fPicture->cullRect(),
|
| - kLow_SkFilterQuality));
|
| - SkAutoTUnref<SkImageFilter> pictureSourcePixelated(
|
| - SkPictureImageFilter::CreateForLocalSpace(fPicture.get(), fPicture->cullRect(),
|
| - kNone_SkFilterQuality));
|
| + sk_sp<SkImageFilter> pictureSource(SkPictureImageFilter::Make(fPicture));
|
| + sk_sp<SkImageFilter> pictureSourceSrcRect(SkPictureImageFilter::Make(fPicture,
|
| + srcRect));
|
| + sk_sp<SkImageFilter> pictureSourceEmptyRect(SkPictureImageFilter::Make(fPicture,
|
| + emptyRect));
|
| + sk_sp<SkImageFilter> pictureSourceResampled(SkPictureImageFilter::MakeForLocalSpace(
|
| + fPicture,
|
| + fPicture->cullRect(),
|
| + kLow_SkFilterQuality));
|
| + sk_sp<SkImageFilter> pictureSourcePixelated(SkPictureImageFilter::MakeForLocalSpace(
|
| + fPicture,
|
| + fPicture->cullRect(),
|
| + kNone_SkFilterQuality));
|
|
|
| canvas->save();
|
| // Draw the picture unscaled.
|
| - fillRectFiltered(canvas, bounds, pictureSource);
|
| + fill_rect_filtered(canvas, bounds, pictureSource);
|
| canvas->translate(SkIntToScalar(100), 0);
|
|
|
| // Draw an unscaled subset of the source picture.
|
| - fillRectFiltered(canvas, bounds, pictureSourceSrcRect);
|
| + fill_rect_filtered(canvas, bounds, pictureSourceSrcRect);
|
| canvas->translate(SkIntToScalar(100), 0);
|
|
|
| // Draw the picture to an empty rect (should draw nothing).
|
| - fillRectFiltered(canvas, bounds, pictureSourceEmptyRect);
|
| + fill_rect_filtered(canvas, bounds, pictureSourceEmptyRect);
|
| canvas->translate(SkIntToScalar(100), 0);
|
|
|
| canvas->restore();
|
| @@ -89,20 +91,21 @@ protected:
|
| canvas->translate(0, SkIntToScalar(100));
|
| canvas->scale(200 / srcRect.width(), 200 / srcRect.height());
|
| canvas->translate(-srcRect.fLeft, -srcRect.fTop);
|
| - fillRectFiltered(canvas, srcRect, pictureSource);
|
| + fill_rect_filtered(canvas, srcRect, pictureSource);
|
|
|
| // Draw the picture scaled, but rasterized at original resolution
|
| canvas->translate(srcRect.width(), 0);
|
| - fillRectFiltered(canvas, srcRect, pictureSourceResampled);
|
| + fill_rect_filtered(canvas, srcRect, pictureSourceResampled);
|
|
|
| // Draw the picture scaled, pixelated
|
| canvas->translate(srcRect.width(), 0);
|
| - fillRectFiltered(canvas, srcRect, pictureSourcePixelated);
|
| + fill_rect_filtered(canvas, srcRect, pictureSourcePixelated);
|
| }
|
| }
|
|
|
| private:
|
| sk_sp<SkPicture> fPicture;
|
| +
|
| typedef GM INHERITED;
|
| };
|
|
|
|
|