• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2013 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 "gm.h"
9 #include "SkRandom.h"
10 
11 namespace skiagm {
12 
13 // This GM draws a lot of arcs in a 'Z' shape. It particularly exercises
14 // the 'drawArc' code near a singularly of its processing (i.e., near the
15 // edge of one of its underlying quads).
16 class ArcOfZorroGM : public GM {
17 public:
ArcOfZorroGM()18     ArcOfZorroGM() {
19         this->setBGColor(0xFFCCCCCC);
20     }
21 
22 protected:
23 
onShortName()24     SkString onShortName() override {
25         return SkString("arcofzorro");
26     }
27 
onISize()28     SkISize onISize() override {
29         return SkISize::Make(1000, 1000);
30     }
31 
onDraw(SkCanvas * canvas)32     void onDraw(SkCanvas* canvas) override {
33         SkRandom rand;
34 
35         SkRect rect = SkRect::MakeXYWH(10, 10, 200, 200);
36 
37         SkPaint p;
38 
39         p.setStyle(SkPaint::kStroke_Style);
40         p.setStrokeWidth(35);
41         int xOffset = 0, yOffset = 0;
42         int direction = 0;
43 
44         for (float arc = 134.0f; arc < 136.0f; arc += 0.01f) {
45             SkColor color = rand.nextU();
46             color |= 0xff000000;
47             p.setColor(color);
48 
49             canvas->save();
50             canvas->translate(SkIntToScalar(xOffset), SkIntToScalar(yOffset));
51             canvas->drawArc(rect, 0, arc, false, p);
52             canvas->restore();
53 
54             switch (direction) {
55             case 0:
56                 xOffset += 10;
57                 if (xOffset >= 700) {
58                     direction = 1;
59                 }
60                 break;
61             case 1:
62                 xOffset -= 10;
63                 yOffset += 10;
64                 if (xOffset < 50) {
65                     direction = 2;
66                 }
67                 break;
68             case 2:
69                 xOffset += 10;
70                 break;
71             }
72         }
73 
74     }
75 
76 private:
77     typedef GM INHERITED;
78 };
79 
80 //////////////////////////////////////////////////////////////////////////////
81 
82 DEF_GM(return new ArcOfZorroGM;)
83 }
84