| Index: samplecode/SampleLayers.cpp
|
| diff --git a/samplecode/SampleLayers.cpp b/samplecode/SampleLayers.cpp
|
| index 52bf5b357b2b7e308f8819c0c24d5cc31d01177a..f8ebd7c94f5077e88feb92edb13d1b249a228ff9 100644
|
| --- a/samplecode/SampleLayers.cpp
|
| +++ b/samplecode/SampleLayers.cpp
|
| @@ -232,8 +232,80 @@ protected:
|
| private:
|
| typedef SkView INHERITED;
|
| };
|
| +DEF_SAMPLE( return new LayersView; )
|
|
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| -static SkView* MyFactory() { return new LayersView; }
|
| -static SkViewRegister reg(MyFactory);
|
| +#include "SkBlurImageFilter.h"
|
| +#include "SkMatrixConvolutionImageFilter.h"
|
| +#include "SkMorphologyImageFilter.h"
|
| +
|
| +#include "Resources.h"
|
| +#include "SkAnimTimer.h"
|
| +
|
| +class BackdropView : public SampleView {
|
| + SkPoint fCenter;
|
| + SkScalar fAngle;
|
| + SkAutoTUnref<SkImage> fImage;
|
| + SkAutoTUnref<SkImageFilter> fFilter;
|
| +public:
|
| + BackdropView() {
|
| + fCenter.set(200, 150);
|
| + fAngle = 0;
|
| + fImage.reset(GetResourceAsImage("mandrill_512.png"));
|
| + fFilter.reset(SkDilateImageFilter::Create(8, 8));
|
| + }
|
| +
|
| +protected:
|
| + // overrides from SkEventSink
|
| + bool onQuery(SkEvent* evt) override {
|
| + if (SampleCode::TitleQ(*evt)) {
|
| + SampleCode::TitleR(evt, "Backdrop");
|
| + return true;
|
| + }
|
| + return this->INHERITED::onQuery(evt);
|
| + }
|
| +
|
| + void onDrawContent(SkCanvas* canvas) override {
|
| + canvas->drawImage(fImage, 0, 0, nullptr);
|
| +
|
| + const SkScalar w = 250;
|
| + const SkScalar h = 150;
|
| + SkPath path;
|
| + path.addOval(SkRect::MakeXYWH(-w/2, -h/2, w, h));
|
| + SkMatrix m;
|
| + m.setRotate(fAngle);
|
| + m.postTranslate(fCenter.x(), fCenter.y());
|
| + path.transform(m);
|
| +
|
| + canvas->clipPath(path, SkRegion::kIntersect_Op, true);
|
| + const SkRect bounds = path.getBounds();
|
| +
|
| + SkPaint paint;
|
| + paint.setAlpha(0xCC);
|
| + canvas->saveLayer({ &bounds, &paint, fFilter, 0 });
|
| +
|
| + canvas->restore();
|
| + }
|
| +
|
| + bool onAnimate(const SkAnimTimer& timer) override {
|
| + fAngle = SkDoubleToScalar(fmod(timer.secs() * 360 / 5, 360));
|
| + return true;
|
| + }
|
| +
|
| + SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) override {
|
| + this->inval(nullptr);
|
| + return new Click(this);
|
| + }
|
| +
|
| + bool onClick(Click* click) override {
|
| + this->inval(nullptr);
|
| + fCenter = click->fCurr;
|
| + return this->INHERITED::onClick(click);
|
| + }
|
| +
|
| +private:
|
| + typedef SampleView INHERITED;
|
| +};
|
| +DEF_SAMPLE( return new BackdropView; )
|
| +
|
|
|