Chromium Code Reviews| Index: gm/offsetimagefilter.cpp |
| diff --git a/gm/offsetimagefilter.cpp b/gm/offsetimagefilter.cpp |
| index 0425311b0ac42af45470270fd75c2dcb8a4932ac..18387c4583bbd35bf76bae3cfc88f5dc8e608516 100644 |
| --- a/gm/offsetimagefilter.cpp |
| +++ b/gm/offsetimagefilter.cpp |
| @@ -9,7 +9,7 @@ |
| #include "SkOffsetImageFilter.h" |
| #include "SkBitmapSource.h" |
| -#define WIDTH 400 |
| +#define WIDTH 600 |
| #define HEIGHT 100 |
| #define MARGIN 12 |
| @@ -63,14 +63,26 @@ protected: |
| return make_isize(WIDTH, HEIGHT); |
| } |
| - void drawClippedBitmap(SkCanvas* canvas, const SkBitmap& bitmap, const SkPaint& paint, |
| - SkScalar x, SkScalar y) { |
| + void drawClippedBitmap(SkCanvas* canvas, const SkBitmap& bitmap, const SkPaint& paint, SkScalar scale, const SkIRect& cropRect) { |
| canvas->save(); |
| - canvas->translate(x, y); |
| - canvas->clipRect(SkRect::MakeXYWH(0, 0, |
| - SkIntToScalar(bitmap.width()), SkIntToScalar(bitmap.height()))); |
| + SkRect clipRect = SkRect::MakeWH( |
| + SkIntToScalar(bitmap.width()), SkIntToScalar(bitmap.height())); |
| + canvas->clipRect(clipRect); |
| + canvas->scale(scale, scale); |
| canvas->drawBitmap(bitmap, 0, 0, &paint); |
| canvas->restore(); |
| + SkPaint strokePaint; |
| + strokePaint.setStyle(SkPaint::kStroke_Style); |
| + strokePaint.setColor(SK_ColorRED); |
| + |
| + // Draw a boundary rect around the intersection of the clip rect |
| + // and crop rect. |
| + SkMatrix scaleMatrix; |
| + scaleMatrix.setScale(scale, scale); |
| + SkRect cropRectFloat; |
| + scaleMatrix.mapRect(&cropRectFloat, SkRect::Make(cropRect)); |
| + clipRect.intersect(cropRectFloat); |
| + canvas->drawRect(clipRect, strokePaint); |
| } |
| virtual void onDraw(SkCanvas* canvas) { |
| @@ -82,7 +94,6 @@ protected: |
| canvas->clear(0x00000000); |
| SkPaint paint; |
| - int x = 0, y = 0; |
| for (int i = 0; i < 4; i++) { |
| SkBitmap* bitmap = (i & 0x01) ? &fCheckerboard : &fBitmap; |
| SkIRect cropRect = SkIRect::MakeXYWH(i * 12, |
| @@ -96,13 +107,16 @@ protected: |
| SkAutoTUnref<SkImageFilter> filter(SkNEW_ARGS( |
| SkOffsetImageFilter, (dx, dy, tileInput, &rect))); |
| paint.setImageFilter(filter); |
| - drawClippedBitmap(canvas, *bitmap, paint, SkIntToScalar(x), SkIntToScalar(y)); |
| - x += bitmap->width() + MARGIN; |
| - if (x + bitmap->width() > WIDTH) { |
| - x = 0; |
| - y += bitmap->height() + MARGIN; |
| - } |
| + drawClippedBitmap(canvas, *bitmap, paint, SkIntToScalar(1), cropRect); |
|
sugoi
2014/03/04 18:56:28
SK_Scalar1 ?
|
| + canvas->translate(SkIntToScalar(bitmap->width() + MARGIN), 0); |
| } |
| + |
| + SkIRect cropRect = SkIRect::MakeXYWH(0, 0, 100, 100); |
| + SkImageFilter::CropRect rect(SkRect::Make(cropRect)); |
| + SkAutoTUnref<SkImageFilter> filter(SkNEW_ARGS( |
| + SkOffsetImageFilter, (SkIntToScalar(-5), SkIntToScalar(-10), NULL, &rect))); |
| + paint.setImageFilter(filter); |
| + drawClippedBitmap(canvas, fBitmap, paint, SkIntToScalar(2), cropRect); |
| } |
| private: |
| typedef GM INHERITED; |