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
11namespace 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).
16class ArcOfZorroGM : public GM {
17public:
18    ArcOfZorroGM() {
19        this->setBGColor(0xFFCCCCCC);
20    }
21
22protected:
23    virtual uint32_t onGetFlags() const SK_OVERRIDE {
24        return kSkipTiled_Flag;
25    }
26
27    virtual SkString onShortName() SK_OVERRIDE {
28        return SkString("arcofzorro");
29    }
30
31    virtual SkISize onISize() SK_OVERRIDE {
32        return SkISize::Make(1000, 1000);
33    }
34
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
79private:
80    typedef GM INHERITED;
81};
82
83//////////////////////////////////////////////////////////////////////////////
84
85DEF_GM( return SkNEW(ArcOfZorroGM); )
86
87}
88