1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
8129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SampleCode.h"
9129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkView.h"
10129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkCanvas.h"
11129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkGradientShader.h"
12129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkGraphics.h"
13129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkPath.h"
14129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkRegion.h"
15129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkShader.h"
16129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkUtils.h"
17129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkColorPriv.h"
18129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkColorFilter.h"
19129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkParsePath.h"
20129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkTime.h"
21129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkTypeface.h"
22129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org
23129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkGeometry.h"
24129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org
25129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgclass ConcavePathView : public SampleView {
26129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgpublic:
27ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    ConcavePathView() {}
28ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
29129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgprotected:
30129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org    // overrides from SkEventSink
31129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org    virtual bool onQuery(SkEvent* evt) {
32129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        if (SampleCode::TitleQ(*evt)) {
33129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            SampleCode::TitleR(evt, "ConcavePaths");
34129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            return true;
35129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        }
36129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        return this->INHERITED::onQuery(evt);
37129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org    }
38ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
39ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    virtual void onDrawContent(SkCanvas* canvas) {
40129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        SkPaint paint;
41ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
42129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        paint.setAntiAlias(true);
43129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        paint.setStyle(SkPaint::kFill_Style);
44129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org
45129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        // Concave test
46129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        if (1) {
47129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            SkPath path;
48129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->translate(0, 0);
49129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
50129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
51129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(30), SkIntToScalar(30));
52129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
53129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->drawPath(path, paint);
54129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        }
55129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        // Reverse concave test
56129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        if (1) {
57129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            SkPath path;
58129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->save();
59129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->translate(100, 0);
60129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
61129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
62129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(30), SkIntToScalar(30));
63129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
64129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->drawPath(path, paint);
65129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->restore();
66129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        }
67129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        // Bowtie (intersection)
68129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        if (1) {
69129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            SkPath path;
70129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->save();
71129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->translate(200, 0);
72129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
73129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
74129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
75129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
76129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->drawPath(path, paint);
77129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->restore();
78129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        }
79129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        // "fake" bowtie (concave, but no intersection)
80129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        if (1) {
81129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            SkPath path;
82129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->save();
83129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->translate(300, 0);
84129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
85129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(50), SkIntToScalar(40));
86129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
87129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
88129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(50), SkIntToScalar(60));
89129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
90129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->drawPath(path, paint);
91129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->restore();
92129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        }
93129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        // Fish test (intersection/concave)
94129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        if (1) {
95129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            SkPath path;
96129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->save();
97129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->translate(0, 100);
98129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
99129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
100129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(70), SkIntToScalar(50));
101129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
102129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
103129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(0), SkIntToScalar(50));
104129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->drawPath(path, paint);
105129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->restore();
106129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        }
107129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        // Collinear test
108129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        if (1) {
109129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            SkPath path;
110129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->save();
111129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->translate(100, 100);
112129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
113129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(50), SkIntToScalar(20));
114129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
115129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(50), SkIntToScalar(80));
116129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->drawPath(path, paint);
117129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->restore();
118129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        }
119129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        // Hole test
120129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        if (1) {
121129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            SkPath path;
122129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->save();
123129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->translate(200, 100);
124129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
125129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
126129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
127129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
128129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.moveTo(SkIntToScalar(30), SkIntToScalar(30));
129129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(30), SkIntToScalar(70));
130129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(70), SkIntToScalar(70));
131129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            path.lineTo(SkIntToScalar(70), SkIntToScalar(30));
132129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->drawPath(path, paint);
133129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org            canvas->restore();
134129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org        }
135129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org    }
136ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
137129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgprivate:
138129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org    typedef SampleView INHERITED;
139129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org};
140129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org
141129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org//////////////////////////////////////////////////////////////////////////////
142129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org
143129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgstatic SkView* MyFactory() { return new ConcavePathView; }
144129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgstatic SkViewRegister reg(MyFactory);
145