Chromium Code Reviews| Index: samplecode/SampleLayers.cpp |
| diff --git a/samplecode/SampleLayers.cpp b/samplecode/SampleLayers.cpp |
| index 52bf5b357b2b7e308f8819c0c24d5cc31d01177a..2c5bf2f1c99b451edc19c71c843969401811db8d 100644 |
| --- a/samplecode/SampleLayers.cpp |
| +++ b/samplecode/SampleLayers.cpp |
| @@ -232,8 +232,82 @@ protected: |
| private: |
| typedef SkView INHERITED; |
| }; |
| +DEF_SAMPLE( return new LayersView; ) |
| ////////////////////////////////////////////////////////////////////////////// |
| -static SkView* MyFactory() { return new LayersView; } |
| -static SkViewRegister reg(MyFactory); |
| +#include "SkBlurImageFilter.h" |
| +#include "Resources.h" |
| +#include "SkAnimTimer.h" |
| + |
|
robertphillips
2015/12/15 13:28:38
// Apply and image filter to the current canvas co
|
| +class PickupView : public SampleView { |
| + SkPoint fCenter; |
| + SkScalar fAngle; |
| + SkAutoTUnref<SkImage> fImage; |
| +public: |
| + PickupView() { |
| + fCenter.set(200, 150); |
| + fAngle = 0; |
| + fImage.reset(GetResourceAsImage("mandrill_512.png")); |
| + } |
| + |
| +protected: |
| + // overrides from SkEventSink |
| + bool onQuery(SkEvent* evt) override { |
| + if (SampleCode::TitleQ(*evt)) { |
| + SampleCode::TitleR(evt, "Pickup"); |
| + return true; |
| + } |
| + return this->INHERITED::onQuery(evt); |
| + } |
| + |
| + void onDrawContent(SkCanvas* canvas) override { |
| + const SkScalar sigma = 15; |
| + SkAutoTUnref<SkImageFilter> filter(SkBlurImageFilter::Create(sigma, sigma)); |
| + |
| + 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(); |
| + canvas->saveLayerWithPickup(&bounds, nullptr, filter); |
| + canvas->drawColor(0x60FFFFFF); |
| + 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); |
| + } |
| + |
|
robertphillips
2015/12/15 13:28:38
override ?
|
| + virtual bool handleKey(SkKey) { |
| + this->inval(nullptr); |
| + return true; |
| + } |
| + |
| +private: |
| + typedef SampleView INHERITED; |
| +}; |
| +DEF_SAMPLE( return new PickupView; ) |
| + |