1e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed#include "gm.h"
2e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
3e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reednamespace skiagm {
4e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
5e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedclass FillTypeGM : public GM {
6e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    SkPath fPath;
7e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedpublic:
8e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed	FillTypeGM() {
9e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        const SkScalar radius = SkIntToScalar(45);
10e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius);
11e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius);
12e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    }
13e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
14e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedprotected:
15e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    virtual SkString onShortName() {
16e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        return SkString("filltypes");
17e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    }
18e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
19e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed	virtual SkISize onISize() {
20e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        return make_isize(835, 840);
21e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    }
22e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
23e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft,
24e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed                  SkScalar scale, const SkPaint& paint) {
25e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
26e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
27e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
28e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->save();
29e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
30e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->clipRect(r);
31e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->drawColor(SK_ColorWHITE);
32e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        fPath.setFillType(ft);
33e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->translate(r.centerX(), r.centerY());
34e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->scale(scale, scale);
35e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->translate(-r.centerX(), -r.centerY());
36e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->drawPath(fPath, paint);
37e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->restore();
38e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    }
39e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
40e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) {
41e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        showPath(canvas,   0,   0, SkPath::kWinding_FillType,
42e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed                 scale, paint);
43e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        showPath(canvas, 200,   0, SkPath::kEvenOdd_FillType,
44e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed                 scale, paint);
45e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        showPath(canvas,  00, 200, SkPath::kInverseWinding_FillType,
46e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed                 scale, paint);
47e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType,
48e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed                 scale, paint);
49e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    }
50e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
51e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    virtual void onDraw(SkCanvas* canvas) {
52e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->drawColor(0xFFDDDDDD);
53e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
54e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
55e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
56e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        SkPaint paint;
57e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        const SkScalar scale = SkIntToScalar(5)/4;
58e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
59e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        paint.setAntiAlias(false);
60e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
61e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        showFour(canvas, SK_Scalar1, paint);
62e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->translate(SkIntToScalar(450), 0);
63e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        showFour(canvas, scale, paint);
64e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
65e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        paint.setAntiAlias(true);
66e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
67e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->translate(SkIntToScalar(-450), SkIntToScalar(450));
68e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        showFour(canvas, SK_Scalar1, paint);
69e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        canvas->translate(SkIntToScalar(450), 0);
70e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed        showFour(canvas, scale, paint);
71e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    }
72e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
73e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedprivate:
74e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed    typedef GM INHERITED;
75e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed};
76e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
77e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed//////////////////////////////////////////////////////////////////////////////
78e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
79e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedstatic GM* MyFactory(void*) { return new FillTypeGM; }
80e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reedstatic GMRegistry reg(MyFactory);
81e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
82e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed}
83e32706edd70b0f847fe4d124a195cd2927dc8021Mike Reed
84