blob: 73448b41a8974a22dffc1c6f5c14c6ba4d5a804d [file] [log] [blame]
caryclark@google.com752b60e2012-03-22 21:11:17 +00001<html>
2<head>
3<div style="height:0">
caryclark@google.comfa0588f2012-04-26 21:01:06 +00004
5<div id="testSimplifyQuadratic1">
6 SkPath path, out;
7 path.moveTo(0, 0);
8 path.quadTo(1, 0, 1, 1);
9 path.close();
10 path.moveTo(1, 0);
11 path.quadTo(0, 0, 0, 1);
12 path.close();
13 testSimplify(path, true, out, bitmap);
14}
caryclark@google.com752b60e2012-03-22 21:11:17 +000015</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000016
17<div id="testSimplifyQuadratic2">
18 SkPath path, out;
19 path.moveTo(0, 0);
20 path.quadTo(20, 0, 20, 20);
21 path.close();
22 path.moveTo(20, 0);
23 path.quadTo(0, 0, 0, 20);
24 path.close();
25 testSimplify(path, true, out, bitmap);
26}
caryclark@google.comd88e0892012-03-27 13:23:51 +000027</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000028
29<div id="testSimplifyQuadratic3">
30 SkPath path, out;
31 path.moveTo(0, 0);
32 path.quadTo(20, 0, 20, 20);
33 path.close();
34 path.moveTo(0, 20);
35 path.quadTo(0, 0, 20, 0);
36 path.close();
37 testSimplify(path, true, out, bitmap);
38}
caryclark@google.comd88e0892012-03-27 13:23:51 +000039</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000040
41<div id="testSimplifyQuadratic4">
42 SkPath path, out;
43 path.moveTo(0, 20);
44 path.quadTo(20, 0, 40, 20);
45 path.close();
46 path.moveTo(40, 10);
47 path.quadTo(20, 30, 0, 10);
48 path.close();
49 testSimplify(path, true, out, bitmap);
50 drawAsciiPaths(path, out, true);
51}
caryclark@google.comd88e0892012-03-27 13:23:51 +000052</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000053
54<div id="testSimplifyQuadratic5">
55 SkPath path, out;
56 path.moveTo(0, 0);
57 path.quadTo(0, 0, 0, 0);
58 path.lineTo(0, 0);
59 path.close();
60 path.moveTo(0, 0);
61 path.lineTo(0, 0);
62 path.quadTo(0, 0, 0, 1);
63 path.close();
64 testSimplify(path, true, out, bitmap);
65 drawAsciiPaths(path, out, true);
66}
caryclark@google.comfb173422012-04-10 18:28:55 +000067</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000068
69<div id="testSimplifyQuadratic6">
70 SkPath path, out;
71 path.moveTo(0, 0);
72 path.quadTo(0, 0, 0, 0);
73 path.lineTo(1, 0);
74 path.close();
75 path.moveTo(0, 0);
76 path.lineTo(0, 0);
77 path.quadTo(1, 0, 0, 1);
78 path.close();
79 testSimplify(path, true, out, bitmap);
80 drawAsciiPaths(path, out, true);
81}
caryclark@google.comfb173422012-04-10 18:28:55 +000082</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000083
84<div id="testSimplifyQuadratic7">
85 SkPath path, out;
86 path.moveTo(0, 0);
87 path.quadTo(0, 0, 0, 0);
88 path.lineTo(0, 1);
89 path.close();
90 path.moveTo(0, 0);
91 path.lineTo(0, 0);
92 path.quadTo(1, 0, 0, 2);
93 path.close();
94 testSimplify(path, true, out, bitmap);
95 drawAsciiPaths(path, out, true);
96}
97</div>
98
99<div id="testSimplifyQuadratic8">
100 SkPath path, out;
101 path.moveTo(0, 0);
102 path.quadTo(0, 0, 0, 0);
103 path.lineTo(0, 0);
104 path.close();
105 path.moveTo(0, 0);
106 path.lineTo(0, 0);
107 path.quadTo(1, 0, 0, 2);
108 path.close();
109 testSimplify(path, true, out, bitmap);
110 drawAsciiPaths(path, out, true);
111}
112</div>
113
114<div id="testSimplifyQuadratic9">
115 SkPath path, out;
116 path.moveTo(0, 0);
117 path.quadTo(0, 0, 0, 0);
118 path.lineTo(1, 1);
119 path.close();
120 path.moveTo(0, 0);
121 path.lineTo(0, 0);
122 path.quadTo(1, 0, 2, 2);
123 path.close();
124 testSimplify(path, true, out, bitmap);
125 drawAsciiPaths(path, out, true);
126}
127</div>
128
129<div id="testSimplifyQuadratic10">
130 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000131 path.moveTo(0, 0);
132 path.quadTo(0, 0, 0, 0);
133 path.lineTo(0, 0);
134 path.close();
135 path.moveTo(0, 0);
136 path.lineTo(0, 1);
137 path.quadTo(1, 1, 1, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000138 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000139 testSimplify(path, true, out, bitmap);
140 drawAsciiPaths(path, out, true);
141}
caryclark@google.com78e17132012-04-17 11:40:34 +0000142</div>
143
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000144<div id="testSimplifyQuadratic11">
145 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000146 path.moveTo(0, 0);
147 path.quadTo(0, 0, 0, 0);
148 path.lineTo(0, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000149 path.close();
150 path.moveTo(0, 0);
151 path.lineTo(2, 1);
152 path.quadTo(2, 2, 3, 3);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000153 path.close();
154 testSimplify(path, true, out, bitmap);
155 drawAsciiPaths(path, out, true);
156}
157</div>
158
159<div id="testSimplifyQuadratic12">
160 SkPath path, out;
161 path.moveTo(0, 0);
162 path.lineTo(0, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000163 path.lineTo(0, 0);
164 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000165 path.moveTo(3, 0);
166 path.quadTo(1, 1, 0, 2);
167 path.lineTo(3, 0);
168 path.close();
169 testSimplify(path, true, out, bitmap);
170 drawAsciiPaths(path, out, true);
171}
caryclark@google.com78e17132012-04-17 11:40:34 +0000172</div>
173
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000174<div id="testSimplifyQuadratic13">
175 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000176path.moveTo(0, 0);
177path.quadTo(0, 0, 1, 0);
178path.lineTo(1, 1);
179path.lineTo(0, 0);
180path.close();
181path.moveTo(0, 0);
182path.quadTo(3, 0, 1, 1);
183path.lineTo(0, 0);
184path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000185 testSimplify(path, true, out, bitmap);
186 drawAsciiPaths(path, out, true);
187}
caryclark@google.com78e17132012-04-17 11:40:34 +0000188</div>
189
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000190<div id="testSimplifyQuadratic14">
191 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000192 path.moveTo(0, 0);
193 path.quadTo(0, 0, 0, 0);
194 path.lineTo(1, 1);
caryclark@google.com78e17132012-04-17 11:40:34 +0000195 path.close();
196 path.moveTo(0, 0);
197 path.lineTo(0, 0);
198 path.quadTo(0, 1, 2, 1);
caryclark@google.com78e17132012-04-17 11:40:34 +0000199 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000200 testSimplify(path, true, out, bitmap);
201 drawAsciiPaths(path, out, true);
202}
caryclark@google.com78e17132012-04-17 11:40:34 +0000203</div>
204
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000205<div id="testSimplifyQuadratic15">
206 SkPath path, out;
207 path.moveTo(0, 0);
208 path.quadTo(0, 0, 1, 3);
209 path.lineTo(3, 3);
210 path.close();
211 path.moveTo(0, 1);
212 path.lineTo(1, 1);
213 path.quadTo(0, 3, 3, 3);
214 path.close();
215 testSimplify(path, true, out, bitmap);
216 drawAsciiPaths(path, out, true);
217}
218</div>
219
220<div id="testSimplifyQuadratic16">
221 SkPath path, out;
222 path.moveTo(0, 0);
223 path.quadTo(0, 0, 0, 0);
224 path.lineTo(0, 1);
225 path.close();
226 path.moveTo(0, 0);
227 path.lineTo(0, 0);
228 path.quadTo(1, 0, 0, 1);
229 path.close();
230 testSimplify(path, true, out, bitmap);
231 drawAsciiPaths(path, out, true);
232}
233</div>
234
235<div id="testSimplifyQuadratic17">
236 SkPath path, out;
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000237 path.moveTo(8, 8);
238 path.quadTo(10, 10, 8, -10);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000239 path.close();
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000240 path.moveTo(8, 8);
241 path.quadTo(12, 12, 14, 4);
242 path.close();
243 path.moveTo(8, 8);
244 path.quadTo(9, 9, 10, 8);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000245 path.close();
246 testSimplify(path, true, out, bitmap);
247 drawAsciiPaths(path, out, true);
248}
caryclark@google.com78e17132012-04-17 11:40:34 +0000249</div>
caryclark@google.comfb173422012-04-10 18:28:55 +0000250
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000251<div id="testSimplifyQuadratic18">
252 SkPath path, out;
253 path.moveTo(8.0000000000000071, 8.0000000000000071);
254 path.quadTo(8.7289570079366854, 8.7289570079366889, 9.3914917259458743, 9.0593802763083691);
255 path.close();
256 path.moveTo(8.0000000000000142, 8.0000000000000142);
257 path.quadTo(8.1250000000000107, 8.1250000000000071, 8.2500000000000071, 8.2187500000000053);
258 path.close();
259 testSimplify(path, true, out, bitmap);
260 drawAsciiPaths(path, out, true);
261</div>
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000262
263<div id="testSimplifyQuadratic19">
264 SkPath path, simple;
265 path.moveTo(0,4);
266 path.lineTo(6,4);
267 path.lineTo(3,1);
268 path.close();
269 path.moveTo(2,3);
270 path.lineTo(3,2);
271 path.lineTo(4,3);
272 path.close();
273 testSimplifyx(path);
274</div>
275
276<div id="testSimplifyQuadratic20">
277 SkPath path, simple;
278 path.moveTo(0,4);
279 path.lineTo(6,4);
280 path.lineTo(3,1);
281 path.close();
282 path.moveTo(2,3);
283 path.lineTo(4,3);
284 path.lineTo(3,2);
285 path.close();
286 testSimplifyx(path);
287</div>
288
289<div id="testSimplifyQuadratic21">
290 SkPath path, simple;
291 path.moveTo(0,4);
292 path.lineTo(8,4);
293 path.lineTo(4,0);
294 path.close();
295 path.moveTo(2,2);
296 path.lineTo(3,3);
297 path.lineTo(4,2);
298 path.close();
299 testSimplifyx(path);
300</div>
301
302<div id="testLine6">
303 SkPath path, simple;
304 path.moveTo(0,0);
305 path.lineTo(4,0);
306 path.lineTo(2,2);
307 path.close();
308 path.moveTo(2,0);
309 path.lineTo(6,0);
310 path.lineTo(4,2);
311 path.close();
312 testSimplifyx(path);
313</div>
314
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000315<div id="testLine7">
316 SkPath path, simple;
317 path.moveTo(0,0);
318 path.lineTo(4,0);
319 path.lineTo(2,2);
320 path.close();
321 path.moveTo(6,0);
322 path.lineTo(2,0);
323 path.lineTo(4,2);
324 path.close();
325 testSimplifyx(path);
326</div>
327
caryclark@google.comcc905052012-07-25 20:59:42 +0000328<div id="testLine7b">
329 path.moveTo(0,0);
330 path.lineTo(4,0);
331 path.close();
332 path.moveTo(6,0);
333 path.lineTo(2,0);
334 path.lineTo(4,2);
335 path.close();
336</div>
337
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000338<div id="testLine9">
339 SkPath path, simple;
340 path.moveTo(0,4);
341 path.lineTo(4,4);
342 path.lineTo(2,2);
343 path.close();
344 path.moveTo(6,4);
345 path.lineTo(2,4);
346 path.lineTo(4,2);
347 path.close();
348 testSimplifyx(path);
349</div>
350
caryclark@google.come21cb182012-07-23 21:26:31 +0000351<div id="testLine12">
352 path.moveTo(0,4);
353 path.lineTo(6,4);
354 path.lineTo(3,1);
355 path.close();
356 path.moveTo(2,3);
357 path.lineTo(3,2);
358 path.lineTo(4,3);
359 path.close();
360</div>
361
362<div id="testLine13">
363 path.moveTo(6,4);
364 path.lineTo(0,4);
365 path.lineTo(3,1);
366 path.close();
367 path.moveTo(3,2);
368 path.lineTo(2,3);
369 path.lineTo(4,3);
370 path.close();
371</div>
372
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000373<div id="testLine17">
374 SkPath path, simple;
375 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
376 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
377 testSimplifyx(path);
378</div>
379
caryclark@google.com47580692012-07-23 12:14:49 +0000380<div id="testLine19">
381 SkPath path, simple;
382 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
383 path.addRect(12, 16, 21, 21, (SkPath::Direction) 0);
384 testSimplifyx(path);
385</div>
386
caryclark@google.comcc905052012-07-25 20:59:42 +0000387<div id="testLine22">
388 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
389 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
390</div>
391
caryclark@google.com47580692012-07-23 12:14:49 +0000392<div id="testLine24">
393 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
394 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
395</div>
396
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000397<div id="testLine28">
398 SkPath path, simple;
399 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
400 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
401 testSimplifyx(path);
402</div>
403
404<div id="testLine29">
405 SkPath path, simple;
406 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
407 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
408 testSimplifyx(path);
409</div>
410
411<div id="testLine30">
412 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
413 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
414 path.addRect(4, 4, 13, 13, (SkPath::Direction) 0);
415</div>
416
417<div id="testLine31">
418 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
419 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
420 path.addRect(0, 4, 9, 9, (SkPath::Direction) 0);
421</div>
422
423<div id="testLine32">
424 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
425 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
426 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
427</div>
428
caryclark@google.com9764cc62012-07-12 19:29:45 +0000429<div id="testLine33">
430 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
431 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
432 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
433</div>
434
caryclark@google.com210acaf2012-07-12 21:05:13 +0000435<div id="testLine34">
436 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
437 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
438 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
439</div>
440
441<div id="testLine35">
442 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
443 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
444 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
445</div>
446
caryclark@google.com0e08a192012-07-13 21:07:52 +0000447<div id="testLine36">
448 path.addRect(0, 10, 20, 20, (SkPath::Direction) 0);
449 path.addRect(6, 12, 18, 18, (SkPath::Direction) 0);
450 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
451</div>
452
caryclark@google.com47580692012-07-23 12:14:49 +0000453<div id="testLine37">
454 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
455 path.addRect(18, 24, 30, 30, (SkPath::Direction) 0);
456 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
457</div>
458
459<div id="testLine38">
460 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
461 path.addRect(6, 12, 18, 18, (SkPath::Direction) 0);
462 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
463</div>
464
465<div id="testLine39">
466 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
467 path.addRect(12, 6, 24, 24, (SkPath::Direction) 0);
468 path.addRect(12, 4, 21, 21, (SkPath::Direction) 0);
469</div>
470
471<div id="testLine40">
472 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
473 path.addRect(12, 18, 24, 24, (SkPath::Direction) 0);
474 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
475</div>
476
477<div id="testLine41">
478 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
479 path.addRect(18, 24, 30, 30, (SkPath::Direction) 0);
480 path.addRect(12, 0, 21, 21, (SkPath::Direction) 0);
481</div>
482
483<div id="testLine42">
484 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
485 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
486 path.addRect(8, 16, 17, 17, (SkPath::Direction) 0);
487</div>
488
489<div id="testLine43">
490 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
491 path.addRect(6, 24, 18, 18, (SkPath::Direction) 0);
492 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
493</div>
494
495<div id="testLine44">
496 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
497 path.addRect(18, 0, 30, 30, (SkPath::Direction) 0);
498 path.addRect(18, 32, 27, 36, (SkPath::Direction) 1);
499</div>
500
501<div id="testLine45">
502 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
503 path.addRect(18, 0, 30, 30, (SkPath::Direction) 0);
504 path.addRect(24, 32, 33, 36, (SkPath::Direction) 0);
505</div>
506
507<div id="testLine46">
508 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
509 path.addRect(24, 0, 36, 36, (SkPath::Direction) 0);
510 path.addRect(24, 32, 33, 36, (SkPath::Direction) 0);
511</div>
512
513<div id="testLine47">
514 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
515 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
516 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
517</div>
518
519<div id="testLine48">
520 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
521 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
522 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
523</div>
524
525<div id="testLine49">
526 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
527 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
528 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
529</div>
530
531<div id="testLine50">
532 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
533 path.addRect(24, 20, 36, 30, (SkPath::Direction) 0);
534</div>
535
536<div id="testLine51">
537 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
538 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
539 path.addRect(4, 12, 13, 13, (SkPath::Direction) 1);
540</div>
541
caryclark@google.come21cb182012-07-23 21:26:31 +0000542<div id="testLine52">
543 path.addRect(0, 30, 20, 20, (SkPath::Direction) 0);
544 path.addRect(6, 20, 18, 30, (SkPath::Direction) 0);
545 path.addRect(32, 0, 36, 41, (SkPath::Direction) 0);
546</div>
547
548<div id="testLine53">
549 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
550 path.addRect(12, 20, 24, 30, (SkPath::Direction) 0);
551 path.addRect(12, 32, 21, 36, (SkPath::Direction) 1);
552</div>
553
554<div id="testLine54">
555 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
556 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
557 path.addRect(8, 4, 17, 17, (SkPath::Direction) 1);
558</div>
559
560<div id="testLine55">
561 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
562 path.addRect(6, 6, 18, 18, (SkPath::Direction) 0);
563 path.addRect(4, 4, 13, 13, (SkPath::Direction) 1);
564</div>
565
caryclark@google.com18063442012-07-25 12:05:18 +0000566<div id="testLine56">
567 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
568 path.addRect(18, 20, 30, 30, (SkPath::Direction) 0);
569 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
570</div>
571
572<div id="testLine57">
573 path.addRect(20, 0, 40, 40, (SkPath::Direction) 0);
574 path.addRect(20, 0, 30, 40, (SkPath::Direction) 0);
575 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
576</div>
577
caryclark@google.comcc905052012-07-25 20:59:42 +0000578<div id="testLine58">
579 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
580 path.addRect(0, 0, 12, 12, (SkPath::Direction) 1);
581 path.addRect(0, 12, 9, 9, (SkPath::Direction) 1);
582</div>
583
584<div id="testLine59">
585 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
586 path.addRect(6, 6, 18, 18, (SkPath::Direction) 1);
587 path.addRect(4, 4, 13, 13, (SkPath::Direction) 1);
588</div>
589
caryclark@google.com752b60e2012-03-22 21:11:17 +0000590</div>
591
592<script type="text/javascript">
593
594var testDivs = [
caryclark@google.comcc905052012-07-25 20:59:42 +0000595 testLine59,
596 testLine58,
caryclark@google.com18063442012-07-25 12:05:18 +0000597 testLine57,
598 testLine56,
caryclark@google.come21cb182012-07-23 21:26:31 +0000599 testLine55,
600 testLine54,
601 testLine53,
602 testLine52,
caryclark@google.com47580692012-07-23 12:14:49 +0000603 testLine51,
604 testLine50,
605 testLine49,
606 testLine48,
607 testLine47,
608 testLine46,
609 testLine45,
610 testLine44,
611 testLine43,
612 testLine42,
613 testLine41,
614 testLine40,
615 testLine39,
616 testLine38,
617 testLine37,
caryclark@google.com0e08a192012-07-13 21:07:52 +0000618 testLine36,
caryclark@google.com210acaf2012-07-12 21:05:13 +0000619 testLine35,
620 testLine34,
caryclark@google.com9764cc62012-07-12 19:29:45 +0000621 testLine33,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000622 testLine30,
623 testLine32,
624 testLine31,
625 testLine29,
626 testLine28,
caryclark@google.com47580692012-07-23 12:14:49 +0000627 testLine24,
caryclark@google.comcc905052012-07-25 20:59:42 +0000628 testLine22,
caryclark@google.com47580692012-07-23 12:14:49 +0000629 testLine19,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000630 testLine17,
caryclark@google.come21cb182012-07-23 21:26:31 +0000631 testLine13,
632 testLine12,
caryclark@google.com47580692012-07-23 12:14:49 +0000633 testLine9,
caryclark@google.comcc905052012-07-25 20:59:42 +0000634 testLine7b,
caryclark@google.com47580692012-07-23 12:14:49 +0000635 testLine7,
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000636 testSimplifyQuadratic21,
637 testSimplifyQuadratic20,
638 testSimplifyQuadratic19,
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000639 testSimplifyQuadratic18,
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000640 testSimplifyQuadratic17,
641 testSimplifyQuadratic16,
642 testSimplifyQuadratic15,
643 testSimplifyQuadratic14,
644 testSimplifyQuadratic13,
645 testSimplifyQuadratic12,
646 testSimplifyQuadratic11,
647 testSimplifyQuadratic10,
648 testSimplifyQuadratic9,
649 testSimplifyQuadratic8,
650 testSimplifyQuadratic7,
651 testSimplifyQuadratic6,
652 testSimplifyQuadratic5,
653 testSimplifyQuadratic4,
654 testSimplifyQuadratic3,
655 testSimplifyQuadratic2,
656 testSimplifyQuadratic1,
caryclark@google.com752b60e2012-03-22 21:11:17 +0000657];
658
659var scale, columns, rows, xStart, yStart;
660
661var ticks = 0.1;
662var at_x = 13 + 0.5;
663var at_y = 13 + 0.5;
664
665var tests = [];
caryclark@google.com0e08a192012-07-13 21:07:52 +0000666var testTitles = [];
caryclark@google.com752b60e2012-03-22 21:11:17 +0000667var testIndex = 0;
668
669var ctx;
670
caryclark@google.com0e08a192012-07-13 21:07:52 +0000671function parse(test, title) {
caryclark@google.com752b60e2012-03-22 21:11:17 +0000672 var contours = [];
673 var contourStrs = test.split("path.close();");
caryclark@google.comd88e0892012-03-27 13:23:51 +0000674 var pattern = /-?\d+\.*\d*/g;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000675 for (var c in contourStrs) {
caryclark@google.comfb173422012-04-10 18:28:55 +0000676 var contour = contourStrs[c];
677 var verbStrs = contour.split("path");
678 var verbs = [];
679 for (var v in verbStrs) {
680 var verbStr = verbStrs[v];
681 var points = verbStr.match(pattern);
682 var pts = [];
683 for (var wd in points) {
684 var num = parseFloat(points[wd]);
685 if (isNaN(num)) continue;
686 pts.push(num);
687 }
688 if (pts.length > 0)
689 verbs.push(pts);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000690 }
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000691 if (verbs.length > 0) {
692 var lastIndex = verbs.length - 1;
693 var lastVerb = verbs[lastIndex];
694 var lastLen = lastVerb.length;
695 if (verbs[0][0] != lastVerb[lastLen - 2] && verbs[0][1] != lastVerb[lastLen - 1]) {
696 var lastPts = [];
697 lastPts.push(verbs[0][0]);
698 lastPts.push(verbs[0][1]);
699 verbs.push(lastPts);
700 }
caryclark@google.comfb173422012-04-10 18:28:55 +0000701 contours.push(verbs);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000702 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000703 }
caryclark@google.com0e08a192012-07-13 21:07:52 +0000704 if (contours.length > 0) {
caryclark@google.comfb173422012-04-10 18:28:55 +0000705 tests.push(contours);
caryclark@google.com0e08a192012-07-13 21:07:52 +0000706 testTitles.push(title);
707 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000708}
709
caryclark@google.com0e08a192012-07-13 21:07:52 +0000710function parseRect(test, title) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000711 var contours = [];
712 var rectStrs = test.split("path.addRect");
713 var pattern = /-?\d+\.*\d*/g;
714 for (var r in rectStrs) {
715 var rect = rectStrs[r];
716 var sideStrs = rect.match(pattern);
717 var sides = [];
718 for (var wd in sideStrs) {
719 var num = parseFloat(sideStrs[wd]);
720 if (isNaN(num)) continue;
721 sides.push(num);
722 }
723 if (sides.length == 0)
724 continue;
725 var verbs = [];
726 var topLeft = [];
727 topLeft.push(sides[0]); topLeft.push(sides[1]);
728 var topRight = [];
729 topRight.push(sides[2]); topRight.push(sides[1]);
730 var botLeft = [];
731 botLeft.push(sides[0]); botLeft.push(sides[3]);
732 var botRight = [];
733 botRight.push(sides[2]); botRight.push(sides[3]);
734 verbs.push(topLeft);
735 if (sides[4] == 0) {
736 verbs.push(topRight);
737 verbs.push(botRight);
738 verbs.push(botLeft);
739 } else {
740 verbs.push(botLeft);
741 verbs.push(botRight);
742 verbs.push(topRight);
743 }
744 verbs.push(topLeft);
745 contours.push(verbs);
746 }
caryclark@google.com0e08a192012-07-13 21:07:52 +0000747 if (contours.length > 0) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000748 tests.push(contours);
caryclark@google.com0e08a192012-07-13 21:07:52 +0000749 testTitles.push(title);
750 }
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000751}
752
caryclark@google.com752b60e2012-03-22 21:11:17 +0000753function init(test) {
754 var canvas = document.getElementById('canvas');
755 if (!canvas.getContext) return;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000756 canvas.width = document.width;
757 canvas.height = document.height;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000758 ctx = canvas.getContext('2d');
759 var xmin = Infinity;
760 var xmax = -Infinity;
761 var ymin = Infinity;
762 var ymax = -Infinity;
caryclark@google.comfb173422012-04-10 18:28:55 +0000763 for (var contours in test) {
764 var contour = test[contours];
765 for (var verbs in contour) {
766 var verb = contour[verbs];
767 var last = verb.length;
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000768 for (var idx = 0; idx < last; idx += 2) {
769 xmin = Math.min(xmin, verb[idx]);
770 xmax = Math.max(xmax, verb[idx]);
771 ymin = Math.min(ymin, verb[idx + 1]);
772 ymax = Math.max(ymax, verb[idx + 1]);
773 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000774 }
775 }
776 var subscale = 1;
777 while ((xmax - xmin) * subscale < 0.1 && (ymax - ymin) * subscale < 0.1) {
778 subscale *= 10;
779 }
780 columns = Math.ceil(xmax) - Math.floor(xmin) + 1;
781 rows = Math.ceil(ymax) - Math.floor(ymin) + 1;
782 xStart = Math.floor(xmin);
783 yStart = Math.floor(ymin);
784 var hscale = ctx.canvas.width / columns / ticks;
785 var vscale = ctx.canvas.height / rows / ticks;
786 scale = Math.floor(Math.min(hscale, vscale)) * subscale;
787}
788
789function drawPoint(px, py, xoffset, yoffset, unit) {
caryclark@google.comd88e0892012-03-27 13:23:51 +0000790 var label = px.toFixed(3) + ", " + py.toFixed(3);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000791 var _px = px * unit + xoffset;
792 var _py = py * unit + yoffset;
793 ctx.beginPath();
794 ctx.arc(_px, _py, 3, 0, Math.PI*2, true);
795 ctx.closePath();
796 ctx.fill();
797 ctx.fillText(label, _px + 5, _py);
798}
799
caryclark@google.com0e08a192012-07-13 21:07:52 +0000800function draw(test, title, _at_x, _at_y, scale) {
801 ctx.fillStyle = "rgba(0,0,0, 0.1)";
802 ctx.font = "normal 50px Arial";
803 ctx.fillText(title, 50, 50);
804 ctx.font = "normal 10px Arial";
805
caryclark@google.com752b60e2012-03-22 21:11:17 +0000806 var unit = scale * ticks;
807 ctx.lineWidth = 1;
808 var i;
809 for (i = 0; i <= rows * ticks; ++i) {
810 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
811 ctx.beginPath();
812 ctx.moveTo(_at_x + 0, _at_y + i * scale);
813 ctx.lineTo(_at_x + unit * columns, _at_y + i * scale);
814 ctx.stroke();
815 }
816 for (i = 0; i <= columns * ticks; ++i) {
817 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
818 ctx.beginPath();
819 ctx.moveTo(_at_x + i * scale, _at_y + 0);
820 ctx.lineTo(_at_x + i * scale, _at_y + unit * rows);
821 ctx.stroke();
822 }
823
824 var xoffset = xStart * -unit + _at_x;
825 var yoffset = yStart * -unit + _at_y;
826
827 ctx.fillStyle = "rgb(40,80,60)"
828 for (i = 0; i <= columns; i += (1 / ticks))
829 {
830 num = (xoffset - _at_x) / -unit + i;
831 ctx.fillText(num.toFixed(0), i * unit + _at_y - 5, 10);
832 }
833 for (i = 0; i <= rows; i += (1 / ticks))
834 {
835 num = (yoffset - _at_x) / -unit + i;
836 ctx.fillText(num.toFixed(0), 0, i * unit + _at_y + 0);
837 }
838 ctx.strokeStyle = "red";
caryclark@google.comfb173422012-04-10 18:28:55 +0000839 var contours, verbs, pts;
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000840 ctx.beginPath();
caryclark@google.comfb173422012-04-10 18:28:55 +0000841 for (contours in test) {
842 var contour = test[contours];
843 if (contours == 2) ctx.strokeStyle = "blue";
caryclark@google.comfb173422012-04-10 18:28:55 +0000844 var first = true;
845 for (verbs in contour) {
846 var verb = contour[verbs];
847 switch (verb.length) {
848 case 2:
849 if (first) {
850 ctx.moveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
851 first = false;
852 } else
853 ctx.lineTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
854 break;
855 case 4:
856 ctx.quadraticCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
857 xoffset + verb[2] * unit, yoffset + verb[3] * unit);
858 break;
859 case 6:
860 ctx.bezierCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
861 xoffset + verb[2] * unit, yoffset + verb[3] * unit,
862 xoffset + verb[4] * unit, yoffset + verb[5] * unit);
863 break;
864 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000865 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000866 ctx.closePath();
caryclark@google.com752b60e2012-03-22 21:11:17 +0000867 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000868 ctx.stroke();
869 ctx.fillStyle="rgba(192,192,255, 0.3)";
870 ctx.fill();
caryclark@google.com752b60e2012-03-22 21:11:17 +0000871
872 ctx.fillStyle="blue";
caryclark@google.comfb173422012-04-10 18:28:55 +0000873 for (contours in test) {
874 var contour = test[contours];
875 for (verbs in contour) {
876 var verb = contour[verbs];
877 for (i = 0; i < verb.length; i += 2) {
878 x = verb[i];
879 y = verb[i + 1];
880 drawPoint(x, y, xoffset, yoffset, unit);
881 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000882 }
883 }
884}
885
886var mouseX = Infinity, mouseY;
887
888function calcXY() {
889 var e = window.event;
890 var tgt = e.target || e.srcElement;
891 var left = tgt.offsetLeft;
892 var top = tgt.offsetTop;
893 var unit = scale * ticks;
894 mouseX = (e.clientX - left - Math.ceil(at_x) + 1) / unit + xStart;
895 mouseY = (e.clientY - top - Math.ceil(at_y)) / unit + yStart;
896}
897
898function handleMouseOver() {
899 calcXY();
900 var num = mouseX.toFixed(3) + ", " + mouseY.toFixed(3);
901 ctx.beginPath();
902 ctx.rect(300,100,200,10);
903 ctx.fillStyle="white";
904 ctx.fill();
905 ctx.fillStyle="black";
906 ctx.fillText(num, 300, 108);
907}
908
909function handleMouseClick() {
910 calcXY();
911// drawInset();
912}
913
914function drawTop() {
915 init(tests[testIndex]);
916 redraw();
917}
918
919function redraw() {
920 ctx.beginPath();
921 ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
922 ctx.fillStyle="white";
923 ctx.fill();
caryclark@google.com0e08a192012-07-13 21:07:52 +0000924 draw(tests[testIndex], testTitles[testIndex], at_x, at_y, scale);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000925// if (insetScale != scale && mouseX != Infinity)
926// drawInset();
927}
928
929function doKeyPress(evt) {
930 var char = String.fromCharCode(evt.charCode);
931 switch (char) {
932 case 'N':
933 case 'n':
934 if (++testIndex >= tests.length)
935 testIndex = 0;
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000936 mouseX = Infinity;
937 drawTop();
938 break;
939 case 'P':
940 case 'p':
941 if (--testIndex < 0)
942 testIndex = tests.length - 1;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000943 mouseX = Infinity;
944 drawTop();
945 break;
946 case 'T':
947 case 't':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000948 break;
949 case '-':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000950 redraw();
951 break;
952 case '=':
953 case '+':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000954 redraw();
955 break;
956 }
957}
958
959function start() {
960 for (i = 0; i < testDivs.length; ++i) {
caryclark@google.com0e08a192012-07-13 21:07:52 +0000961 var title = testDivs[i].id.toString();
caryclark@google.com752b60e2012-03-22 21:11:17 +0000962 var str = testDivs[i].firstChild.data;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000963 if (str.split("addRect").length > 1) {
caryclark@google.com0e08a192012-07-13 21:07:52 +0000964 parseRect(str, title);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000965 } else {
caryclark@google.com0e08a192012-07-13 21:07:52 +0000966 parse(str, title);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000967 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000968 }
969 drawTop();
970 window.addEventListener('keypress', doKeyPress, true);
971}
972
973</script>
974</head>
975
976<body onLoad="start();">
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000977<canvas id="canvas" width="750" height="500"
caryclark@google.com752b60e2012-03-22 21:11:17 +0000978 onmousemove="handleMouseOver()"
979 onclick="handleMouseClick()"
980 ></canvas >
981</body>
982</html>