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