diff options
Diffstat (limited to 'gm/resizeimagefilter.cpp')
-rw-r--r-- | gm/resizeimagefilter.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/gm/resizeimagefilter.cpp b/gm/resizeimagefilter.cpp new file mode 100644 index 0000000000..fa407c4bfa --- /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); + +} |