OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "SampleCode.h" | 9 #include "SampleCode.h" |
10 #include "SkView.h" | 10 #include "SkView.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
48 // Concave test | 48 // Concave test |
49 if (1) { | 49 if (1) { |
50 SkPath path; | 50 SkPath path; |
51 canvas->translate(0, 0); | 51 canvas->translate(0, 0); |
52 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | 52 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); |
53 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | 53 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); |
54 path.lineTo(SkIntToScalar(30), SkIntToScalar(30)); | 54 path.lineTo(SkIntToScalar(30), SkIntToScalar(30)); |
55 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); | 55 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); |
56 canvas->drawPath(path, paint); | 56 canvas->drawPath(path, paint); |
57 } | 57 } |
58 | |
58 // Reverse concave test | 59 // Reverse concave test |
59 if (1) { | 60 if (1) { |
60 SkPath path; | 61 SkPath path; |
61 canvas->save(); | 62 canvas->save(); |
62 canvas->translate(100, 0); | 63 canvas->translate(100, 0); |
63 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | 64 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); |
64 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); | 65 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); |
65 path.lineTo(SkIntToScalar(30), SkIntToScalar(30)); | 66 path.lineTo(SkIntToScalar(30), SkIntToScalar(30)); |
66 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | 67 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); |
67 canvas->drawPath(path, paint); | 68 canvas->drawPath(path, paint); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
128 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | 129 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); |
129 path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); | 130 path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); |
130 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); | 131 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); |
131 path.moveTo(SkIntToScalar(30), SkIntToScalar(30)); | 132 path.moveTo(SkIntToScalar(30), SkIntToScalar(30)); |
132 path.lineTo(SkIntToScalar(30), SkIntToScalar(70)); | 133 path.lineTo(SkIntToScalar(30), SkIntToScalar(70)); |
133 path.lineTo(SkIntToScalar(70), SkIntToScalar(70)); | 134 path.lineTo(SkIntToScalar(70), SkIntToScalar(70)); |
134 path.lineTo(SkIntToScalar(70), SkIntToScalar(30)); | 135 path.lineTo(SkIntToScalar(70), SkIntToScalar(30)); |
135 canvas->drawPath(path, paint); | 136 canvas->drawPath(path, paint); |
136 canvas->restore(); | 137 canvas->restore(); |
137 } | 138 } |
139 // Star test (self-intersecting) | |
bsalomon
2015/01/20 15:12:24
should we make this guy a GM instead of a Sample?
Stephen White
2015/01/20 18:54:15
Done.
| |
140 if (1) { | |
141 SkPath path; | |
142 canvas->save(); | |
143 canvas->translate(300, 100); | |
144 path.moveTo(30, 20); | |
145 path.lineTo(50, 80); | |
146 path.lineTo(70, 20); | |
147 path.lineTo(20, 57); | |
148 path.lineTo(80, 57); | |
149 path.close(); | |
150 canvas->drawPath(path, paint); | |
151 canvas->restore(); | |
152 } | |
153 // Stairstep with repeated vert (intersection) | |
154 if (1) { | |
155 SkPath path; | |
156 canvas->save(); | |
157 canvas->translate(0, 200); | |
158 path.moveTo(SkIntToScalar(50), SkIntToScalar(50)); | |
159 path.lineTo(SkIntToScalar(50), SkIntToScalar(20)); | |
160 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | |
161 path.lineTo(SkIntToScalar(50), SkIntToScalar(50)); | |
162 path.lineTo(SkIntToScalar(20), SkIntToScalar(50)); | |
163 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); | |
164 canvas->drawPath(path, paint); | |
165 canvas->restore(); | |
166 } | |
167 // Stairstep intersection without repeated vert. | |
168 if (1) { | |
169 SkPath path; | |
170 canvas->save(); | |
171 canvas->translate(100, 200); | |
172 path.moveTo(20, 60); | |
173 path.lineTo(35, 80); | |
174 path.lineTo(50, 60); | |
175 path.lineTo(65, 80); | |
176 path.lineTo(80, 60); | |
177 canvas->drawPath(path, paint); | |
178 canvas->restore(); | |
179 } | |
180 // Overlapping segments | |
181 if (1) { | |
182 SkPath path; | |
183 canvas->save(); | |
184 canvas->translate(200, 200); | |
185 path.moveTo(SkIntToScalar(20), SkIntToScalar(80)); | |
186 path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); | |
187 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | |
188 path.lineTo(SkIntToScalar(80), SkIntToScalar(30)); | |
189 canvas->drawPath(path, paint); | |
190 canvas->restore(); | |
191 } | |
192 // Monotone test 1 (point in the middle) | |
193 if (1) { | |
194 SkPath path; | |
195 canvas->save(); | |
196 canvas->translate(0, 300); | |
197 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | |
198 path.quadTo(SkIntToScalar(20), SkIntToScalar(50), | |
199 SkIntToScalar(80), SkIntToScalar(50)); | |
200 path.quadTo(SkIntToScalar(20), SkIntToScalar(50), | |
201 SkIntToScalar(20), SkIntToScalar(80)); | |
202 canvas->drawPath(path, paint); | |
203 canvas->restore(); | |
204 } | |
205 // Monotone test 2 (point at the top) | |
206 if (1) { | |
207 SkPath path; | |
208 canvas->save(); | |
209 canvas->translate(100, 300); | |
210 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | |
211 path.lineTo(SkIntToScalar(80), SkIntToScalar(30)); | |
212 path.quadTo(SkIntToScalar(20), SkIntToScalar(20), | |
213 SkIntToScalar(20), SkIntToScalar(80)); | |
214 canvas->drawPath(path, paint); | |
215 canvas->restore(); | |
216 } | |
217 // Monotone test 3 (point at the bottom) | |
218 if (1) { | |
219 SkPath path; | |
220 canvas->save(); | |
221 canvas->translate(200, 300); | |
222 path.moveTo(SkIntToScalar(20), SkIntToScalar(80)); | |
223 path.lineTo(SkIntToScalar(80), SkIntToScalar(70)); | |
224 path.quadTo(SkIntToScalar(20), SkIntToScalar(80), | |
225 SkIntToScalar(20), SkIntToScalar(20)); | |
226 canvas->drawPath(path, paint); | |
227 canvas->restore(); | |
228 } | |
229 // Monotone test 4 (merging of two monotones) | |
230 if (1) { | |
231 SkPath path; | |
232 canvas->save(); | |
233 canvas->translate(300, 300); | |
234 path.moveTo(80, 25); | |
235 path.lineTo(50, 39); | |
236 path.lineTo(20, 25); | |
237 path.lineTo(40, 45); | |
238 path.lineTo(70, 50); | |
239 path.lineTo(80, 80); | |
240 canvas->drawPath(path, paint); | |
241 canvas->restore(); | |
242 } | |
243 // Monotone test 5 (aborted merging of two monotones) | |
244 if (1) { | |
245 SkPath path; | |
246 canvas->save(); | |
247 canvas->translate(0, 400); | |
248 path.moveTo(50, 20); | |
249 path.lineTo(80, 80); | |
250 path.lineTo(50, 50); | |
251 path.lineTo(20, 80); | |
252 canvas->drawPath(path, paint); | |
253 canvas->restore(); | |
254 } | |
255 // Degenerate intersection test | |
256 if (1) { | |
257 SkPath path; | |
258 canvas->save(); | |
259 canvas->translate(100, 400); | |
260 path.moveTo(50, 20); | |
261 path.lineTo(70, 30); | |
262 path.lineTo(20, 50); | |
263 path.moveTo(50, 20); | |
264 path.lineTo(80, 80); | |
265 path.lineTo(50, 80); | |
266 canvas->drawPath(path, paint); | |
267 canvas->restore(); | |
268 } | |
269 // Two triangles with a coincident edge. | |
270 if (1) { | |
271 SkPath path; | |
272 canvas->save(); | |
273 canvas->translate(200, 400); | |
274 | |
275 path.moveTo(80, 20); | |
276 path.lineTo(80, 80); | |
277 path.lineTo(20, 80); | |
278 | |
279 path.moveTo(20, 20); | |
280 path.lineTo(80, 80); | |
281 path.lineTo(20, 80); | |
282 | |
283 canvas->drawPath(path, paint); | |
284 canvas->restore(); | |
285 } | |
286 // Bowtie with a coincident vertex. | |
287 if (1) { | |
288 SkPath path; | |
289 canvas->save(); | |
290 canvas->translate(300, 400); | |
291 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | |
292 path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); | |
293 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | |
294 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); | |
295 path.moveTo(SkIntToScalar(50), SkIntToScalar(50)); | |
296 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | |
297 path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); | |
298 canvas->drawPath(path, paint); | |
299 canvas->restore(); | |
300 } | |
301 // Coincident edges (big ones first, coincident vert on top). | |
302 if (1) { | |
303 SkPath path; | |
304 canvas->save(); | |
305 canvas->translate(0, 500); | |
306 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | |
307 path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); | |
308 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); | |
309 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | |
310 path.lineTo(SkIntToScalar(50), SkIntToScalar(50)); | |
311 path.lineTo(SkIntToScalar(20), SkIntToScalar(50)); | |
312 canvas->drawPath(path, paint); | |
313 canvas->restore(); | |
314 } | |
315 // Coincident edges (small ones first, coincident vert on top). | |
316 if (1) { | |
317 SkPath path; | |
318 canvas->save(); | |
319 canvas->translate(100, 500); | |
320 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | |
321 path.lineTo(SkIntToScalar(50), SkIntToScalar(50)); | |
322 path.lineTo(SkIntToScalar(20), SkIntToScalar(50)); | |
323 path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); | |
324 path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); | |
325 path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); | |
326 canvas->drawPath(path, paint); | |
327 canvas->restore(); | |
328 } | |
329 // Coincident edges (small ones first, coincident vert on bottom). | |
330 if (1) { | |
331 SkPath path; | |
332 canvas->save(); | |
333 canvas->translate(200, 500); | |
334 path.moveTo(SkIntToScalar(20), SkIntToScalar(80)); | |
335 path.lineTo(SkIntToScalar(20), SkIntToScalar(50)); | |
336 path.lineTo(SkIntToScalar(50), SkIntToScalar(50)); | |
337 path.moveTo(SkIntToScalar(20), SkIntToScalar(80)); | |
338 path.lineTo(SkIntToScalar(20), SkIntToScalar(20)); | |
339 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | |
340 canvas->drawPath(path, paint); | |
341 canvas->restore(); | |
342 } | |
343 // Coincident edges (big ones first, coincident vert on bottom). | |
344 if (1) { | |
345 SkPath path; | |
346 canvas->save(); | |
347 canvas->translate(300, 500); | |
348 path.moveTo(SkIntToScalar(20), SkIntToScalar(80)); | |
349 path.lineTo(SkIntToScalar(20), SkIntToScalar(20)); | |
350 path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); | |
351 path.moveTo(SkIntToScalar(20), SkIntToScalar(80)); | |
352 path.lineTo(SkIntToScalar(20), SkIntToScalar(50)); | |
353 path.lineTo(SkIntToScalar(50), SkIntToScalar(50)); | |
354 canvas->drawPath(path, paint); | |
355 canvas->restore(); | |
356 } | |
138 } | 357 } |
139 | 358 |
140 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, | 359 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, |
141 unsigned modi) { | 360 unsigned modi) { |
142 this->inval(NULL); | 361 this->inval(NULL); |
143 return this->INHERITED::onFindClickHandler(x, y, modi); | 362 return this->INHERITED::onFindClickHandler(x, y, modi); |
144 } | 363 } |
145 | 364 |
146 private: | 365 private: |
147 typedef SampleView INHERITED; | 366 typedef SampleView INHERITED; |
148 }; | 367 }; |
149 | 368 |
150 ////////////////////////////////////////////////////////////////////////////// | 369 ////////////////////////////////////////////////////////////////////////////// |
151 | 370 |
152 static SkView* MyFactory() { return new ConcavePathView; } | 371 static SkView* MyFactory() { return new ConcavePathView; } |
153 static SkViewRegister reg(MyFactory); | 372 static SkViewRegister reg(MyFactory); |
OLD | NEW |