180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2011 Google Inc.
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "gm.h"
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querunamespace skiagm {
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass FillTypeGM : public GM {
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkPath fPath;
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    FillTypeGM() {
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        this->setBGColor(0xFFDDDDDD);
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void makePath() {
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        if (fPath.isEmpty()) {
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            const SkScalar radius = SkIntToScalar(45);
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius);
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru            fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius);
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        }
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprotected:
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual SkString onShortName() {
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return SkString("filltypes");
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual SkISize onISize() {
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        return make_isize(835, 840);
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft,
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                  SkScalar scale, const SkPaint& paint) {
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->save();
4280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
4380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->clipRect(r);
4480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->drawColor(SK_ColorWHITE);
4580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        fPath.setFillType(ft);
4680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->translate(r.centerX(), r.centerY());
4780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->scale(scale, scale);
4880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->translate(-r.centerX(), -r.centerY());
4980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->drawPath(fPath, paint);
5080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->restore();
5180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
5280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
5380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) {
5480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        showPath(canvas,   0,   0, SkPath::kWinding_FillType,
5580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                 scale, paint);
5680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        showPath(canvas, 200,   0, SkPath::kEvenOdd_FillType,
5780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                 scale, paint);
5880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        showPath(canvas,  00, 200, SkPath::kInverseWinding_FillType,
5980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                 scale, paint);
6080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType,
6180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                 scale, paint);
6280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
6380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    virtual void onDraw(SkCanvas* canvas) {
6580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        this->makePath();
6680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
6880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
6980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        SkPaint paint;
7080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        const SkScalar scale = SkIntToScalar(5)/4;
7180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        paint.setAntiAlias(false);
7380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        showFour(canvas, SK_Scalar1, paint);
7580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->translate(SkIntToScalar(450), 0);
7680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        showFour(canvas, scale, paint);
7780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
7880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        paint.setAntiAlias(true);
7980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
8080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->translate(SkIntToScalar(-450), SkIntToScalar(450));
8180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        showFour(canvas, SK_Scalar1, paint);
8280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        canvas->translate(SkIntToScalar(450), 0);
8380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru        showFour(canvas, scale, paint);
8480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    }
8580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
8680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
8780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    typedef GM INHERITED;
8880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
8980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru//////////////////////////////////////////////////////////////////////////////
9180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic GM* MyFactory(void*) { return new FillTypeGM; }
9380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querustatic GMRegistry reg(MyFactory);
9480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
9580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru}
96