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 */
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SampleCode.h"
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h"
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h"
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCornerPathEffect.h"
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCullPoints.h"
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkGradientShader.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPath.h"
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkShader.h"
178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkUtils.h"
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
19961ddb04a0a7aba843032d829ab867518e52559ereed@google.comclass FillTypeView : public SampleView {
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkPath fPath;
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
22ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    FillTypeView() {
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        const SkScalar radius = SkIntToScalar(45);
248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius);
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius);
26961ddb04a0a7aba843032d829ab867518e52559ereed@google.com
27961ddb04a0a7aba843032d829ab867518e52559ereed@google.com        this->setBGColor(0xFFDDDDDD);
288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
29ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    // overrides from SkEventSink
328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    virtual bool onQuery(SkEvent* evt) {
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        if (SampleCode::TitleQ(*evt)) {
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            SampleCode::TitleR(evt, "FillType");
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com            return true;
368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        }
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        return this->INHERITED::onQuery(evt);
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
39ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft,
418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                  SkScalar scale, const SkPaint& paint) {
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) };
448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->save();
468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->clipRect(r);
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->drawColor(SK_ColorWHITE);
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        fPath.setFillType(ft);
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->translate(r.centerX(), r.centerY());
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->scale(scale, scale);
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->translate(-r.centerX(), -r.centerY());
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->drawPath(fPath, paint);
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->restore();
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
56ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) {
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        showPath(canvas,   0,   0, SkPath::kWinding_FillType,
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                 scale, paint);
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        showPath(canvas, 200,   0, SkPath::kEvenOdd_FillType,
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                 scale, paint);
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        showPath(canvas,  00, 200, SkPath::kInverseWinding_FillType,
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                 scale, paint);
648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType,
658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                 scale, paint);
668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
67ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
68961ddb04a0a7aba843032d829ab867518e52559ereed@google.com    virtual void onDrawContent(SkCanvas* canvas) {
698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
70ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        SkPaint paint;
728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        const SkScalar scale = SkIntToScalar(5)/4;
738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        paint.setAntiAlias(false);
75b602b8e5334edc0bfcdf086c2ea58e2b5d5f1f3breed@android.com        paint.setColor(0x8000FF00);
768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        showFour(canvas, SK_Scalar1, paint);
788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->translate(SkIntToScalar(450), 0);
798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        showFour(canvas, scale, paint);
808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        paint.setAntiAlias(true);
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->translate(SkIntToScalar(-450), SkIntToScalar(450));
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        showFour(canvas, SK_Scalar1, paint);
858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        canvas->translate(SkIntToScalar(450), 0);
868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com        showFour(canvas, scale, paint);
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    }
88ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
90961ddb04a0a7aba843032d829ab867518e52559ereed@google.com    typedef SampleView INHERITED;
918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com//////////////////////////////////////////////////////////////////////////////
948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkView* MyFactory() { return new FillTypeView; }
968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkViewRegister reg(MyFactory);
97