blob: e084af220dd02494047a946ab909651cb77b18fb [file] [log] [blame]
senorblanco@chromium.org129b8e32011-06-15 17:52:09 +00001
2#include "SampleCode.h"
3#include "SkView.h"
4#include "SkCanvas.h"
5#include "SkGradientShader.h"
6#include "SkGraphics.h"
7#include "SkImageDecoder.h"
8#include "SkPath.h"
9#include "SkRegion.h"
10#include "SkShader.h"
11#include "SkUtils.h"
12#include "SkXfermode.h"
13#include "SkColorPriv.h"
14#include "SkColorFilter.h"
15#include "SkParsePath.h"
16#include "SkTime.h"
17#include "SkTypeface.h"
18
19#include "SkGeometry.h"
20
21class ConcavePathView : public SampleView {
22public:
23 ConcavePathView() {}
24
25protected:
26 // overrides from SkEventSink
27 virtual bool onQuery(SkEvent* evt) {
28 if (SampleCode::TitleQ(*evt)) {
29 SampleCode::TitleR(evt, "ConcavePaths");
30 return true;
31 }
32 return this->INHERITED::onQuery(evt);
33 }
34
35 virtual void onDrawContent(SkCanvas* canvas) {
36 SkPaint paint;
37
38 paint.setAntiAlias(true);
39 paint.setStyle(SkPaint::kFill_Style);
40
41 // Concave test
42 if (1) {
43 SkPath path;
44 canvas->translate(0, 0);
45 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
46 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
47 path.lineTo(SkIntToScalar(30), SkIntToScalar(30));
48 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
49 canvas->drawPath(path, paint);
50 }
51 // Reverse concave test
52 if (1) {
53 SkPath path;
54 canvas->save();
55 canvas->translate(100, 0);
56 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
57 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
58 path.lineTo(SkIntToScalar(30), SkIntToScalar(30));
59 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
60 canvas->drawPath(path, paint);
61 canvas->restore();
62 }
63 // Bowtie (intersection)
64 if (1) {
65 SkPath path;
66 canvas->save();
67 canvas->translate(200, 0);
68 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
69 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
70 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
71 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
72 canvas->drawPath(path, paint);
73 canvas->restore();
74 }
75 // "fake" bowtie (concave, but no intersection)
76 if (1) {
77 SkPath path;
78 canvas->save();
79 canvas->translate(300, 0);
80 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
81 path.lineTo(SkIntToScalar(50), SkIntToScalar(40));
82 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
83 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
84 path.lineTo(SkIntToScalar(50), SkIntToScalar(60));
85 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
86 canvas->drawPath(path, paint);
87 canvas->restore();
88 }
89 // Fish test (intersection/concave)
90 if (1) {
91 SkPath path;
92 canvas->save();
93 canvas->translate(0, 100);
94 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
95 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
96 path.lineTo(SkIntToScalar(70), SkIntToScalar(50));
97 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
98 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
99 path.lineTo(SkIntToScalar(0), SkIntToScalar(50));
100 canvas->drawPath(path, paint);
101 canvas->restore();
102 }
103 // Collinear test
104 if (1) {
105 SkPath path;
106 canvas->save();
107 canvas->translate(100, 100);
108 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
109 path.lineTo(SkIntToScalar(50), SkIntToScalar(20));
110 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
111 path.lineTo(SkIntToScalar(50), SkIntToScalar(80));
112 canvas->drawPath(path, paint);
113 canvas->restore();
114 }
115 // Hole test
116 if (1) {
117 SkPath path;
118 canvas->save();
119 canvas->translate(200, 100);
120 path.moveTo(SkIntToScalar(20), SkIntToScalar(20));
121 path.lineTo(SkIntToScalar(80), SkIntToScalar(20));
122 path.lineTo(SkIntToScalar(80), SkIntToScalar(80));
123 path.lineTo(SkIntToScalar(20), SkIntToScalar(80));
124 path.moveTo(SkIntToScalar(30), SkIntToScalar(30));
125 path.lineTo(SkIntToScalar(30), SkIntToScalar(70));
126 path.lineTo(SkIntToScalar(70), SkIntToScalar(70));
127 path.lineTo(SkIntToScalar(70), SkIntToScalar(30));
128 canvas->drawPath(path, paint);
129 canvas->restore();
130 }
131 }
132
133 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
134 this->inval(NULL);
135 return this->INHERITED::onFindClickHandler(x, y);
136 }
137
138private:
139 typedef SampleView INHERITED;
140};
141
142//////////////////////////////////////////////////////////////////////////////
143
144static SkView* MyFactory() { return new ConcavePathView; }
145static SkViewRegister reg(MyFactory);
146