• 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:
onGetFlags() const23     virtual uint32_t onGetFlags() const SK_OVERRIDE {
24         return kSkipTiled_Flag;
25     }
26 
onShortName()27     virtual SkString onShortName() SK_OVERRIDE {
28         return SkString("arcofzorro");
29     }
30 
onISize()31     virtual SkISize onISize() SK_OVERRIDE {
32         return SkISize::Make(1000, 1000);
33     }
34 
onDraw(SkCanvas * canvas)35     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
36         SkRandom rand;
37 
38         SkRect rect = SkRect::MakeXYWH(10, 10, 200, 200);
39 
40         SkPaint p;
41 
42         p.setStyle(SkPaint::kStroke_Style);
43         p.setStrokeWidth(35);
44         int xOffset = 0, yOffset = 0;
45         int direction = 0;
46 
47         for (float arc = 134.0f; arc < 136.0f; arc += 0.01f) {
48             SkColor color = rand.nextU();
49             color |= 0xff000000;
50             p.setColor(color);
51 
52             canvas->save();
53             canvas->translate(SkIntToScalar(xOffset), SkIntToScalar(yOffset));
54             canvas->drawArc(rect, 0, arc, false, p);
55             canvas->restore();
56 
57             switch (direction) {
58             case 0:
59                 xOffset += 10;
60                 if (xOffset >= 700) {
61                     direction = 1;
62                 }
63                 break;
64             case 1:
65                 xOffset -= 10;
66                 yOffset += 10;
67                 if (xOffset < 50) {
68                     direction = 2;
69                 }
70                 break;
71             case 2:
72                 xOffset += 10;
73                 break;
74             }
75         }
76 
77     }
78 
79 private:
80     typedef GM INHERITED;
81 };
82 
83 //////////////////////////////////////////////////////////////////////////////
84 
85 DEF_GM( return SkNEW(ArcOfZorroGM); )
86 
87 }
88