1f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org */
8f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
9f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
10ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
11f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#include "gm.h"
12f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#include "SkRandom.h"
13f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
14f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#define W   400
15f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#define H   400
16f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org#define N   50
17f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
18f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgstatic const SkScalar SW = SkIntToScalar(W);
19f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgstatic const SkScalar SH = SkIntToScalar(H);
20f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
21e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.orgstatic void rnd_rect(SkRect* r, SkPaint* paint, SkLCGRandom& rand) {
22f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    SkScalar x = rand.nextUScalar1() * W;
23f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    SkScalar y = rand.nextUScalar1() * H;
24f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    SkScalar w = rand.nextUScalar1() * (W >> 2);
25f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    SkScalar h = rand.nextUScalar1() * (H >> 2);
2617b78946096265d80215a6c946286ecaa35ea7edepoger@google.com    SkScalar hoffset = rand.nextSScalar1();
2717b78946096265d80215a6c946286ecaa35ea7edepoger@google.com    SkScalar woffset = rand.nextSScalar1();
28ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
29f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    r->set(x, y, x + w, y + h);
3017b78946096265d80215a6c946286ecaa35ea7edepoger@google.com    r->offset(-w/2 + woffset, -h/2 + hoffset);
31ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
32f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    paint->setColor(rand.nextU());
33f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    paint->setAlpha(0xFF);
34f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org}
35f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
36ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
374384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass StrokesGM : public skiagm::GM {
38f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgpublic:
39f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    StrokesGM() {}
40ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
41f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprotected:
42a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    virtual uint32_t onGetFlags() const SK_OVERRIDE {
43a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return kSkipTiled_Flag;
44a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    }
45a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
46f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    virtual SkString onShortName() {
47f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        return SkString("strokes_round");
48f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    }
49ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
50f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    virtual SkISize onISize() {
514384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        return SkISize::Make(W, H*2);
52f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    }
53ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
54ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    virtual void onDraw(SkCanvas* canvas) {
55f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        SkPaint paint;
56f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        paint.setStyle(SkPaint::kStroke_Style);
57f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        paint.setStrokeWidth(SkIntToScalar(9)/2);
58ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
59f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        for (int y = 0; y < 2; y++) {
60f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            paint.setAntiAlias(!!y);
61f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            SkAutoCanvasRestore acr(canvas, true);
62f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            canvas->translate(0, SH * y);
63f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            canvas->clipRect(SkRect::MakeLTRB(
64f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                                              SkIntToScalar(2), SkIntToScalar(2)
65f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                                              , SW - SkIntToScalar(2), SH - SkIntToScalar(2)
66f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                                              ));
67ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
68e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org            SkLCGRandom rand;
69f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            for (int i = 0; i < N; i++) {
70f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                SkRect r;
71f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                rnd_rect(&r, &paint, rand);
72f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                canvas->drawOval(r, paint);
73f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                rnd_rect(&r, &paint, rand);
74f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                canvas->drawRoundRect(r, r.width()/4, r.height()/4, paint);
75f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                rnd_rect(&r, &paint, rand);
76f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            }
77f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        }
78f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    }
79ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
80f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprivate:
814384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    typedef skiagm::GM INHERITED;
82f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org};
83f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
844384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass Strokes2GM : public skiagm::GM {
85f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    SkPath fPath;
86f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgpublic:
87f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    Strokes2GM() {
88e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkLCGRandom rand;
89f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        fPath.moveTo(0, 0);
90f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        for (int i = 0; i < 13; i++) {
91f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            SkScalar x = rand.nextUScalar1() * (W >> 1);
92f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            SkScalar y = rand.nextUScalar1() * (H >> 1);
93f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            fPath.lineTo(x, y);
94f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        }
95f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    }
96ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
97f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprotected:
98a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    virtual uint32_t onGetFlags() const SK_OVERRIDE {
99a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return kSkipTiled_Flag;
100a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    }
101a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
102f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    virtual SkString onShortName() {
103f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        return SkString("strokes_poly");
104f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    }
105ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
106f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    virtual SkISize onISize() {
1074384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        return SkISize::Make(W, H*2);
108f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    }
109ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
110f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    static void rotate(SkScalar angle, SkScalar px, SkScalar py, SkCanvas* canvas) {
111f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        SkMatrix matrix;
112f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        matrix.setRotate(angle, px, py);
113f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        canvas->concat(matrix);
114f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    }
115f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
116f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    virtual void onDraw(SkCanvas* canvas) {
117f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        canvas->drawColor(SK_ColorWHITE);
118ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
119f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        SkPaint paint;
120f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        paint.setStyle(SkPaint::kStroke_Style);
121f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        paint.setStrokeWidth(SkIntToScalar(9)/2);
122ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
123f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        for (int y = 0; y < 2; y++) {
124f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            paint.setAntiAlias(!!y);
125f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            SkAutoCanvasRestore acr(canvas, true);
126f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            canvas->translate(0, SH * y);
127f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            canvas->clipRect(SkRect::MakeLTRB(SkIntToScalar(2),
128f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                                              SkIntToScalar(2),
129f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                                              SW - SkIntToScalar(2),
130f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                                              SH - SkIntToScalar(2)));
131ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
132e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org            SkLCGRandom rand;
133f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            for (int i = 0; i < N/2; i++) {
134f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                SkRect r;
135f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                rnd_rect(&r, &paint, rand);
136f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                rotate(SkIntToScalar(15), SW/2, SH/2, canvas);
137f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org                canvas->drawPath(fPath, paint);
138f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org            }
139f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org        }
140f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org    }
141ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
142f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.orgprivate:
1434384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    typedef skiagm::GM INHERITED;
144f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org};
145f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
146f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org//////////////////////////////////////////////////////////////////////////////
147f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
1484384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic SkRect inset(const SkRect& r) {
1494384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    SkRect rr(r);
1504384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    rr.inset(r.width()/10, r.height()/10);
1514384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    return rr;
1524384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com}
153f2c21cdaf18f5c6be0dba65c5d901f32fa3149cemike@reedtribe.org
1544384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comclass Strokes3GM : public skiagm::GM {
1554384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    static void make0(SkPath* path, const SkRect& bounds, SkString* title) {
1564384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addRect(bounds, SkPath::kCW_Direction);
1574384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addRect(inset(bounds), SkPath::kCW_Direction);
1584384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        title->set("CW CW");
1594384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
160ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1614384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    static void make1(SkPath* path, const SkRect& bounds, SkString* title) {
1624384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addRect(bounds, SkPath::kCW_Direction);
1634384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addRect(inset(bounds), SkPath::kCCW_Direction);
1644384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        title->set("CW CCW");
1654384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
166ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1674384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    static void make2(SkPath* path, const SkRect& bounds, SkString* title) {
1684384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addOval(bounds, SkPath::kCW_Direction);
1694384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addOval(inset(bounds), SkPath::kCW_Direction);
1704384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        title->set("CW CW");
1714384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
172ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1734384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    static void make3(SkPath* path, const SkRect& bounds, SkString* title) {
1744384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addOval(bounds, SkPath::kCW_Direction);
1754384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addOval(inset(bounds), SkPath::kCCW_Direction);
1764384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        title->set("CW CCW");
1774384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
178ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1794384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    static void make4(SkPath* path, const SkRect& bounds, SkString* title) {
1804384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addRect(bounds, SkPath::kCW_Direction);
1814384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        SkRect r = bounds;
1824384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        r.inset(bounds.width() / 10, -bounds.height() / 10);
1834384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addOval(r, SkPath::kCW_Direction);
1844384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        title->set("CW CW");
1854384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
186ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1874384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    static void make5(SkPath* path, const SkRect& bounds, SkString* title) {
1884384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addRect(bounds, SkPath::kCW_Direction);
1894384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        SkRect r = bounds;
1904384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        r.inset(bounds.width() / 10, -bounds.height() / 10);
1914384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        path->addOval(r, SkPath::kCCW_Direction);
1924384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        title->set("CW CCW");
1934384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
1944384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com
1954384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.compublic:
1964384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    Strokes3GM() {}
197ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
1984384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comprotected:
199a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    virtual uint32_t onGetFlags() const SK_OVERRIDE {
200a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return kSkipTiled_Flag;
201a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    }
202a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
2034384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    virtual SkString onShortName() {
2044384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        return SkString("strokes3");
2054384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
206ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2074384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    virtual SkISize onISize() {
2084384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        return SkISize::Make(W, H*2);
2094384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
210ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2114384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    virtual void onDraw(SkCanvas* canvas) {
2124384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        SkPaint origPaint;
2134384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        origPaint.setAntiAlias(true);
2144384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        origPaint.setStyle(SkPaint::kStroke_Style);
2154384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        SkPaint fillPaint(origPaint);
2164384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        fillPaint.setColor(SK_ColorRED);
2174384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        SkPaint strokePaint(origPaint);
2184384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        strokePaint.setColor(0xFF4444FF);
2194384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com
2204384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        void (*procs[])(SkPath*, const SkRect&, SkString*) = {
2214384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            make0, make1, make2, make3, make4, make5
2224384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        };
2234384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com
2244384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
2254384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com
2264384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        SkRect bounds = SkRect::MakeWH(SkIntToScalar(50), SkIntToScalar(50));
2274384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        SkScalar dx = bounds.width() * 4/3;
2284384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        SkScalar dy = bounds.height() * 5;
2294384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com
2304384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        for (size_t i = 0; i < SK_ARRAY_COUNT(procs); ++i) {
2314384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            SkPath orig;
2324384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            SkString str;
2334384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            procs[i](&orig, bounds, &str);
234ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2354384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            canvas->save();
2364384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            for (int j = 0; j < 13; ++j) {
2374384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com                strokePaint.setStrokeWidth(SK_Scalar1 * j * j);
2384384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com                canvas->drawPath(orig, strokePaint);
2394384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com                canvas->drawPath(orig, origPaint);
2404384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com                SkPath fill;
2414384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com                strokePaint.getFillPath(orig, &fill);
2424384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com                canvas->drawPath(fill, fillPaint);
2434384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com                canvas->translate(dx + strokePaint.getStrokeWidth(), 0);
2444384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            }
2454384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            canvas->restore();
2464384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com            canvas->translate(0, dy);
2474384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com        }
2484384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    }
249ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2504384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comprivate:
2514384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com    typedef skiagm::GM INHERITED;
2524384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com};
2534384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com
2544384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com//////////////////////////////////////////////////////////////////////////////
2554384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com
2564384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F0(void*) { return new StrokesGM; }
2574384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F1(void*) { return new Strokes2GM; }
2584384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GM* F2(void*) { return new Strokes3GM; }
2594384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.com
2604384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R0(F0);
2614384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R1(F1);
2624384fabab41b26c7cf8f357a22181e7ba23e7822reed@google.comstatic skiagm::GMRegistry R2(F2);
263