Index: gm/morphology.cpp |
diff --git a/gm/morphology.cpp b/gm/morphology.cpp |
index 2d29fcd2019bedef1ed1f395e876859a99fee789..2150689b87eb0a3b042fcf9f1883e2505957fe4e 100644 |
--- a/gm/morphology.cpp |
+++ b/gm/morphology.cpp |
@@ -8,8 +8,8 @@ |
#include "gm.h" |
#include "SkMorphologyImageFilter.h" |
-#define WIDTH 640 |
-#define HEIGHT 480 |
+#define WIDTH 700 |
+#define HEIGHT 560 |
namespace skiagm { |
@@ -44,6 +44,16 @@ protected: |
virtual SkISize onISize() { |
return make_isize(WIDTH, HEIGHT); |
} |
+ |
+ void drawClippedBitmap(SkCanvas* canvas, const SkPaint& paint, int x, int y) { |
+ canvas->save(); |
+ canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); |
+ canvas->clipRect(SkRect::MakeWH( |
+ SkIntToScalar(fBitmap.width()), SkIntToScalar(fBitmap.height()))); |
+ canvas->drawBitmap(fBitmap, 0, 0, &paint); |
+ canvas->restore(); |
+ } |
+ |
virtual void onDraw(SkCanvas* canvas) { |
if (!fOnce) { |
make_bitmap(); |
@@ -60,26 +70,25 @@ protected: |
{ 24, 24, 25, 25 }, |
}; |
SkPaint paint; |
- for (unsigned j = 0; j < 2; ++j) { |
+ SkIRect cropRect = SkIRect::MakeXYWH(25, 20, 100, 80); |
+ |
+ for (unsigned j = 0; j < 4; ++j) { |
for (unsigned i = 0; i < SK_ARRAY_COUNT(samples); ++i) { |
- SkScalar x = SkIntToScalar(i * 140), y = SkIntToScalar(j * 140); |
- if (j) { |
+ const SkIRect* cr = j & 0x02 ? &cropRect : NULL; |
+ if (j & 0x01) { |
paint.setImageFilter(new SkErodeImageFilter( |
samples[i].fRadiusX, |
- samples[i].fRadiusY))->unref(); |
+ samples[i].fRadiusY, |
+ NULL, |
+ cr))->unref(); |
} else { |
paint.setImageFilter(new SkDilateImageFilter( |
samples[i].fRadiusX, |
- samples[i].fRadiusY))->unref(); |
+ samples[i].fRadiusY, |
+ NULL, |
+ cr))->unref(); |
} |
- SkRect bounds = SkRect::MakeXYWH( |
- x, |
- y, |
- SkIntToScalar(samples[i].fWidth), |
- SkIntToScalar(samples[i].fHeight)); |
- canvas->saveLayer(&bounds, &paint); |
- canvas->drawBitmap(fBitmap, x, y); |
- canvas->restore(); |
+ drawClippedBitmap(canvas, paint, i * 140, j * 140); |
} |
} |
} |