diff options
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleApp.cpp | 9 | ||||
-rw-r--r-- | samplecode/SampleLayers.cpp | 76 |
2 files changed, 83 insertions, 2 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index d200e295fb..c7a37e786c 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -1396,6 +1396,15 @@ void SampleWindow::afterChildren(SkCanvas* orig) { if (fUseMPD) { SkAutoTUnref<const SkPicture> picture(fRecorder.endRecording()); + + if (false) { + SkDynamicMemoryWStream wstream; + picture->serialize(&wstream); + + SkAutoTDelete<SkStream> rstream(wstream.detachAsStream()); + picture.reset(SkPicture::CreateFromStream(rstream)); + } + if (true) { if (true) { SkImageInfo info; diff --git a/samplecode/SampleLayers.cpp b/samplecode/SampleLayers.cpp index 52bf5b357b..f8ebd7c94f 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; ) + |