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