Index: gm/resizeimagefilter.cpp |
diff --git a/gm/resizeimagefilter.cpp b/gm/resizeimagefilter.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fa407c4bfadd37c98eca9d96fb022736b05a9b20 |
--- /dev/null |
+++ b/gm/resizeimagefilter.cpp |
@@ -0,0 +1,96 @@ |
+/* |
+ * Copyright 2013 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "gm.h" |
+#include "SkColor.h" |
+#include "SkResizeImageFilter.h" |
+ |
+namespace skiagm { |
+ |
+class ResizeGM : public GM { |
+public: |
+ ResizeGM() { |
+ this->setBGColor(0x00000000); |
+ } |
+ |
+protected: |
+ virtual SkString onShortName() { |
+ return SkString("resizeimagefilter"); |
+ } |
+ |
+ void draw(SkCanvas* canvas, |
+ const SkRect& rect, |
+ const SkSize& deviceSize, |
+ SkPaint::FilterLevel filterLevel) { |
+ SkRect dstRect; |
+ canvas->getTotalMatrix().mapRect(&dstRect, rect); |
+ canvas->save(); |
+ SkScalar deviceScaleX = SkScalarDiv(deviceSize.width(), dstRect.width()); |
+ SkScalar deviceScaleY = SkScalarDiv(deviceSize.height(), dstRect.height()); |
+ canvas->translate(rect.x(), rect.y()); |
+ canvas->scale(deviceScaleX, deviceScaleY); |
+ canvas->translate(-rect.x(), -rect.y()); |
+ SkAutoTUnref<SkImageFilter> imageFilter( |
+ new SkResizeImageFilter(SkScalarInvert(deviceScaleX), |
+ SkScalarInvert(deviceScaleY), |
+ filterLevel)); |
+ SkPaint filteredPaint; |
+ filteredPaint.setImageFilter(imageFilter.get()); |
+ canvas->saveLayer(&rect, &filteredPaint); |
+ SkPaint paint; |
+ paint.setColor(0xFF00FF00); |
+ SkRect ovalRect = rect; |
+ ovalRect.inset(SkIntToScalar(4), SkIntToScalar(4)); |
+ canvas->drawOval(ovalRect, paint); |
+ canvas->restore(); // for saveLayer |
+ canvas->restore(); |
+ } |
+ |
+ virtual SkISize onISize() { |
+ return make_isize(420, 100); |
+ } |
+ |
+ virtual void onDraw(SkCanvas* canvas) { |
+ canvas->clear(0x00000000); |
+ |
+ SkRect srcRect = SkRect::MakeWH(96, 96); |
+ |
+ SkSize deviceSize = SkSize::Make(16, 16); |
+ draw(canvas, |
+ srcRect, |
+ deviceSize, |
+ SkPaint::kNone_FilterLevel); |
+ |
+ canvas->translate(srcRect.width() + SkIntToScalar(10), 0); |
+ draw(canvas, |
+ srcRect, |
+ deviceSize, |
+ SkPaint::kLow_FilterLevel); |
+ |
+ canvas->translate(srcRect.width() + SkIntToScalar(10), 0); |
+ draw(canvas, |
+ srcRect, |
+ deviceSize, |
+ SkPaint::kMedium_FilterLevel); |
+ |
+ canvas->translate(srcRect.width() + SkIntToScalar(10), 0); |
+ draw(canvas, |
+ srcRect, |
+ deviceSize, |
+ SkPaint::kHigh_FilterLevel); |
+ } |
+ |
+private: |
+ typedef GM INHERITED; |
+}; |
+ |
+////////////////////////////////////////////////////////////////////////////// |
+ |
+static GM* MyFactory(void*) { return new ResizeGM; } |
+static GMRegistry reg(MyFactory); |
+ |
+} |