1 /*
2  * Copyright 2016 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "Sample.h"
9 #include "SkCanvas.h"
10 #include "SkPath.h"
11 #include "SkRandom.h"
12 
13 class MegaStrokeView : public Sample {
14 public:
MegaStrokeView()15     MegaStrokeView() {
16         fClip.set(0, 0, 950, 600);
17         fAngle = 0;
18         fPlusMinus = 0;
19         SkRandom rand;
20         fMegaPath.reset();
21         for (int index = 0; index < 921; ++index) {
22             for (int segs = 0; segs < 40; ++segs) {
23                 fMegaPath.lineTo(SkIntToScalar(index), SkIntToScalar(rand.nextRangeU(500, 600)));
24             }
25         }
26     }
27 
28 protected:
onQuery(Sample::Event * evt)29     bool onQuery(Sample::Event* evt) override {
30         if (Sample::TitleQ(*evt)) {
31             Sample::TitleR(evt, "MegaStroke");
32             return true;
33         }
34 
35         SkUnichar uni;
36         if (Sample::CharQ(*evt, &uni)) {
37            fClip.set(0, 0, 950, 600);
38         }
39         if (evt->isType("SampleCode_Key_Event")) {
40            fClip.set(0, 0, 950, 600);
41         }
42         return this->INHERITED::onQuery(evt);
43     }
44 
onDrawBackground(SkCanvas * canvas)45     void onDrawBackground(SkCanvas* canvas) override {
46     }
47 
onDrawContent(SkCanvas * canvas)48     void onDrawContent(SkCanvas* canvas) override {
49         SkPaint paint;
50         paint.setAntiAlias(true);
51         paint.setARGB(255,255,153,0);
52         paint.setStyle(SkPaint::kStroke_Style);
53         paint.setStrokeWidth(1);
54 
55         canvas->save();
56         canvas->clipRect(fClip);
57         canvas->clear(SK_ColorWHITE);
58         canvas->drawPath(fMegaPath, paint);
59         canvas->restore();
60 
61         SkPaint divSimPaint;
62         divSimPaint.setColor(SK_ColorBLUE);
63 	    SkScalar x = SkScalarSin(fAngle * SK_ScalarPI / 180) * 200 + 250;
64 	    SkScalar y = SkScalarCos(fAngle * SK_ScalarPI / 180) * 200 + 250;
65 
66         if ((fPlusMinus ^= 1)) {
67             fAngle += 5;
68         } else {
69             fAngle -= 5;
70         }
71         SkRect divSim = SkRect::MakeXYWH(x, y, 100, 100);
72         divSim.outset(30, 30);
73         canvas->drawRect(divSim, divSimPaint);
74         fClip = divSim;
75     }
76 
onSizeChange()77     void onSizeChange() override {
78         fClip.set(0, 0, 950, 600);
79     }
80 
onAnimate(const SkAnimTimer &)81     bool onAnimate(const SkAnimTimer& ) override {
82         return true;
83     }
84 
85 private:
86     SkPath      fMegaPath;
87     SkRect      fClip;
88     int         fAngle;
89     int         fPlusMinus;
90     typedef Sample INHERITED;
91 };
92 
93 //////////////////////////////////////////////////////////////////////////////
94 
95 DEF_SAMPLE( return new MegaStrokeView(); )
96