| Index: gm/offsetimagefilter.cpp
|
| diff --git a/gm/offsetimagefilter.cpp b/gm/offsetimagefilter.cpp
|
| index fcf2b9843fedc34955be342fd23b89b9f7427b66..eec18cffb9a72d630f5a2cc2e06b1932ee88293a 100644
|
| --- a/gm/offsetimagefilter.cpp
|
| +++ b/gm/offsetimagefilter.cpp
|
| @@ -6,8 +6,10 @@
|
| */
|
|
|
| #include "sk_tool_utils.h"
|
| -#include "SkBitmapSource.h"
|
| +#include "SkImage.h"
|
| +#include "SkImageSource.h"
|
| #include "SkOffsetImageFilter.h"
|
| +#include "SkSurface.h"
|
| #include "gm.h"
|
|
|
| #define WIDTH 600
|
| @@ -29,36 +31,15 @@ protected:
|
| return SkISize::Make(WIDTH, HEIGHT);
|
| }
|
|
|
| - void drawClippedBitmap(SkCanvas* canvas, const SkBitmap& bitmap, const SkPaint& paint,
|
| - SkScalar scale, const SkIRect& cropRect) {
|
| - SkRect clipRect = SkRect::MakeIWH(bitmap.width(), bitmap.height());
|
| -
|
| - canvas->save();
|
| - canvas->clipRect(clipRect);
|
| - canvas->scale(scale, scale);
|
| - canvas->drawBitmap(bitmap, 0, 0, &paint);
|
| - canvas->restore();
|
| -
|
| - // Draw a boundary rect around the intersection of the clip rect and crop rect.
|
| - SkRect cropRectFloat;
|
| - SkMatrix::MakeScale(scale, scale).mapRect(&cropRectFloat, SkRect::Make(cropRect));
|
| - if (clipRect.intersect(cropRectFloat)) {
|
| - SkPaint strokePaint;
|
| - strokePaint.setStyle(SkPaint::kStroke_Style);
|
| - strokePaint.setStrokeWidth(2);
|
| - strokePaint.setColor(SK_ColorRED);
|
| - canvas->drawRect(clipRect, strokePaint);
|
| - }
|
| - }
|
| -
|
| void onOnceBeforeDraw() override {
|
| - fBitmap = sk_tool_utils::create_string_bitmap(80, 80, 0xD000D000, 15, 65, 96, "e");
|
| + fBitmap.reset(SkImage::NewFromBitmap(
|
| + sk_tool_utils::create_string_bitmap(80, 80, 0xD000D000, 15, 65, 96, "e")));
|
|
|
| - fCheckerboard = sk_tool_utils::create_checkerboard_bitmap(
|
| - 80, 80,
|
| - sk_tool_utils::color_to_565(0xFFA0A0A0),
|
| - sk_tool_utils::color_to_565(0xFF404040),
|
| - 8);
|
| + fCheckerboard.reset(SkImage::NewFromBitmap(
|
| + sk_tool_utils::create_checkerboard_bitmap(80, 80,
|
| + sk_tool_utils::color_to_565(0xFFA0A0A0),
|
| + sk_tool_utils::color_to_565(0xFF404040),
|
| + 8)));
|
| }
|
|
|
| void onDraw(SkCanvas* canvas) override {
|
| @@ -66,30 +47,52 @@ protected:
|
| SkPaint paint;
|
|
|
| for (int i = 0; i < 4; i++) {
|
| - const SkBitmap* bitmap = (i & 0x01) ? &fCheckerboard : &fBitmap;
|
| + const SkImage* image = (i & 0x01) ? fCheckerboard : fBitmap;
|
| SkIRect cropRect = SkIRect::MakeXYWH(i * 12,
|
| i * 8,
|
| - bitmap->width() - i * 8,
|
| - bitmap->height() - i * 12);
|
| + image->width() - i * 8,
|
| + image->height() - i * 12);
|
| SkImageFilter::CropRect rect(SkRect::Make(cropRect));
|
| - SkAutoTUnref<SkImageFilter> tileInput(SkBitmapSource::Create(*bitmap));
|
| + SkAutoTUnref<SkImageFilter> tileInput(SkImageSource::Create(image));
|
| SkScalar dx = SkIntToScalar(i*5);
|
| SkScalar dy = SkIntToScalar(i*10);
|
| SkAutoTUnref<SkImageFilter> filter(SkOffsetImageFilter::Create(dx, dy, tileInput,
|
| &rect));
|
| paint.setImageFilter(filter);
|
| - drawClippedBitmap(canvas, *bitmap, paint, 1, cropRect);
|
| - canvas->translate(SkIntToScalar(bitmap->width() + MARGIN), 0);
|
| + DrawClippedImage(canvas, image, paint, 1, cropRect);
|
| + canvas->translate(SkIntToScalar(image->width() + MARGIN), 0);
|
| }
|
|
|
| SkIRect cropRect = SkIRect::MakeXYWH(0, 0, 100, 100);
|
| SkImageFilter::CropRect rect(SkRect::Make(cropRect));
|
| SkAutoTUnref<SkImageFilter> filter(SkOffsetImageFilter::Create(-5, -10, nullptr, &rect));
|
| paint.setImageFilter(filter);
|
| - drawClippedBitmap(canvas, fBitmap, paint, 2, cropRect);
|
| + DrawClippedImage(canvas, fBitmap, paint, 2, cropRect);
|
| }
|
| private:
|
| - SkBitmap fBitmap, fCheckerboard;
|
| + static void DrawClippedImage(SkCanvas* canvas, const SkImage* image, const SkPaint& paint,
|
| + SkScalar scale, const SkIRect& cropRect) {
|
| + SkRect clipRect = SkRect::MakeIWH(image->width(), image->height());
|
| +
|
| + canvas->save();
|
| + canvas->clipRect(clipRect);
|
| + canvas->scale(scale, scale);
|
| + canvas->drawImage(image, 0, 0, &paint);
|
| + canvas->restore();
|
| +
|
| + // Draw a boundary rect around the intersection of the clip rect and crop rect.
|
| + SkRect cropRectFloat;
|
| + SkMatrix::MakeScale(scale, scale).mapRect(&cropRectFloat, SkRect::Make(cropRect));
|
| + if (clipRect.intersect(cropRectFloat)) {
|
| + SkPaint strokePaint;
|
| + strokePaint.setStyle(SkPaint::kStroke_Style);
|
| + strokePaint.setStrokeWidth(2);
|
| + strokePaint.setColor(SK_ColorRED);
|
| + canvas->drawRect(clipRect, strokePaint);
|
| + }
|
| + }
|
| +
|
| + SkAutoTUnref<SkImage> fBitmap, fCheckerboard;
|
|
|
| typedef skiagm::GM INHERITED;
|
| };
|
|
|