aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-01-07 07:44:35 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-01-07 07:44:35 -0800
commit247415969a9a5ed6c83cc09395472416c4b7de7f (patch)
treec840ed3459a1201aeff21b04d4f9b1711553ff11 /samplecode
parent5820fe846fc699b4623c09ed4e24f44122e00c40 (diff)
add backdrop option to SaveLayerRec
Diffstat (limited to 'samplecode')
-rw-r--r--samplecode/SampleApp.cpp9
-rw-r--r--samplecode/SampleLayers.cpp76
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; )
+