Index: gm/offsetimagefilter.cpp |
diff --git a/gm/offsetimagefilter.cpp b/gm/offsetimagefilter.cpp |
index 0425311b0ac42af45470270fd75c2dcb8a4932ac..52d6de9503b59e026eed58ad8b3634241e39e331 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, SK_Scalar1, cropRect); |
+ 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; |