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 "include/core/SkCanvas.h" 9 #include "include/core/SkPath.h" 10 #include "src/base/SkRandom.h" 11 #include "tools/viewer/Slide.h" 12 13 class MegaStrokeSlide : public Slide { 14 public: MegaStrokeSlide()15 MegaStrokeSlide() { 16 fClip.setLTRB(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 fName = "MegaStroke"; 27 } 28 onChar(SkUnichar uni)29 bool onChar(SkUnichar uni) override { 30 fClip.setLTRB(0, 0, 950, 600); 31 return true; 32 } 33 draw(SkCanvas * canvas)34 void draw(SkCanvas* canvas) override { 35 SkPaint paint; 36 paint.setAntiAlias(true); 37 paint.setARGB(255,255,153,0); 38 paint.setStyle(SkPaint::kStroke_Style); 39 paint.setStrokeWidth(1); 40 41 canvas->save(); 42 canvas->clipRect(fClip); 43 canvas->clear(SK_ColorWHITE); 44 canvas->drawPath(fMegaPath, paint); 45 canvas->restore(); 46 47 SkPaint divSimPaint; 48 divSimPaint.setColor(SK_ColorBLUE); 49 SkScalar x = SkScalarSin(fAngle * SK_ScalarPI / 180) * 200 + 250; 50 SkScalar y = SkScalarCos(fAngle * SK_ScalarPI / 180) * 200 + 250; 51 52 if ((fPlusMinus ^= 1)) { 53 fAngle += 5; 54 } else { 55 fAngle -= 5; 56 } 57 SkRect divSim = SkRect::MakeXYWH(x, y, 100, 100); 58 divSim.outset(30, 30); 59 canvas->drawRect(divSim, divSimPaint); 60 fClip = divSim; 61 } 62 resize(SkScalar w,SkScalar h)63 void resize(SkScalar w, SkScalar h) override { fClip.setWH(950, 600); } 64 animate(double)65 bool animate(double /*nanos*/) override { return true; } 66 67 private: 68 SkPath fMegaPath; 69 SkRect fClip; 70 int fAngle; 71 int fPlusMinus; 72 }; 73 74 ////////////////////////////////////////////////////////////////////////////// 75 76 DEF_SLIDE( return new MegaStrokeSlide(); ) 77