1e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com/*
2e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com * Copyright 2013 Google Inc.
3e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com *
4e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com * Use of this source code is governed by a BSD-style license that can be
5e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com * found in the LICENSE file.
6e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com */
7e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
8e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com#include "gm.h"
9e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com#include "SkRandom.h"
10e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
11e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.comnamespace skiagm {
12e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
139e1ec1a52985cce9db3a0d0e8d448b82a32e70cbskia.committer@gmail.com// This GM draws a lot of arcs in a 'Z' shape. It particularly exercises
14e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com// the 'drawArc' code near a singularly of its processing (i.e., near the
15e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com// edge of one of its underlying quads).
16e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.comclass ArcOfZorroGM : public GM {
17e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.compublic:
18e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com    ArcOfZorroGM() {
1965cdba6ba78aaec0c0a4596bb5941020c789482bcaryclark        this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC));
20e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com    }
21e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
22e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.comprotected:
23a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
2436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkString onShortName() override {
25e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        return SkString("arcofzorro");
26e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com    }
27e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
2836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkISize onISize() override {
29f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(1000, 1000);
30e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com    }
31e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
3236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(SkCanvas* canvas) override {
33e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkRandom rand;
34e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
35e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        SkRect rect = SkRect::MakeXYWH(10, 10, 200, 200);
36e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
37e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        SkPaint p;
38e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
39e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        p.setStyle(SkPaint::kStroke_Style);
40e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        p.setStrokeWidth(35);
41e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        int xOffset = 0, yOffset = 0;
42e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        int direction = 0;
43e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
44e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        for (float arc = 134.0f; arc < 136.0f; arc += 0.01f) {
45e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            SkColor color = rand.nextU();
46e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            color |= 0xff000000;
47e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            p.setColor(color);
48e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
49e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            canvas->save();
50e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            canvas->translate(SkIntToScalar(xOffset), SkIntToScalar(yOffset));
51e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            canvas->drawArc(rect, 0, arc, false, p);
52e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            canvas->restore();
53e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
54e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            switch (direction) {
55e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            case 0:
56e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                xOffset += 10;
57e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                if (xOffset >= 700) {
58e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                    direction = 1;
59e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                }
60e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                break;
61e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            case 1:
62e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                xOffset -= 10;
63e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                yOffset += 10;
64e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                if (xOffset < 50) {
65e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                    direction = 2;
66e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                }
67e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                break;
68e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            case 2:
69e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                xOffset += 10;
70e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com                break;
71e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com            }
72e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com        }
73e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
74e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com    }
75e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
76e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.comprivate:
77e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com    typedef GM INHERITED;
78e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com};
79e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
80e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com//////////////////////////////////////////////////////////////////////////////
81e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com
822880df2609eba09b555ca37be04b6ad89290c765Tom HudsonDEF_GM(return new ArcOfZorroGM;)
83e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com}
84