xref: /aosp_15_r20/external/skia/tools/viewer/MegaStrokeSlide.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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