1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
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.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com#include "gm.h"
9048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
10048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.comnamespace skiagm {
11048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
12048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.comclass FillTypeGM : public GM {
13048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    SkPath fPath;
14048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.compublic:
15d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    FillTypeGM() {
1648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        this->setBGColor(0xFFDDDDDD);
17d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com    }
18d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
19d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com    void makePath() {
20d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com        if (fPath.isEmpty()) {
21d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com            const SkScalar radius = SkIntToScalar(45);
22d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com            fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius);
23d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com            fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius);
24d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com        }
25048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    }
26d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
27048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.comprotected:
28a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    virtual uint32_t onGetFlags() const SK_OVERRIDE {
29a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return kSkipTiled_Flag;
30a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    }
31a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
32048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    virtual SkString onShortName() {
33048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        return SkString("filltypes");
34048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    }
35048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
36d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com    virtual SkISize onISize() {
37f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(835, 840);
38048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    }
39048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
40048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft,
41048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com                  SkScalar scale, const SkPaint& paint) {
42048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
43048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
44048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
45048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->save();
46048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
47048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->clipRect(r);
48048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->drawColor(SK_ColorWHITE);
49048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        fPath.setFillType(ft);
50048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->translate(r.centerX(), r.centerY());
51048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->scale(scale, scale);
52048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->translate(-r.centerX(), -r.centerY());
53048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->drawPath(fPath, paint);
54048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->restore();
55048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    }
56048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
57048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) {
58048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        showPath(canvas,   0,   0, SkPath::kWinding_FillType,
59048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com                 scale, paint);
60048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        showPath(canvas, 200,   0, SkPath::kEvenOdd_FillType,
61048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com                 scale, paint);
62048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        showPath(canvas,  00, 200, SkPath::kInverseWinding_FillType,
63048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com                 scale, paint);
64048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType,
65048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com                 scale, paint);
66048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    }
67048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
68048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    virtual void onDraw(SkCanvas* canvas) {
69d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com        this->makePath();
70d42e3f60cd571afb6c0f1837f9e0996bfe149001reed@google.com
71048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
72d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
73048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        SkPaint paint;
74048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        const SkScalar scale = SkIntToScalar(5)/4;
75048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
76048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        paint.setAntiAlias(false);
77048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
78048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        showFour(canvas, SK_Scalar1, paint);
79048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->translate(SkIntToScalar(450), 0);
80048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        showFour(canvas, scale, paint);
81048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
82048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        paint.setAntiAlias(true);
83048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
84048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->translate(SkIntToScalar(-450), SkIntToScalar(450));
85048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        showFour(canvas, SK_Scalar1, paint);
86048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        canvas->translate(SkIntToScalar(450), 0);
87048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com        showFour(canvas, scale, paint);
88048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    }
89d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
90048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.comprivate:
91048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com    typedef GM INHERITED;
92048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com};
93048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
94048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com//////////////////////////////////////////////////////////////////////////////
95048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
96048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.comstatic GM* MyFactory(void*) { return new FillTypeGM; }
97048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.comstatic GMRegistry reg(MyFactory);
98048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com
99048522dd2aa45d1b4bf52944527f877b30ea45fdreed@android.com}
100