Index: samplecode/SampleMegaStroke.cpp |
diff --git a/samplecode/SampleMegaStroke.cpp b/samplecode/SampleMegaStroke.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9222256c9efeb6b438c93b73c1211887415fc3dc |
--- /dev/null |
+++ b/samplecode/SampleMegaStroke.cpp |
@@ -0,0 +1,99 @@ |
+/* |
+ * Copyright 2016 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SampleCode.h" |
+#include "SkCanvas.h" |
+#include "SkPath.h" |
+#include "SkRandom.h" |
+ |
+class MegaStrokeView : public SampleView { |
+public: |
+ MegaStrokeView() { |
+ fClip.set(0, 0, 950, 600); |
+ fAngle = 0; |
+ fPlusMinus = 0; |
+ SkRandom rand; |
+ fMegaPath.reset(); |
+ for (int index = 0; index < 921; ++index) { |
+ for (int segs = 0; segs < 40; ++segs) { |
+ fMegaPath.lineTo(SkIntToScalar(index), SkIntToScalar(rand.nextRangeU(500, 600))); |
+ } |
+ } |
+ } |
+ |
+protected: |
+ // overrides from SkEventSink |
+ bool onQuery(SkEvent* evt) override { |
+ if (SampleCode::TitleQ(*evt)) { |
+ SampleCode::TitleR(evt, "MegaStroke"); |
+ return true; |
+ } |
+ |
+ SkUnichar uni; |
+ if (SampleCode::CharQ(*evt, &uni)) { |
+ fClip.set(0, 0, 950, 600); |
+ } |
+ SkString str; |
+ evt->getType(&str); |
+ if (str == SkString("SampleCode_Key_Event")) { |
+ fClip.set(0, 0, 950, 600); |
+ } |
+ return this->INHERITED::onQuery(evt); |
+ } |
+ |
+ void onDrawBackground(SkCanvas* canvas) override { |
+ } |
+ |
+ void onDrawContent(SkCanvas* canvas) override { |
+ SkPaint paint; |
+ paint.setAntiAlias(true); |
+ paint.setARGB(255,255,153,0); |
+ paint.setStyle(SkPaint::kStroke_Style); |
+ paint.setStrokeWidth(1); |
+ |
+ canvas->save(); |
+ canvas->clipRect(fClip); |
+ canvas->clear(SK_ColorWHITE); |
+ canvas->drawPath(fMegaPath, paint); |
+ canvas->restore(); |
+ |
+ SkPaint divSimPaint; |
+ divSimPaint.setColor(SK_ColorBLUE); |
+ SkScalar x = SkScalarSin(fAngle * SK_ScalarPI / 180) * 200 + 250; |
+ SkScalar y = SkScalarCos(fAngle * SK_ScalarPI / 180) * 200 + 250; |
+ |
+ if ((fPlusMinus ^= 1)) { |
+ fAngle += 5; |
+ } else { |
+ fAngle -= 5; |
+ } |
+ SkRect divSim = SkRect::MakeXYWH(x, y, 100, 100); |
+ divSim.outset(30, 30); |
+ canvas->drawRect(divSim, divSimPaint); |
+ fClip = divSim; |
+ } |
+ |
+ void onSizeChange() override { |
+ fClip.set(0, 0, 950, 600); |
+ } |
+ |
+ bool onAnimate(const SkAnimTimer& ) override { |
+ return true; |
+ } |
+ |
+private: |
+ SkPath fMegaPath; |
+ SkRect fClip; |
+ int fAngle; |
+ int fPlusMinus; |
+ typedef SampleView INHERITED; |
+}; |
+ |
+////////////////////////////////////////////////////////////////////////////// |
+ |
+static SkView* MyFactory() { return new MegaStrokeView; } |
+static SkViewRegister reg(MyFactory); |