blob: 5454fdc9271d67088aafe8824f0f7fa76d4a6ddc [file] [log] [blame]
caryclark@google.com32546db2012-08-31 20:55:07 +00001<!-- path visualizer -->
caryclark@google.com752b60e2012-03-22 21:11:17 +00002<html>
3<head>
4<div style="height:0">
caryclark@google.comfa0588f2012-04-26 21:01:06 +00005
6<div id="testSimplifyQuadratic1">
7 SkPath path, out;
8 path.moveTo(0, 0);
9 path.quadTo(1, 0, 1, 1);
10 path.close();
11 path.moveTo(1, 0);
12 path.quadTo(0, 0, 0, 1);
13 path.close();
14 testSimplify(path, true, out, bitmap);
15}
caryclark@google.com752b60e2012-03-22 21:11:17 +000016</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000017
18<div id="testSimplifyQuadratic2">
19 SkPath path, out;
20 path.moveTo(0, 0);
21 path.quadTo(20, 0, 20, 20);
22 path.close();
23 path.moveTo(20, 0);
24 path.quadTo(0, 0, 0, 20);
25 path.close();
26 testSimplify(path, true, out, bitmap);
27}
caryclark@google.comd88e0892012-03-27 13:23:51 +000028</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000029
30<div id="testSimplifyQuadratic3">
31 SkPath path, out;
32 path.moveTo(0, 0);
33 path.quadTo(20, 0, 20, 20);
34 path.close();
35 path.moveTo(0, 20);
36 path.quadTo(0, 0, 20, 0);
37 path.close();
38 testSimplify(path, true, out, bitmap);
39}
caryclark@google.comd88e0892012-03-27 13:23:51 +000040</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000041
42<div id="testSimplifyQuadratic4">
43 SkPath path, out;
44 path.moveTo(0, 20);
45 path.quadTo(20, 0, 40, 20);
46 path.close();
47 path.moveTo(40, 10);
48 path.quadTo(20, 30, 0, 10);
49 path.close();
50 testSimplify(path, true, out, bitmap);
51 drawAsciiPaths(path, out, true);
52}
caryclark@google.comd88e0892012-03-27 13:23:51 +000053</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000054
55<div id="testSimplifyQuadratic5">
56 SkPath path, out;
57 path.moveTo(0, 0);
58 path.quadTo(0, 0, 0, 0);
59 path.lineTo(0, 0);
60 path.close();
61 path.moveTo(0, 0);
62 path.lineTo(0, 0);
63 path.quadTo(0, 0, 0, 1);
64 path.close();
65 testSimplify(path, true, out, bitmap);
66 drawAsciiPaths(path, out, true);
67}
caryclark@google.comfb173422012-04-10 18:28:55 +000068</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000069
70<div id="testSimplifyQuadratic6">
71 SkPath path, out;
72 path.moveTo(0, 0);
73 path.quadTo(0, 0, 0, 0);
74 path.lineTo(1, 0);
75 path.close();
76 path.moveTo(0, 0);
77 path.lineTo(0, 0);
78 path.quadTo(1, 0, 0, 1);
79 path.close();
80 testSimplify(path, true, out, bitmap);
81 drawAsciiPaths(path, out, true);
82}
caryclark@google.comfb173422012-04-10 18:28:55 +000083</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000084
85<div id="testSimplifyQuadratic7">
86 SkPath path, out;
87 path.moveTo(0, 0);
88 path.quadTo(0, 0, 0, 0);
89 path.lineTo(0, 1);
90 path.close();
91 path.moveTo(0, 0);
92 path.lineTo(0, 0);
93 path.quadTo(1, 0, 0, 2);
94 path.close();
95 testSimplify(path, true, out, bitmap);
96 drawAsciiPaths(path, out, true);
97}
98</div>
99
100<div id="testSimplifyQuadratic8">
101 SkPath path, out;
102 path.moveTo(0, 0);
103 path.quadTo(0, 0, 0, 0);
104 path.lineTo(0, 0);
105 path.close();
106 path.moveTo(0, 0);
107 path.lineTo(0, 0);
108 path.quadTo(1, 0, 0, 2);
109 path.close();
110 testSimplify(path, true, out, bitmap);
111 drawAsciiPaths(path, out, true);
112}
113</div>
114
115<div id="testSimplifyQuadratic9">
116 SkPath path, out;
117 path.moveTo(0, 0);
118 path.quadTo(0, 0, 0, 0);
119 path.lineTo(1, 1);
120 path.close();
121 path.moveTo(0, 0);
122 path.lineTo(0, 0);
123 path.quadTo(1, 0, 2, 2);
124 path.close();
125 testSimplify(path, true, out, bitmap);
126 drawAsciiPaths(path, out, true);
127}
128</div>
129
130<div id="testSimplifyQuadratic10">
131 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000132 path.moveTo(0, 0);
133 path.quadTo(0, 0, 0, 0);
134 path.lineTo(0, 0);
135 path.close();
136 path.moveTo(0, 0);
137 path.lineTo(0, 1);
138 path.quadTo(1, 1, 1, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000139 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000140 testSimplify(path, true, out, bitmap);
141 drawAsciiPaths(path, out, true);
142}
caryclark@google.com78e17132012-04-17 11:40:34 +0000143</div>
144
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000145<div id="testSimplifyQuadratic11">
146 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000147 path.moveTo(0, 0);
148 path.quadTo(0, 0, 0, 0);
149 path.lineTo(0, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000150 path.close();
151 path.moveTo(0, 0);
152 path.lineTo(2, 1);
153 path.quadTo(2, 2, 3, 3);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000154 path.close();
155 testSimplify(path, true, out, bitmap);
156 drawAsciiPaths(path, out, true);
157}
158</div>
159
160<div id="testSimplifyQuadratic12">
161 SkPath path, out;
162 path.moveTo(0, 0);
163 path.lineTo(0, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000164 path.lineTo(0, 0);
165 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000166 path.moveTo(3, 0);
167 path.quadTo(1, 1, 0, 2);
168 path.lineTo(3, 0);
169 path.close();
170 testSimplify(path, true, out, bitmap);
171 drawAsciiPaths(path, out, true);
172}
caryclark@google.com78e17132012-04-17 11:40:34 +0000173</div>
174
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000175<div id="testSimplifyQuadratic13">
176 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000177path.moveTo(0, 0);
178path.quadTo(0, 0, 1, 0);
179path.lineTo(1, 1);
180path.lineTo(0, 0);
181path.close();
182path.moveTo(0, 0);
183path.quadTo(3, 0, 1, 1);
184path.lineTo(0, 0);
185path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000186 testSimplify(path, true, out, bitmap);
187 drawAsciiPaths(path, out, true);
188}
caryclark@google.com78e17132012-04-17 11:40:34 +0000189</div>
190
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000191<div id="testSimplifyQuadratic14">
192 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000193 path.moveTo(0, 0);
194 path.quadTo(0, 0, 0, 0);
195 path.lineTo(1, 1);
caryclark@google.com78e17132012-04-17 11:40:34 +0000196 path.close();
197 path.moveTo(0, 0);
198 path.lineTo(0, 0);
199 path.quadTo(0, 1, 2, 1);
caryclark@google.com78e17132012-04-17 11:40:34 +0000200 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000201 testSimplify(path, true, out, bitmap);
202 drawAsciiPaths(path, out, true);
203}
caryclark@google.com78e17132012-04-17 11:40:34 +0000204</div>
205
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000206<div id="testSimplifyQuadratic15">
207 SkPath path, out;
208 path.moveTo(0, 0);
209 path.quadTo(0, 0, 1, 3);
210 path.lineTo(3, 3);
211 path.close();
212 path.moveTo(0, 1);
213 path.lineTo(1, 1);
214 path.quadTo(0, 3, 3, 3);
215 path.close();
216 testSimplify(path, true, out, bitmap);
217 drawAsciiPaths(path, out, true);
218}
219</div>
220
221<div id="testSimplifyQuadratic16">
222 SkPath path, out;
223 path.moveTo(0, 0);
224 path.quadTo(0, 0, 0, 0);
225 path.lineTo(0, 1);
226 path.close();
227 path.moveTo(0, 0);
228 path.lineTo(0, 0);
229 path.quadTo(1, 0, 0, 1);
230 path.close();
231 testSimplify(path, true, out, bitmap);
232 drawAsciiPaths(path, out, true);
233}
234</div>
235
236<div id="testSimplifyQuadratic17">
237 SkPath path, out;
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000238 path.moveTo(8, 8);
239 path.quadTo(10, 10, 8, -10);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000240 path.close();
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000241 path.moveTo(8, 8);
242 path.quadTo(12, 12, 14, 4);
243 path.close();
244 path.moveTo(8, 8);
245 path.quadTo(9, 9, 10, 8);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000246 path.close();
247 testSimplify(path, true, out, bitmap);
248 drawAsciiPaths(path, out, true);
249}
caryclark@google.com78e17132012-04-17 11:40:34 +0000250</div>
caryclark@google.comfb173422012-04-10 18:28:55 +0000251
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000252<div id="testSimplifyQuadratic18">
253 SkPath path, out;
254 path.moveTo(8.0000000000000071, 8.0000000000000071);
255 path.quadTo(8.7289570079366854, 8.7289570079366889, 9.3914917259458743, 9.0593802763083691);
256 path.close();
257 path.moveTo(8.0000000000000142, 8.0000000000000142);
258 path.quadTo(8.1250000000000107, 8.1250000000000071, 8.2500000000000071, 8.2187500000000053);
259 path.close();
260 testSimplify(path, true, out, bitmap);
261 drawAsciiPaths(path, out, true);
262</div>
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000263
264<div id="testSimplifyQuadratic19">
265 SkPath path, simple;
266 path.moveTo(0,4);
267 path.lineTo(6,4);
268 path.lineTo(3,1);
269 path.close();
270 path.moveTo(2,3);
271 path.lineTo(3,2);
272 path.lineTo(4,3);
273 path.close();
274 testSimplifyx(path);
275</div>
276
277<div id="testSimplifyQuadratic20">
278 SkPath path, simple;
279 path.moveTo(0,4);
280 path.lineTo(6,4);
281 path.lineTo(3,1);
282 path.close();
283 path.moveTo(2,3);
284 path.lineTo(4,3);
285 path.lineTo(3,2);
286 path.close();
287 testSimplifyx(path);
288</div>
289
290<div id="testSimplifyQuadratic21">
291 SkPath path, simple;
292 path.moveTo(0,4);
293 path.lineTo(8,4);
294 path.lineTo(4,0);
295 path.close();
296 path.moveTo(2,2);
297 path.lineTo(3,3);
298 path.lineTo(4,2);
299 path.close();
300 testSimplifyx(path);
301</div>
302
303<div id="testLine6">
304 SkPath path, simple;
305 path.moveTo(0,0);
306 path.lineTo(4,0);
307 path.lineTo(2,2);
308 path.close();
309 path.moveTo(2,0);
310 path.lineTo(6,0);
311 path.lineTo(4,2);
312 path.close();
313 testSimplifyx(path);
314</div>
315
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000316<div id="testLine7">
317 SkPath path, simple;
318 path.moveTo(0,0);
319 path.lineTo(4,0);
320 path.lineTo(2,2);
321 path.close();
322 path.moveTo(6,0);
323 path.lineTo(2,0);
324 path.lineTo(4,2);
325 path.close();
326 testSimplifyx(path);
327</div>
328
caryclark@google.comcc905052012-07-25 20:59:42 +0000329<div id="testLine7b">
330 path.moveTo(0,0);
331 path.lineTo(4,0);
332 path.close();
333 path.moveTo(6,0);
334 path.lineTo(2,0);
335 path.lineTo(4,2);
336 path.close();
337</div>
338
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000339<div id="testLine9">
340 SkPath path, simple;
341 path.moveTo(0,4);
342 path.lineTo(4,4);
343 path.lineTo(2,2);
344 path.close();
345 path.moveTo(6,4);
346 path.lineTo(2,4);
347 path.lineTo(4,2);
348 path.close();
349 testSimplifyx(path);
350</div>
351
caryclark@google.come21cb182012-07-23 21:26:31 +0000352<div id="testLine12">
353 path.moveTo(0,4);
354 path.lineTo(6,4);
355 path.lineTo(3,1);
356 path.close();
357 path.moveTo(2,3);
358 path.lineTo(3,2);
359 path.lineTo(4,3);
360 path.close();
361</div>
362
363<div id="testLine13">
364 path.moveTo(6,4);
365 path.lineTo(0,4);
366 path.lineTo(3,1);
367 path.close();
368 path.moveTo(3,2);
369 path.lineTo(2,3);
370 path.lineTo(4,3);
371 path.close();
372</div>
373
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000374<div id="testLine17">
375 SkPath path, simple;
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000376 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
377 path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000378 testSimplifyx(path);
379</div>
380
caryclark@google.com47580692012-07-23 12:14:49 +0000381<div id="testLine19">
382 SkPath path, simple;
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000383 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
384 path.addRect(12, 16, 21, 21, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000385 testSimplifyx(path);
386</div>
387
caryclark@google.comcc905052012-07-25 20:59:42 +0000388<div id="testLine22">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000389 path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
390 path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
caryclark@google.comcc905052012-07-25 20:59:42 +0000391</div>
392
caryclark@google.com47580692012-07-23 12:14:49 +0000393<div id="testLine24">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000394 path.addRect(0, 18, 12, 12, SkPath::kCW_Direction);
395 path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000396</div>
397
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000398<div id="testLine28">
399 SkPath path, simple;
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000400 path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
401 path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000402 testSimplifyx(path);
403</div>
404
405<div id="testLine29">
406 SkPath path, simple;
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000407 path.addRect(0, 18, 12, 12, SkPath::kCW_Direction);
408 path.addRect(12, 12, 21, 21, SkPath::kCW_Direction);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000409 testSimplifyx(path);
410</div>
411
412<div id="testLine30">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000413 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
414 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
415 path.addRect(4, 4, 13, 13, SkPath::kCW_Direction);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000416</div>
417
418<div id="testLine31">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000419 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
420 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
421 path.addRect(0, 4, 9, 9, SkPath::kCW_Direction);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000422</div>
423
424<div id="testLine32">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000425 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
426 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
427 path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000428</div>
429
caryclark@google.com9764cc62012-07-12 19:29:45 +0000430<div id="testLine33">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000431 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
432 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
433 path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
caryclark@google.com9764cc62012-07-12 19:29:45 +0000434</div>
435
caryclark@google.com210acaf2012-07-12 21:05:13 +0000436<div id="testLine34">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000437 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
438 path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
439 path.addRect(4, 12, 13, 13, SkPath::kCW_Direction);
caryclark@google.com210acaf2012-07-12 21:05:13 +0000440</div>
441
442<div id="testLine35">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000443 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
444 path.addRect(6, 0, 18, 18, SkPath::kCW_Direction);
445 path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
caryclark@google.com210acaf2012-07-12 21:05:13 +0000446</div>
447
caryclark@google.com0e08a192012-07-13 21:07:52 +0000448<div id="testLine36">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000449 path.addRect(0, 10, 20, 20, SkPath::kCW_Direction);
450 path.addRect(6, 12, 18, 18, SkPath::kCW_Direction);
451 path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
caryclark@google.com0e08a192012-07-13 21:07:52 +0000452</div>
453
caryclark@google.com47580692012-07-23 12:14:49 +0000454<div id="testLine37">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000455 path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
456 path.addRect(18, 24, 30, 30, SkPath::kCW_Direction);
457 path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000458</div>
459
460<div id="testLine38">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000461 path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
462 path.addRect(6, 12, 18, 18, SkPath::kCW_Direction);
463 path.addRect(12, 12, 21, 21, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000464</div>
465
466<div id="testLine39">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000467 path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
468 path.addRect(12, 6, 24, 24, SkPath::kCW_Direction);
469 path.addRect(12, 4, 21, 21, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000470</div>
471
472<div id="testLine40">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000473 path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
474 path.addRect(12, 18, 24, 24, SkPath::kCW_Direction);
475 path.addRect(4, 16, 13, 13, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000476</div>
477
478<div id="testLine41">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000479 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
480 path.addRect(18, 24, 30, 30, SkPath::kCW_Direction);
481 path.addRect(12, 0, 21, 21, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000482</div>
483
484<div id="testLine42">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000485 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
486 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
487 path.addRect(8, 16, 17, 17, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000488</div>
489
490<div id="testLine43">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000491 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
492 path.addRect(6, 24, 18, 18, SkPath::kCW_Direction);
493 path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000494</div>
495
496<div id="testLine44">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000497 path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
498 path.addRect(18, 0, 30, 30, SkPath::kCW_Direction);
499 path.addRect(18, 32, 27, 36, SkPath::kCCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000500</div>
501
502<div id="testLine45">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000503 path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
504 path.addRect(18, 0, 30, 30, SkPath::kCW_Direction);
505 path.addRect(24, 32, 33, 36, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000506</div>
507
508<div id="testLine46">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000509 path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
510 path.addRect(24, 0, 36, 36, SkPath::kCW_Direction);
511 path.addRect(24, 32, 33, 36, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000512</div>
513
514<div id="testLine47">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000515 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
516 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
517 path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000518</div>
519
520<div id="testLine48">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000521 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
522 path.addRect(0, 6, 12, 12, SkPath::kCW_Direction);
523 path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000524</div>
525
526<div id="testLine49">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000527 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
528 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
529 path.addRect(0, 0, 9, 9, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000530</div>
531
532<div id="testLine50">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000533 path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
534 path.addRect(24, 20, 36, 30, SkPath::kCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000535</div>
536
537<div id="testLine51">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000538 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
539 path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
540 path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
caryclark@google.com47580692012-07-23 12:14:49 +0000541</div>
542
caryclark@google.come21cb182012-07-23 21:26:31 +0000543<div id="testLine52">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000544 path.addRect(0, 30, 20, 20, SkPath::kCW_Direction);
545 path.addRect(6, 20, 18, 30, SkPath::kCW_Direction);
546 path.addRect(32, 0, 36, 41, SkPath::kCW_Direction);
caryclark@google.come21cb182012-07-23 21:26:31 +0000547</div>
548
549<div id="testLine53">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000550 path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
551 path.addRect(12, 20, 24, 30, SkPath::kCW_Direction);
552 path.addRect(12, 32, 21, 36, SkPath::kCCW_Direction);
caryclark@google.come21cb182012-07-23 21:26:31 +0000553</div>
554
555<div id="testLine54">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000556 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
557 path.addRect(6, 0, 18, 18, SkPath::kCW_Direction);
558 path.addRect(8, 4, 17, 17, SkPath::kCCW_Direction);
caryclark@google.come21cb182012-07-23 21:26:31 +0000559</div>
560
561<div id="testLine55">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000562 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
563 path.addRect(6, 6, 18, 18, SkPath::kCW_Direction);
564 path.addRect(4, 4, 13, 13, SkPath::kCCW_Direction);
caryclark@google.come21cb182012-07-23 21:26:31 +0000565</div>
566
caryclark@google.com18063442012-07-25 12:05:18 +0000567<div id="testLine56">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000568 path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
569 path.addRect(18, 20, 30, 30, SkPath::kCW_Direction);
570 path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
caryclark@google.com18063442012-07-25 12:05:18 +0000571</div>
572
573<div id="testLine57">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000574 path.addRect(20, 0, 40, 40, SkPath::kCW_Direction);
575 path.addRect(20, 0, 30, 40, SkPath::kCW_Direction);
576 path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
caryclark@google.com18063442012-07-25 12:05:18 +0000577</div>
578
caryclark@google.comcc905052012-07-25 20:59:42 +0000579<div id="testLine58">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000580 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
581 path.addRect(0, 0, 12, 12, SkPath::kCCW_Direction);
582 path.addRect(0, 12, 9, 9, SkPath::kCCW_Direction);
caryclark@google.comcc905052012-07-25 20:59:42 +0000583</div>
584
585<div id="testLine59">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000586 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
587 path.addRect(6, 6, 18, 18, SkPath::kCCW_Direction);
588 path.addRect(4, 4, 13, 13, SkPath::kCCW_Direction);
caryclark@google.comcc905052012-07-25 20:59:42 +0000589</div>
590
caryclark@google.com27c449a2012-07-27 18:26:38 +0000591<div id="testLine60">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000592 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
593 path.addRect(6, 12, 18, 18, SkPath::kCCW_Direction);
594 path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
caryclark@google.com27c449a2012-07-27 18:26:38 +0000595</div>
596
597<div id="testLine61">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000598 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
599 path.addRect(12, 0, 24, 24, SkPath::kCCW_Direction);
600 path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
caryclark@google.com27c449a2012-07-27 18:26:38 +0000601</div>
602
603<div id="testLine62">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000604 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
605 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
606 path.addRect(0, 12, 12, 12, SkPath::kCW_Direction);
607 path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
caryclark@google.com27c449a2012-07-27 18:26:38 +0000608</div>
609
610<div id="testLine63">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000611 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
612 path.addRect(0, 10, 20, 20, SkPath::kCW_Direction);
613 path.addRect(0, 6, 12, 12, SkPath::kCCW_Direction);
614 path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
caryclark@google.com27c449a2012-07-27 18:26:38 +0000615</div>
616
617<div id="testLine64">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000618 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
619 path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
620 path.addRect(18, 6, 30, 30, SkPath::kCW_Direction);
caryclark@google.com27c449a2012-07-27 18:26:38 +0000621</div>
622
623<div id="testLine65">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000624 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
625 path.addRect(10, 0, 30, 30, SkPath::kCW_Direction);
626 path.addRect(24, 0, 36, 36, SkPath::kCW_Direction);
627 path.addRect(32, 6, 36, 41, SkPath::kCCW_Direction);
caryclark@google.com27c449a2012-07-27 18:26:38 +0000628</div>
629
630<div id="testLine66">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000631 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
632 path.addRect(0, 30, 20, 20, SkPath::kCW_Direction);
633 path.addRect(12, 20, 24, 30, SkPath::kCW_Direction);
caryclark@google.com27c449a2012-07-27 18:26:38 +0000634</div>
635
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000636<div id="testLine67">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000637 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
638 path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
639 path.addRect(24, 20, 36, 30, SkPath::kCW_Direction);
640 path.addRect(32, 0, 36, 41, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000641</div>
642
643<div id="testLine68a">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000644 path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
645 path.addRect(2, 2, 6, 6, SkPath::kCW_Direction);
646 path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000647</div>
648
649<div id="testLine68b">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000650 path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
651 path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
652 path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000653</div>
654
655<div id="testLine68c">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000656 path.addRect(0, 0, 8, 8, SkPath::kCCW_Direction);
657 path.addRect(2, 2, 6, 6, SkPath::kCW_Direction);
658 path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000659</div>
660
661<div id="testLine68d">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000662 path.addRect(0, 0, 8, 8, SkPath::kCCW_Direction);
663 path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
664 path.addRect(1, 2, 4, 2, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000665</div>
666
667<div id="testLine68e">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000668 path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
669 path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
670 path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
671 path.addRect(1, 2, 2, 2, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000672</div>
673
674<div id="testLine68f">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000675 path.addRect(0, 0, 8, 8, SkPath::kCW_Direction);
676 path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
677 path.addRect(2, 2, 6, 6, SkPath::kCCW_Direction);
678 path.addRect(1, 2, 2, 2, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000679</div>
680
681<div id="testLine69">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000682 path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
683 path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
684 path.addRect(12, 32, 21, 36, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000685</div>
686
687<div id="testLine70">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000688 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
689 path.addRect(0, 24, 12, 12, SkPath::kCW_Direction);
690 path.addRect(12, 32, 21, 36, SkPath::kCCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000691</div>
692
693<div id="testLine71">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000694 path.addRect(0, 0, 20, 20, SkPath::kCW_Direction);
695 path.addRect(12, 0, 24, 24, SkPath::kCW_Direction);
696 path.addRect(12, 32, 21, 36, SkPath::kCW_Direction);
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000697</div>
698
caryclark@google.com200c2112012-08-03 15:05:04 +0000699<div id="testLine72">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000700 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
701 path.addRect(10, 40, 30, 30, SkPath::kCW_Direction);
702 path.addRect(6, 20, 18, 30, SkPath::kCW_Direction);
caryclark@google.com200c2112012-08-03 15:05:04 +0000703</div>
704
705<div id="testLine73">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000706 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
707 path.addRect(0, 40, 20, 20, SkPath::kCW_Direction);
708 path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
709 path.addRect(0, 0, 9, 9, SkPath::kCCW_Direction);
caryclark@google.com200c2112012-08-03 15:05:04 +0000710</div>
711
caryclark@google.com0c803d02012-08-06 11:15:47 +0000712<div id="testLine74">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000713 path.addRect(20, 30, 40, 40, SkPath::kCW_Direction);
714 path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
715 path.addRect(32, 24, 36, 41, SkPath::kCCW_Direction);
caryclark@google.com0c803d02012-08-06 11:15:47 +0000716</div>
717
caryclark@google.com2ddff932012-08-07 21:25:27 +0000718<div id="testLine75">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000719 path.addRect(0, 0, 60, 60, SkPath::kCW_Direction);
720 path.addRect(10, 0, 30, 30, SkPath::kCCW_Direction);
721 path.addRect(18, 0, 30, 30, SkPath::kCCW_Direction);
722 path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
caryclark@google.com2ddff932012-08-07 21:25:27 +0000723</div>
724
725<div id="testLine76">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000726 path.addRect(36, 0, 66, 60, SkPath::kCW_Direction);
727 path.addRect(10, 20, 40, 30, SkPath::kCW_Direction);
728 path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
729 path.addRect(32, 6, 36, 41, SkPath::kCCW_Direction);
caryclark@google.com2ddff932012-08-07 21:25:27 +0000730</div>
731
732<div id="testLine77">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000733 path.addRect(20, 0, 40, 40, SkPath::kCW_Direction);
734 path.addRect(24, 6, 36, 36, SkPath::kCCW_Direction);
735 path.addRect(24, 32, 33, 36, SkPath::kCCW_Direction);
caryclark@google.com2ddff932012-08-07 21:25:27 +0000736</div>
737
738<div id="testLine78">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000739 path.addRect(0, 0, 30, 60, SkPath::kCW_Direction);
740 path.addRect(10, 20, 30, 30, SkPath::kCCW_Direction);
741 path.addRect(18, 20, 30, 30, SkPath::kCCW_Direction);
742 path.addRect(32, 0, 36, 41, SkPath::kCCW_Direction);
caryclark@google.com2ddff932012-08-07 21:25:27 +0000743</div>
744
745<div id="testLine79">
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000746 path.addRect(0, 36, 60, 30, SkPath::kCW_Direction);
747 path.addRect(10, 30, 40, 30, SkPath::kCW_Direction);
748 path.addRect(0, 20, 12, 30, SkPath::kCCW_Direction);
749 path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
750</div>
751
752<div id="testLine81">
753 path.addRect(-1, -1, 3, 3, SkPath::kCW_Direction);
754 path.addRect(0, 0, 1, 1, SkPath::kCW_Direction);
755 path.addRect(1, 1, 2, 2, SkPath::kCCW_Direction);
caryclark@google.com2ddff932012-08-07 21:25:27 +0000756</div>
757
caryclark@google.com59823f72012-08-09 18:17:47 +0000758<div id="testDegenerate1">
759 path.moveTo(0, 0);
760 path.lineTo(0, 0);
761 path.lineTo(2, 0);
762 path.close();
763 path.moveTo(0, 0);
764 path.lineTo(1, 0);
765 path.lineTo(2, 0);
766 path.close();
767</div>
768
769<div id="testDegenerate2">
770 path.moveTo(0, 0);
771 path.lineTo(0, 0);
772 path.lineTo(0, 0);
773 path.close();
774 path.moveTo(0, 0);
775 path.lineTo(1, 0);
776 path.lineTo(0, 1);
777 path.close();
778</div>
779
780<div id="testDegenerate3">
781 path.moveTo(0, 0);
782 path.lineTo(2, 0);
783 path.lineTo(1, 0);
784 path.close();
785 path.moveTo(0, 0);
786 path.lineTo(0, 0);
787 path.lineTo(3, 0);
788 path.close();
789</div>
790
791<div id="testDegenerate4">
792 path.moveTo(0, 0);
793 path.lineTo(1, 0);
794 path.lineTo(1, 3);
795 path.close();
796 path.moveTo(1, 0);
797 path.lineTo(1, 1);
798 path.lineTo(1, 2);
799 path.close();
800</div>
801
802<div id="testNondegenerate1">
803 path.moveTo(0, 0);
804 path.lineTo(3, 0);
805 path.lineTo(1, 3);
806 path.close();
807 path.moveTo(1, 1);
808 path.lineTo(2, 1);
809 path.lineTo(1, 2);
810 path.close();
811</div>
812
813<div id="testNondegenerate2">
814 path.moveTo(1, 0);
815 path.lineTo(0, 1);
816 path.lineTo(1, 1);
817 path.close();
818 path.moveTo(0, 2);
819 path.lineTo(0, 3);
820 path.lineTo(1, 2);
821 path.close();
822</div>
823
824<div id="testNondegenerate3">
825 path.moveTo(0, 0);
826 path.lineTo(1, 0);
827 path.lineTo(2, 1);
828 path.close();
829 path.moveTo(0, 1);
830 path.lineTo(1, 1);
831 path.lineTo(0, 2);
832 path.close();
833</div>
834
835<div id="testNondegenerate4">
836 path.moveTo(1, 0);
837 path.lineTo(0, 1);
838 path.lineTo(1, 2);
839 path.close();
840 path.moveTo(0, 2);
841 path.lineTo(0, 3);
842 path.lineTo(1, 3);
843 path.close();
844</div>
845
846<div id="testQuadralateral5">
847 path.moveTo(0, 0);
848 path.lineTo(0, 0);
849 path.lineTo(1, 0);
850 path.lineTo(1, 1);
851 path.close();
852 path.moveTo(0, 0);
853 path.lineTo(2, 2);
854 path.lineTo(3, 2);
855 path.lineTo(3, 3);
856 path.close();
857</div>
858
859<div id="testQuadralateral6">
860 path.moveTo(0, 0);
861 path.lineTo(0, 0);
862 path.lineTo(1, 0);
863 path.lineTo(1, 1);
864 path.close();
865 path.moveTo(1, 0);
866 path.lineTo(2, 0);
867 path.lineTo(0, 2);
868 path.lineTo(2, 2);
869 path.close();
870</div>
871
caryclark@google.com24bec792012-08-20 12:43:57 +0000872<div id="testFauxQuadralateral6">
873 path.moveTo(0, 0);
874 path.lineTo(1, 0);
875 path.lineTo(1, 1);
876 path.close();
877 path.moveTo(1, 0);
878 path.lineTo(2, 0);
879 path.lineTo(1.333, 0.667);
880 path.close();
881 path.moveTo(1.333, 0.667);
882 path.lineTo(0, 2);
883 path.lineTo(2, 2);
884 path.close();
885</div>
886
887<div id="testFauxQuadralateral6a">
888 path.moveTo(0, 0);
889 path.lineTo(3, 0);
890 path.lineTo(3, 3);
891 path.close();
892 path.moveTo(3, 0);
893 path.lineTo(6, 0);
894 path.lineTo(4, 2);
895 path.close();
896 path.moveTo(4, 2);
897 path.lineTo(0, 6);
898 path.lineTo(6, 6);
899 path.close();
900</div>
901
902<div id="testFauxQuadralateral6b">
903 path.moveTo(0, 0);
904 path.lineTo(3, 0);
905 path.lineTo(3, 3);
906 path.close();
907 path.moveTo(3, 0);
908 path.lineTo(6, 0);
909 path.lineTo(4, 2);
910 path.close();
911 path.moveTo(4, 2);
912 path.lineTo(6, 6);
913 path.lineTo(0, 6);
914 path.close();
915</div>
916
917<div id="testFauxQuadralateral6c">
918 path.moveTo(0, 0);
919 path.lineTo(3, 3);
920 path.lineTo(3, 0);
921 path.close();
922 path.moveTo(3, 0);
923 path.lineTo(6, 0);
924 path.lineTo(4, 2);
925 path.close();
926 path.moveTo(4, 2);
927 path.lineTo(0, 6);
928 path.lineTo(6, 6);
929 path.close();
930</div>
931
932<div id="testFauxQuadralateral6d">
933 path.moveTo(0, 0);
934 path.lineTo(3, 3);
935 path.lineTo(3, 0);
936 path.close();
937 path.moveTo(3, 0);
938 path.lineTo(6, 0);
939 path.lineTo(4, 2);
940 path.close();
941 path.moveTo(4, 2);
942 path.lineTo(6, 6);
943 path.lineTo(0, 6);
944</div>
945
946<div id="testQuadralateral6a">
947 path.moveTo(0, 0);
948 path.lineTo(0, 0);
949 path.lineTo(3, 0);
950 path.lineTo(3, 3);
951 path.close();
952 path.moveTo(3, 0);
953 path.lineTo(6, 0);
954 path.lineTo(0, 6);
955 path.lineTo(6, 6);
956</div>
957
958<div id="testQuadralateral7">
959 path.moveTo(0, 0);
960 path.lineTo(0, 0);
961 path.lineTo(1, 0);
962 path.lineTo(2, 1);
963 path.close();
964 path.moveTo(1, 0);
965 path.lineTo(1, 1);
966 path.lineTo(2, 2);
967 path.lineTo(1, 3);
968 path.close();
969</div>
970
971<div id="testQuadralateral8">
972 path.moveTo(0, 0);
973 path.lineTo(3, 1);
974 path.lineTo(1, 3);
975 path.lineTo(3, 3);
976 path.close();
977 path.moveTo(2, 1);
978 path.lineTo(0, 2);
979 path.lineTo(3, 2);
980 path.lineTo(2, 3);
981 path.close();
982</div>
983
984<div id="testQuadralateral9">
985 path.moveTo(0, 0);
986 path.lineTo(1, 0);
987 path.lineTo(1, 2);
988 path.lineTo(2, 2);
989 path.close();
990 path.moveTo(1, 1);
991 path.lineTo(2, 1);
992 path.lineTo(1, 3);
993 path.lineTo(2, 3);
994 path.close();
995</div>
996
997<div id="testLine1x">
998 path.setFillType(SkPath::kEvenOdd_FillType);
caryclark@google.com7fce0de2012-11-29 14:31:50 +0000999 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
1000 path.addRect(4, 0, 13, 13, SkPath::kCW_Direction);
caryclark@google.com24bec792012-08-20 12:43:57 +00001001</div>
1002
1003<div id="testLine2x">
1004 path.setFillType(SkPath::kEvenOdd_FillType);
caryclark@google.com7fce0de2012-11-29 14:31:50 +00001005 path.addRect(0, 20, 20, 20, SkPath::kCW_Direction);
1006 path.addRect(0, 20, 12, 30, SkPath::kCW_Direction);
1007 path.addRect(12, 0, 21, 21, SkPath::kCCW_Direction);
caryclark@google.com24bec792012-08-20 12:43:57 +00001008</div>
1009
1010<div id="testLine3x">
1011 path.setFillType(SkPath::kEvenOdd_FillType);
caryclark@google.com7fce0de2012-11-29 14:31:50 +00001012 path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
1013 path.addRect(18, 20, 30, 30, SkPath::kCCW_Direction);
1014 path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
caryclark@google.com24bec792012-08-20 12:43:57 +00001015</div>
1016
1017<div id="testLine4x">
1018 path.setFillType(SkPath::kEvenOdd_FillType);
caryclark@google.com7fce0de2012-11-29 14:31:50 +00001019 path.addRect(10, 30, 30, 30, SkPath::kCW_Direction);
1020 path.addRect(24, 20, 36, 30, SkPath::kCCW_Direction);
1021 path.addRect(0, 32, 9, 36, SkPath::kCCW_Direction);
caryclark@google.com24bec792012-08-20 12:43:57 +00001022</div>
1023
1024<div id="testQuadratic1">
1025 path.moveTo(0, 0);
1026 path.quadTo(0, 0, 0, 0);
1027 path.lineTo(1, 0);
1028 path.close();
1029 path.moveTo(0, 0);
1030 path.lineTo(0, 0);
1031 path.quadTo(0, 0, 0, 0);
1032 path.close();
1033</div>
1034
1035<div id="testQuadratic2">
1036 path.moveTo(0, 0);
1037 path.quadTo(0, 0, 0, 0);
1038 path.lineTo(3, 0);
1039 path.close();
1040 path.moveTo(0, 0);
1041 path.lineTo(0, 0);
1042 path.quadTo(1, 0, 0, 1);
1043 path.close();
1044</div>
1045
caryclark@google.com03f97062012-08-21 13:13:52 +00001046<div id="testQuadratic3">
1047 path.moveTo(0, 0);
1048 path.quadTo(0, 0, 1, 0);
1049 path.lineTo(0, 2);
1050 path.close();
1051 path.moveTo(0, 0);
1052 path.lineTo(0, 0);
1053 path.quadTo(1, 0, 0, 1);
1054 path.close();
1055</div>
1056
caryclark@google.comc899ad92012-08-23 15:24:42 +00001057<div id="testQuadratic4x">
1058 path.setFillType(SkPath::kEvenOdd_FillType);
1059 path.moveTo(0, 0);
1060 path.quadTo(0, 0, 1, 0);
1061 path.lineTo(0, 2);
1062 path.close();
1063 path.moveTo(0, 0);
1064 path.lineTo(0, 0);
1065 path.quadTo(1, 0, 0, 2);
1066 path.close();
1067</div>
1068
1069<div id="testQuadratic5">
1070 path.moveTo(0, 0);
1071 path.quadTo(0, 0, 0, 0);
1072 path.lineTo(0, 1);
1073 path.close();
1074 path.moveTo(0, 0);
1075 path.lineTo(1, 0);
1076 path.quadTo(0, 1, 0, 2);
1077 path.close();
1078</div>
1079
1080<div id="testQuadratic6">
1081 path.moveTo(0, 0);
1082 path.quadTo(0, 0, 1, 0);
1083 path.lineTo(2, 1);
1084 path.close();
1085 path.moveTo(0, 0);
1086 path.lineTo(0, 0);
1087 path.quadTo(2, 0, 0, 1);
1088 path.close();
1089</div>
1090
1091<div id="testQuadratic7">
1092 path.moveTo(0, 0);
1093 path.quadTo(0, 0, 1, 0);
1094 path.lineTo(3, 1);
1095 path.close();
1096 path.moveTo(0, 0);
1097 path.lineTo(0, 0);
1098 path.quadTo(3, 0, 1, 2);
1099 path.close();
1100</div>
1101
1102<div id="testQuadratic8">
1103 path.moveTo(0, 0);
1104 path.quadTo(0, 0, 1, 0);
1105 path.lineTo(0, 2);
1106 path.close();
1107 path.moveTo(0, 0);
1108 path.lineTo(1, 0);
1109 path.quadTo(0, 1, 1, 2);
1110 path.close();
1111</div>
1112
1113<div id="testQuadratic9">
1114 path.moveTo(0, 0);
1115 path.quadTo(0, 0, 1, 0);
1116 path.lineTo(3, 1);
1117 path.close();
1118 path.moveTo(0, 0);
1119 path.lineTo(1, 0);
1120 path.quadTo(1, 2, 3, 2);
1121 path.close();
1122</div>
1123
1124<div id="testQuadratic9a">
1125 path.moveTo(1.08000004, 0.720000029);
1126 path.lineTo(0, 0);
1127 path.lineTo(1, 0);
1128 path.lineTo(3, 1);
1129 path.lineTo(1.01568651, 0.338562161);
1130 path.quadTo(1.03542483, 0.541699469, 1.08000004, 0.720000029);
1131 path.close();
1132 path.moveTo(1.08000004, 0.720000029);
1133 path.lineTo(3, 2);
1134 path.quadTo(1.39999998, 2, 1.08000004, 0.720000029);
1135 path.close();
1136
1137</div>
1138
1139<div id="testQuadratic10a">
1140path.moveTo(15.5, 15.5);
1141path.lineTo(46.5, 15.5);
1142path.quadTo(0, 31, 0, 46.5);
1143path.lineTo(15.5, 15.5);
1144path.close();
1145</div>
1146
1147<div id="testQuadratic10b">
1148path.moveTo(5.16666698, 36.1666641);
1149path.lineTo(15.5, 15.5);
1150path.lineTo(46.5, 15.5);
1151path.quadTo(15.5, 25.8333321, 5.16666698, 36.1666641);
1152path.close();
1153path.moveTo(5.16666698, 36.1666641);
1154path.lineTo(0, 46.5);
1155path.quadTo(0, 41.3333359, 5.16666698, 36.1666641);
1156path.close();
1157</div>
1158
1159<div id="testQuadratic11a">
1160path.moveTo(0, 0);
1161path.lineTo(15.5, 31);
1162path.lineTo(0, 0);
1163path.close();
1164path.moveTo(0, 15.5);
1165path.lineTo(15.5, 15.5);
1166path.quadTo(15.5, 15.5, 46.5, 31);
1167path.lineTo(0, 15.5);
1168path.close();
1169</div>
1170
1171<div id="testQuadratic11b">
1172path.moveTo(9.30000019, 18.6000004);
1173path.lineTo(0, 15.5);
1174path.lineTo(7.75, 15.5);
1175path.lineTo(15.5, 15.5);
1176path.lineTo(46.5, 31);
1177path.lineTo(9.30000019, 18.6000004);
1178path.close();
1179</div>
1180
1181<div id="testQuadratic12">
1182 path.moveTo(0, 0);
1183 path.quadTo(0, 0, 0, 0);
1184 path.lineTo(1, 3);
1185 path.close();
1186 path.moveTo(1, 0);
1187 path.lineTo(0, 1);
1188 path.quadTo(1, 1, 0, 3);
1189 path.close();
1190</div>
1191
1192<div id="testQuadratic13a">
1193path.moveTo(0, 0);
1194path.quadTo(0, 0, 15.5, 0);
1195path.lineTo(15.5, 31);
1196path.lineTo(0, 0);
1197path.close();
1198path.moveTo(0, 0);
1199path.quadTo(15.5, 46.5, 46.5, 46.5);
1200path.lineTo(0, 0);
1201path.close();
1202</div>
1203
1204<div id="testQuadratic13b">
1205path.moveTo(14.8800001, 29.7600002);
1206path.quadTo(6.20000029, 18.6000004, 0, 0);
1207path.lineTo(14.8800001, 29.7600002);
1208path.close();
1209path.moveTo(15.5, 30.5437222);
1210path.lineTo(15.5, 31);
1211path.lineTo(14.8800001, 29.7600002);
1212path.quadTo(15.1884346, 30.156559, 15.5, 30.5437222);
1213path.close();
1214path.moveTo(15.5, 15.5);
1215path.lineTo(0, 0);
1216path.lineTo(15.5, 0);
1217path.lineTo(15.5, 15.5);
1218path.close();
1219path.moveTo(15.5, 30.5437222);
1220path.lineTo(15.5, 15.5);
1221path.lineTo(46.5, 46.5);
1222path.quadTo(28.34062, 46.5, 15.5, 30.5437222);
1223path.close();
1224</div>
1225
1226<div id="testQuadratic14">
1227 path.moveTo(0, 0);
1228 path.quadTo(0, 0, 1, 0);
1229 path.lineTo(3, 2);
1230 path.close();
1231 path.moveTo(0, 0);
1232 path.lineTo(1, 0);
1233 path.quadTo(3, 2, 3, 3);
1234 path.close();
1235</div>
1236
caryclark@google.com3350c3c2012-08-24 15:24:36 +00001237<div id="testQuadratic15">
1238 path.moveTo(0, 0);
1239 path.quadTo(0, 0, 1, 0);
1240 path.lineTo(1, 3);
1241 path.close();
1242 path.moveTo(1, 0);
1243 path.lineTo(0, 1);
1244 path.quadTo(1, 1, 0, 3);
1245 path.close();
1246</div>
1247
1248<div id="testQuadratic16a">
1249path.moveTo(0, 0);
1250path.quadTo(0, 0, 31, 0);
1251path.lineTo(46.5, 31);
1252path.lineTo(0, 0);
1253path.close();
1254path.moveTo(46.5, 15.5);
1255path.lineTo(0, 31);
1256path.quadTo(0, 31, 15.5, 31);
1257path.lineTo(46.5, 15.5);
1258path.close();
1259</div>
1260
1261<div id="testQuadratic16b">
1262path.moveTo(31, 20.6666679);
1263path.lineTo(0, 0);
1264path.lineTo(31, 0);
1265path.lineTo(39.8571434, 17.7142868);
1266path.lineTo(31, 20.6666679);
1267path.close();
1268path.moveTo(33.214283, 22.1428585);
1269path.lineTo(15.5, 31);
1270path.lineTo(0, 31);
1271path.lineTo(31, 20.6666679);
1272path.lineTo(33.214283, 22.1428585);
1273path.close();
1274path.moveTo(40.2999992, 18.6000004);
1275path.lineTo(46.5, 31);
1276path.lineTo(33.214283, 22.1428585);
1277path.lineTo(40.2999992, 18.6000004);
1278path.close();
1279path.moveTo(39.8571434, 17.7142868);
1280path.lineTo(46.5, 15.5);
1281path.lineTo(40.2999992, 18.6000004);
1282path.lineTo(39.8571434, 17.7142868);
1283path.close();
1284</div>
1285
1286<div id="testQuadratic17x">
1287 path.setFillType(SkPath::kEvenOdd_FillType);
1288 path.moveTo(0, 0);
1289 path.quadTo(0, 0, 3, 1);
1290 path.lineTo(0, 2);
1291 path.close();
1292 path.moveTo(0, 0);
1293 path.lineTo(1, 0);
1294 path.quadTo(3, 1, 0, 2);
1295 path.close();
1296</div>
1297
1298<div id="testQuadratic18">
1299 path.moveTo(0, 0);
1300 path.quadTo(1, 0, 0, 1);
1301 path.lineTo(0, 1);
1302 path.close();
1303 path.moveTo(0, 0);
1304 path.lineTo(0, 0);
1305 path.quadTo(1, 0, 1, 1);
1306 path.close();
1307</div>
1308
caryclark@google.coma7e483d2012-08-28 20:44:43 +00001309<div id="testQuadratic19">
1310 path.moveTo(0, 0);
1311 path.quadTo(1, 0, 0, 1);
1312 path.lineTo(0, 1);
1313 path.close();
1314 path.moveTo(0, 0);
1315 path.lineTo(0, 0);
1316 path.quadTo(2, 0, 0, 1);
1317 path.close();
1318</div>
1319
caryclark@google.com32546db2012-08-31 20:55:07 +00001320<div id="testQuadratic20">
1321 path.moveTo(0, 0);
1322 path.quadTo(1, 0, 0, 1);
1323 path.lineTo(0, 1);
1324 path.close();
1325 path.moveTo(0, 0);
1326 path.lineTo(0, 0);
1327 path.quadTo(1, 0, 0, 1);
1328 path.close();
1329</div>
1330
caryclark@google.com235f56a2012-09-14 14:19:30 +00001331<div id="testQuadratic21">
1332 path.moveTo(0, 0);
1333 path.quadTo(1, 0, 0, 1);
1334 path.lineTo(0, 1);
1335 path.close();
1336 path.moveTo(0, 0);
1337 path.lineTo(0, 0);
1338 path.quadTo(1, 0, 0, 2);
1339 path.close();
1340</div>
1341
1342<div id="testQuadratic22">
1343 path.moveTo(0, 0);
1344 path.quadTo(1, 0, 0, 1);
1345 path.lineTo(0, 1);
1346 path.close();
1347 path.moveTo(0, 0);
1348 path.lineTo(0, 0);
1349 path.quadTo(0, 1, 2, 1);
1350 path.close();
1351</div>
1352
1353<div id="testQuadratic23">
1354 path.moveTo(0, 0);
1355 path.quadTo(1, 0, 0, 1);
1356 path.lineTo(0, 1);
1357 path.close();
1358 path.moveTo(0, 0);
1359 path.lineTo(0, 0);
1360 path.quadTo(0, 2, 1, 2);
1361 path.close();
1362</div>
1363
1364<div id="testQuadratic24">
1365 path.moveTo(0, 0);
1366 path.quadTo(1, 0, 0, 1);
1367 path.lineTo(0, 1);
1368 path.close();
1369 path.moveTo(0, 0);
1370 path.lineTo(1, 0);
1371 path.quadTo(2, 0, 0, 1);
1372 path.close();
1373</div>
1374
1375<div id="testQuadratic25">
1376 path.moveTo(0, 0);
1377 path.quadTo(1, 0, 1, 1);
1378 path.lineTo(1, 1);
1379 path.close();
1380 path.moveTo(0, 0);
1381 path.lineTo(0, 0);
1382 path.quadTo(2, 1, 0, 2);
1383 path.close();
1384</div>
1385
1386<div id="testQuadratic26">
1387 path.moveTo(0, 0);
1388 path.quadTo(1, 0, 1, 1);
1389 path.lineTo(0, 2);
1390 path.close();
1391 path.moveTo(0, 0);
1392 path.lineTo(0, 0);
1393 path.quadTo(1, 0, 0, 1);
1394 path.close();
1395</div>
1396
1397<div id="testQuadratic27">
1398 path.moveTo(0, 0);
1399 path.quadTo(1, 0, 1, 1);
1400 path.lineTo(2, 1);
1401 path.close();
1402 path.moveTo(0, 0);
1403 path.lineTo(0, 0);
1404 path.quadTo(2, 1, 0, 2);
1405 path.close();
1406</div>
1407
1408<div id="testQuadratic28">
1409 path.moveTo(0, 0);
1410 path.quadTo(1, 0, 0, 1);
1411 path.lineTo(0, 1);
1412 path.close();
1413 path.moveTo(0, 0);
1414 path.lineTo(0, 2);
1415 path.quadTo(1, 2, 0, 3);
1416 path.close();
1417</div>
1418
caryclark@google.comd1688742012-09-18 20:08:37 +00001419<div id="testQuadratic29">
1420 path.moveTo(0, 0);
1421 path.quadTo(1, 0, 2, 1);
1422 path.lineTo(0, 2);
1423 path.close();
1424 path.moveTo(0, 0);
1425 path.lineTo(0, 0);
1426 path.quadTo(1, 0, 0, 1);
1427 path.close();
1428</div>
1429
1430<div id="testQuadratic30">
1431 path.moveTo(0, 0);
1432 path.quadTo(1, 0, 1, 2);
1433 path.lineTo(1, 2);
1434 path.close();
1435 path.moveTo(0, 0);
1436 path.lineTo(1, 0);
1437 path.quadTo(0, 1, 1, 2);
1438 path.close();
1439</div>
1440
1441<div id="testQuadratic31">
1442 path.moveTo(0, 0);
1443 path.quadTo(1, 0, 1, 2);
1444 path.lineTo(1, 2);
1445 path.close();
1446 path.moveTo(0, 0);
1447 path.lineTo(1, 0);
1448 path.quadTo(0, 1, 1, 3);
1449 path.close();
1450</div>
1451
1452<div id="testQuadratic32">
1453 path.moveTo(0, 0);
1454 path.quadTo(1, 0, 2, 3);
1455 path.lineTo(2, 3);
1456 path.close();
1457 path.moveTo(0, 0);
1458 path.lineTo(0, 0);
1459 path.quadTo(3, 1, 0, 2);
1460 path.close();
1461</div>
1462
1463<div id="testQuadratic33">
1464 path.moveTo(0, 0);
1465 path.quadTo(2, 0, 0, 1);
1466 path.lineTo(0, 1);
1467 path.close();
1468 path.moveTo(0, 0);
1469 path.lineTo(1, 1);
1470 path.quadTo(2, 1, 2, 2);
1471 path.close();
1472</div>
1473
1474<div id="testQuadratic34">
1475 path.moveTo(0, 0);
1476 path.quadTo(2, 0, 0, 1);
1477 path.lineTo(0, 1);
1478 path.close();
1479 path.moveTo(1, 0);
1480 path.lineTo(1, 1);
1481 path.quadTo(2, 1, 1, 2);
1482 path.close();
1483</div>
1484
1485<div id="testQuadratic35">
1486 path.moveTo(0, 0);
1487 path.quadTo(0, 1, 1, 1);
1488 path.lineTo(1, 3);
1489 path.close();
1490 path.moveTo(2, 0);
1491 path.lineTo(3, 0);
1492 path.quadTo(0, 1, 1, 1);
1493 path.close();
1494</div>
1495
1496<div id="testQuadratic36">
1497 path.moveTo(0, 0);
1498 path.quadTo(2, 1, 2, 3);
1499 path.lineTo(2, 3);
1500 path.close();
1501 path.moveTo(3, 1);
1502 path.lineTo(1, 2);
1503 path.quadTo(3, 2, 1, 3);
1504 path.close();
1505</div>
1506
1507<div id="testQuadratic37">
1508 path.moveTo(0, 0);
1509 path.quadTo(0, 2, 1, 2);
1510 path.lineTo(1, 2);
1511 path.close();
1512 path.moveTo(0, 0);
1513 path.lineTo(3, 1);
1514 path.quadTo(0, 2, 1, 2);
1515 path.close();
1516</div>
1517
1518<div id="testQuadratic38">
1519 path.moveTo(1, 0);
1520 path.quadTo(0, 1, 1, 1);
1521 path.lineTo(1, 1);
1522 path.close();
1523 path.moveTo(1, 0);
1524 path.lineTo(1, 2);
1525 path.quadTo(2, 2, 1, 3);
1526 path.close();
1527</div>
1528
1529<div id="testQuadratic39">
1530path.moveTo(15.5, 0);
1531path.quadTo(46.5, 15.5, 46.5, 31);
1532path.lineTo(15.5, 0);
1533path.close();
1534path.moveTo(46.5, 15.5);
1535path.lineTo(0, 31);
1536path.quadTo(0, 31, 15.5, 31);
1537path.lineTo(46.5, 15.5);
1538 path.close();
1539</div>
1540
1541<div id="testQuadratic39a">
1542path.moveTo(34.875, 19.375);
1543path.lineTo(15.5, 0);
1544path.quadTo(32.9687576, 8.73437881, 40.5937271, 17.4687576);
1545path.lineTo(34.875, 19.375);
1546path.close();
1547path.moveTo(36.1666641, 20.6666679);
1548path.lineTo(15.5, 31);
1549path.lineTo(0, 31);
1550path.lineTo(34.875, 19.375);
1551path.lineTo(36.1666641, 20.6666679);
1552path.close();
1553path.moveTo(41.1812401, 18.15938);
1554path.quadTo(46.5, 24.5796909, 46.5, 31);
1555path.lineTo(36.1666641, 20.6666679);
1556path.lineTo(41.1812401, 18.15938);
1557path.close();
1558path.moveTo(40.5937271, 17.4687576);
1559path.lineTo(46.5, 15.5);
1560path.lineTo(41.1812401, 18.15938);
1561path.quadTo(40.8951759, 17.8140678, 40.5937271, 17.4687576);
1562 path.close();
1563</div>
1564
caryclark@google.com6aea33f2012-10-09 14:11:58 +00001565<div id="testQuadratic40x">
1566 path.setFillType(SkPath::kEvenOdd_FillType);
1567 path.moveTo(2, 0);
1568 path.quadTo(3, 0, 2, 2);
1569 path.lineTo(3, 2);
1570 path.close();
1571 path.moveTo(3, 1);
1572 path.lineTo(0, 2);
1573 path.quadTo(0, 2, 1, 2);
1574 path.close();
1575</div>
1576
1577<div id="testQuadratic40xa">
1578path.moveTo(31, 0);
1579path.quadTo(41.3333359, 0, 37.8888893, 13.7777777);
1580path.lineTo(31, 0);
1581path.close();
1582path.moveTo(37.8888893, 13.7777777);
1583path.quadTo(37.2993202, 16.1360455, 36.3061028, 18.8979664);
1584path.lineTo(0, 31);
1585path.lineTo(15.5, 31);
1586path.lineTo(35.5182915, 20.9908543);
1587path.quadTo(33.7454262, 25.5091457, 31, 31);
1588path.lineTo(46.5, 31);
1589path.lineTo(40.2999992, 18.6000004);
1590path.lineTo(46.5, 15.5);
1591path.lineTo(39.8571434, 17.7142868);
1592path.lineTo(37.8888893, 13.7777777);
1593path.close();
1594path.moveTo(36.3061028, 18.8979664);
1595path.quadTo(35.9396667, 19.9169388, 35.5182915, 20.9908543);
1596path.lineTo(40.2999992, 18.6000004);
1597path.lineTo(39.8571434, 17.7142868);
1598path.lineTo(36.3061028, 18.8979664);
1599</div>
1600
1601<div id="testQuadratic40xb">
1602path.moveTo(31, 0);
1603path.quadTo(46.5, 0, 31, 31);
1604path.lineTo(46.5, 31);
1605path.lineTo(31, 0);
1606path.close();
1607path.moveTo(46.5, 15.5);
1608path.lineTo(0, 31);
1609path.quadTo(0, 31, 15.5, 31);
1610path.lineTo(46.5, 15.5);
1611path.close();
1612</div>
1613
1614<div id="testQuadratic41o">
1615path.moveTo(419.33905, 236.377808);
1616path.quadTo(398.847778, 242.58728, 384.255524, 242.58728);
1617path.quadTo(359.417633, 242.58728, 343.738708, 226.080429);
1618path.quadTo(328.059784, 209.573578, 328.059784, 183.286819);
1619path.quadTo(328.059784, 157.724487, 341.875854, 141.372879);
1620path.quadTo(355.691956, 125.021263, 377.218109, 125.021263);
1621path.quadTo(397.605896, 125.021263, 408.731201, 139.51004);
1622path.quadTo(419.856506, 153.99881, 419.856506, 180.699539);
1623path.lineTo(419.752991, 187.012497);
1624path.lineTo(348.861511, 187.012497);
1625path.quadTo(353.311646, 227.063599, 388.084686, 227.063599);
1626path.quadTo(400.814117, 227.063599, 419.33905, 220.233185);
1627path.lineTo(419.33905, 236.377808);
1628path.close();
1629path.moveTo(349.792938, 171.695801);
1630path.lineTo(399.365234, 171.695801);
1631path.quadTo(399.365234, 140.337967, 375.976227, 140.337967);
1632path.quadTo(352.483704, 140.337967, 349.792938, 171.695801);
1633path.close();
1634path.moveTo(378.682587, 277.360321);
1635path.lineTo(381.062897, 259.66333);
1636path.quadTo(398.759888, 268.046112, 415.939423, 268.046112);
1637path.quadTo(450.402008, 268.046112, 450.402008, 231.513718);
1638path.lineTo(450.402008, 213.816727);
1639path.quadTo(439.12146, 237.41272, 413.352142, 237.41272);
1640path.quadTo(393.171356, 237.41272, 381.269867, 222.716965);
1641path.quadTo(369.368378, 208.02121, 369.368378, 183.079834);
1642path.quadTo(369.368378, 157.414017, 382.92572, 141.269379);
1643path.quadTo(396.483093, 125.124756, 418.009247, 125.124756);
1644path.quadTo(436.844666, 125.124756, 450.402008, 140.441467);
1645path.lineTo(450.402008, 127.608543);
1646path.lineTo(470.89325, 127.608543);
1647path.lineTo(470.89325, 209.366608);
1648path.quadTo(470.89325, 235.756866, 468.150757, 248.43454);
1649path.quadTo(465.408234, 261.112213, 457.853363, 269.184509);
1650path.quadTo(444.502991, 283.362823, 416.353394, 283.362823);
1651path.quadTo(396.690063, 283.362823, 378.682587, 277.360321);
1652path.close();
1653path.moveTo(450.402008, 201.087311);
1654path.lineTo(450.402008, 154.412781);
1655path.quadTo(436.948151, 140.441467, 421.113983, 140.441467);
1656path.quadTo(407.039185, 140.441467, 399.070374, 151.722);
1657path.quadTo(391.101532, 163.002533, 391.101532, 182.665863);
1658path.quadTo(391.101532, 219.612228, 417.07782, 219.612228);
1659path.quadTo(434.774841, 219.612228, 450.402008, 201.087311);
1660path.close();
1661path.moveTo(482.9328, 236.377808);
1662path.quadTo(462.441528, 242.58728, 447.849274, 242.58728);
1663path.quadTo(423.011383, 242.58728, 407.332458, 226.080429);
1664path.quadTo(391.653534, 209.573578, 391.653534, 183.286819);
1665path.quadTo(391.653534, 157.724487, 405.469604, 141.372879);
1666path.quadTo(419.285706, 125.021263, 440.811859, 125.021263);
1667path.quadTo(461.199646, 125.021263, 472.324951, 139.51004);
1668path.quadTo(483.450256, 153.99881, 483.450256, 180.699539);
1669path.lineTo(483.346741, 187.012497);
1670path.lineTo(412.455261, 187.012497);
1671path.quadTo(416.905396, 227.063599, 451.678436, 227.063599);
1672path.quadTo(464.407867, 227.063599, 482.9328, 220.233185);
1673path.lineTo(482.9328, 236.377808);
1674path.close();
1675path.moveTo(413.386688, 171.695801);
1676path.lineTo(462.958984, 171.695801);
1677path.quadTo(462.958984, 140.337967, 439.569977, 140.337967);
1678path.quadTo(416.077454, 140.337967, 413.386688, 171.695801);
1679path.close();
1680</div>
1681
1682<div id="testQuadratic41s">
1683path.moveTo(341.875854, 141.372879);
1684path.quadTo(355.691956,125.021263, 377.218109,125.021263);
1685path.quadTo(388.787811,125.021263, 397.374664,129.687164);
1686path.quadTo(406.565979,125.124756, 418.009247,125.124756);
1687path.quadTo(423.583374,125.124756, 428.695251,126.466187);
1688path.quadTo(434.412903,125.021263, 440.811859,125.021263);
1689path.quadTo(449.427277,125.021263, 456.388672,127.608543);
1690path.lineTo(470.89325,127.608543);
1691path.lineTo(470.89325,137.749908);
1692path.quadTo(471.627319,138.601486, 472.324951,139.51004);
1693path.quadTo(483.450256,153.99881, 483.450256,180.699539);
1694path.lineTo(483.346741,187.012497);
1695path.lineTo(470.89325,187.012497);
1696path.lineTo(470.89325,209.366608);
1697path.quadTo(470.89325,217.414856, 470.638184,224.187729);
1698path.quadTo(476.428223,222.631516, 482.9328,220.233185);
1699path.lineTo(482.9328,236.377808);
1700path.quadTo(475.87207,238.517426, 469.511749,239.919785);
1701path.quadTo(468.946777,244.754791, 468.150757,248.43454);
1702path.quadTo(465.408234,261.112213, 457.853363,269.184509);
1703path.quadTo(444.502991,283.362823, 416.353394,283.362823);
1704path.quadTo(396.690063,283.362823, 378.682587,277.360321);
1705path.lineTo(381.062897,259.66333);
1706path.quadTo(398.759888,268.046112, 415.939423,268.046112);
1707path.quadTo(444.719147,268.046112, 449.464905,242.568665);
1708path.quadTo(448.648254,242.58728, 447.849274,242.58728);
1709path.quadTo(433.084625,242.58728, 421.556366,236.754425);
1710path.quadTo(418.89566,237.203537, 416.046783,237.346252);
1711path.quadTo(397.661652,242.58728, 384.255524,242.58728);
1712path.quadTo(359.417633,242.58728, 343.738708,226.080429);
1713path.quadTo(328.059784,209.573578, 328.059784,183.286819);
1714path.quadTo(328.059784,157.724487, 341.875854,141.372879);
1715path.close();
1716path.moveTo(442.014923, 226.179474);
1717path.quadTo(445.951935,226.953491, 450.402008,227.049881);
1718path.lineTo(450.402008,213.816727);
1719path.quadTo(446.904755,221.132065, 442.014923,226.179474);
1720path.close();
1721path.moveTo(395.347717, 206.501785);
1722path.quadTo(392.200165,197.593536, 391.734406,187.012497);
1723path.lineTo(391.197113,187.012497);
1724path.quadTo(391.738647,198.938644, 395.347717,206.501785);
1725path.close();
1726path.moveTo(391.808533, 171.695801);
1727path.lineTo(392.428436,171.695801);
1728path.quadTo(393.693451,162.656265, 397.02359,154.9935);
1729path.quadTo(397.023804,154.992996, 397.024048,154.992493);
1730path.quadTo(393.175995,143.845093, 383.003235,141.177292);
1731path.quadTo(382.964447,141.223267, 382.92572,141.269379);
1732</div>
1733
1734<div id="testQuadratic42o">
1735path.moveTo(421.962158, 236.285355);
1736path.quadTo(400.947845, 242.65332, 385.983124, 242.65332);
1737path.quadTo(360.511261, 242.65332, 344.432129, 225.725143);
1738path.quadTo(328.352997, 208.796951, 328.352997, 181.839218);
1739path.quadTo(328.352997, 155.62442, 342.521729, 138.855438);
1740path.quadTo(356.69046, 122.086449, 378.766083, 122.086449);
1741path.quadTo(399.674255, 122.086449, 411.083527, 136.945038);
1742path.quadTo(422.492798, 151.803635, 422.492798, 179.185898);
1743path.lineTo(422.386688, 185.660004);
1744path.lineTo(349.685699, 185.660004);
1745path.quadTo(354.24942, 226.733398, 389.910034, 226.733398);
1746path.quadTo(402.964386, 226.733398, 421.962158, 219.728638);
1747path.lineTo(421.962158, 236.285355);
1748path.close();
1749path.moveTo(350.6409, 169.952347);
1750path.lineTo(401.478516, 169.952347);
1751path.quadTo(401.478516, 137.794098, 377.492493, 137.794098);
1752path.quadTo(353.40036, 137.794098, 350.6409, 169.952347);
1753path.close();
1754path.moveTo(379.213562, 278.313934);
1755path.lineTo(381.654602, 260.165222);
1756path.quadTo(399.803314, 268.761993, 417.421356, 268.761993);
1757path.quadTo(452.763611, 268.761993, 452.763611, 231.297104);
1758path.lineTo(452.763611, 213.148392);
1759path.quadTo(441.195129, 237.34668, 414.768036, 237.34668);
1760path.quadTo(394.072144, 237.34668, 381.866882, 222.275818);
1761path.quadTo(369.661591, 207.204956, 369.661591, 181.626953);
1762path.quadTo(369.661591, 155.306015, 383.565002, 138.749298);
1763path.quadTo(397.468384, 122.192581, 419.544037, 122.192581);
1764path.quadTo(438.860199, 122.192581, 452.763611, 137.900238);
1765path.lineTo(452.763611, 124.739769);
1766path.lineTo(473.777893, 124.739769);
1767path.lineTo(473.777893, 208.584686);
1768path.quadTo(473.777893, 235.64856, 470.965363, 248.649826);
1769path.quadTo(468.152863, 261.651093, 460.405151, 269.929443);
1770path.quadTo(446.71402, 284.469666, 417.845886, 284.469666);
1771path.quadTo(397.680664, 284.469666, 379.213562, 278.313934);
1772path.close();
1773path.moveTo(452.763611, 200.094055);
1774path.lineTo(452.763611, 152.228165);
1775path.quadTo(438.966339, 137.900238, 422.727997, 137.900238);
1776path.quadTo(408.293945, 137.900238, 400.121704, 149.468719);
1777path.quadTo(391.949493, 161.037186, 391.949493, 181.202423);
1778path.quadTo(391.949493, 219.091827, 418.588837, 219.091827);
1779path.quadTo(436.737549, 219.091827, 452.763611, 200.094055);
1780path.close();
1781path.moveTo(485.555908, 236.285355);
1782path.quadTo(464.541595, 242.65332, 449.576874, 242.65332);
1783path.quadTo(424.105011, 242.65332, 408.025879, 225.725143);
1784path.quadTo(391.946747, 208.796951, 391.946747, 181.839218);
1785path.quadTo(391.946747, 155.62442, 406.115479, 138.855438);
1786path.quadTo(420.28421, 122.086449, 442.359833, 122.086449);
1787path.quadTo(463.268005, 122.086449, 474.677277, 136.945038);
1788path.quadTo(486.086548, 151.803635, 486.086548, 179.185898);
1789path.lineTo(485.980438, 185.660004);
1790path.lineTo(413.279449, 185.660004);
1791path.quadTo(417.84317, 226.733398, 453.503784, 226.733398);
1792path.quadTo(466.558136, 226.733398, 485.555908, 219.728638);
1793path.lineTo(485.555908, 236.285355);
1794path.close();
1795path.moveTo(414.23465, 169.952347);
1796path.lineTo(465.072266, 169.952347);
1797path.quadTo(465.072266, 137.794098, 441.086243, 137.794098);
1798path.quadTo(416.99411, 137.794098, 414.23465, 169.952347);
1799path.close();
1800</div>
1801
1802<div id="testQuadratic42s">
1803path.moveTo(342.521729, 138.855438);
1804path.quadTo(356.69046,122.086449, 378.766083,122.086449);
1805path.quadTo(390.293488,122.086449, 398.933502,126.603004);
1806path.quadTo(408.150299,122.192581, 419.544037,122.192581);
1807path.quadTo(425.108429,122.192581, 430.223633,123.496056);
1808path.quadTo(435.959412,122.086449, 442.359833,122.086449);
1809path.quadTo(451.19516,122.086449, 458.334229,124.739769);
1810path.lineTo(473.777893,124.739769);
1811path.lineTo(473.777893,135.814713);
1812path.quadTo(474.234741,136.368698, 474.677277,136.945038);
1813path.quadTo(486.086548,151.803635, 486.086548,179.185898);
1814path.lineTo(485.980438,185.660004);
1815path.lineTo(473.777893,185.660004);
1816path.lineTo(473.777893,208.584686);
1817path.quadTo(473.777893,216.745773, 473.522156,223.628113);
1818path.quadTo(479.207153,222.069519, 485.555908,219.728638);
1819path.lineTo(485.555908,236.285355);
1820path.quadTo(478.638306,238.381592, 472.376221,239.787796);
1821path.quadTo(471.792389,244.826782, 470.965363,248.649826);
1822path.quadTo(468.152863,261.651093, 460.405151,269.929443);
1823path.quadTo(446.71402,284.469666, 417.845886,284.469666);
1824path.quadTo(397.680664,284.469666, 379.213562,278.313934);
1825path.lineTo(381.654602,260.165222);
1826path.quadTo(399.803314,268.761993, 417.421356,268.761993);
1827path.quadTo(446.944275,268.761993, 451.80542,242.619034);
1828path.quadTo(450.674866,242.65332, 449.576874,242.65332);
1829path.quadTo(434.524628,242.65332, 422.75238,236.741913);
1830path.quadTo(420.864227,237.041901, 418.884674,237.193085);
1831path.quadTo(399.840271,242.65332, 385.983124,242.65332);
1832path.quadTo(360.511261,242.65332, 344.432129,225.725143);
1833path.quadTo(328.352997,208.796951, 328.352997,181.839218);
1834path.quadTo(328.352997,155.62442, 342.521729,138.855438);
1835path.close();
1836path.moveTo(383.823944, 138.443222);
1837path.quadTo(380.900299,137.794098, 377.492493,137.794098);
1838path.quadTo(353.40036,137.794098, 350.6409,169.952347);
1839path.lineTo(370.408203,169.952347);
1840path.quadTo(372.883484,151.469254, 383.565002,138.749298);
1841path.quadTo(383.694122,138.595551, 383.823944,138.443222);
1842path.close();
1843path.moveTo(369.740021, 185.660004);
1844path.lineTo(349.685699,185.660004);
1845path.quadTo(353.983734,224.342361, 385.863525,226.594208);
1846path.quadTo(383.762756,224.616837, 381.866882,222.275818);
1847path.quadTo(370.639954,208.41301, 369.740021,185.660004);
1848path.close();
1849path.moveTo(413.279449, 185.660004);
1850path.quadTo(415.737305,207.780716, 427.214905,217.987976);
1851path.quadTo(440.600586,214.512451, 452.763611,200.094055);
1852path.lineTo(452.763611,185.660004);
1853</div>
1854
1855<div id="testQuadratic43o">
1856path.moveTo(288.755981, 240);
1857path.lineTo(288.755981, 102.232819);
1858path.lineTo(315.843994, 102.232819);
1859path.lineTo(354.009216, 208.816208);
1860path.lineTo(393.291473, 102.232819);
1861path.lineTo(417.493835, 102.232819);
1862path.lineTo(417.493835, 240);
1863path.lineTo(399.248962, 240);
1864path.lineTo(399.248962, 127.92453);
1865path.lineTo(361.269928, 230.784485);
1866path.lineTo(342.373474, 230.784485);
1867path.lineTo(305.511444, 127.645271);
1868path.lineTo(305.511444, 240);
1869path.lineTo(288.755981, 240);
1870path.close();
1871path.moveTo(397.864014, 236.741989);
1872path.quadTo(379.433014, 242.327148, 366.307892, 242.327148);
1873path.quadTo(343.967255, 242.327148, 329.864746, 227.479935);
1874path.quadTo(315.762238, 212.632736, 315.762238, 188.988907);
1875path.quadTo(315.762238, 165.996674, 328.189209, 151.289093);
1876path.quadTo(340.61618, 136.581512, 359.978058, 136.581512);
1877path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
1878path.quadTo(398.329468, 162.645584, 398.329468, 186.661758);
1879path.lineTo(398.236359, 192.339996);
1880path.lineTo(334.472504, 192.339996);
1881path.quadTo(338.475189, 228.364258, 369.752075, 228.364258);
1882path.quadTo(381.20163, 228.364258, 397.864014, 222.220581);
1883path.lineTo(397.864014, 236.741989);
1884path.close();
1885path.moveTo(335.310272, 178.563278);
1886path.lineTo(379.898438, 178.563278);
1887path.quadTo(379.898438, 150.358246, 358.861023, 150.358246);
1888path.quadTo(337.730499, 150.358246, 335.310272, 178.563278);
1889path.close();
1890path.moveTo(346.052765, 240);
1891path.lineTo(346.052765, 138.908661);
1892path.lineTo(364.390686, 138.908661);
1893path.lineTo(364.390686, 157.898193);
1894path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
1895path.quadTo(398.832489, 136.674606, 401.904327, 137.140045);
1896path.lineTo(401.904327, 154.267853);
1897path.quadTo(397.156952, 152.685394, 393.526611, 152.685394);
1898path.quadTo(376.119537, 152.685394, 364.390686, 173.350464);
1899path.lineTo(364.390686, 240);
1900path.lineTo(346.052765, 240);
1901path.close();
1902path.moveTo(362.792297, 273.604034);
1903path.lineTo(364.933289, 257.68634);
1904path.quadTo(380.850983, 265.226288, 396.303253, 265.226288);
1905path.quadTo(427.300842, 265.226288, 427.300842, 232.366959);
1906path.lineTo(427.300842, 216.449265);
1907path.quadTo(417.15448, 237.672852, 393.976105, 237.672852);
1908path.quadTo(375.824341, 237.672852, 365.119446, 224.454651);
1909path.quadTo(354.414581, 211.23645, 354.414581, 188.802734);
1910path.quadTo(354.414581, 165.717422, 366.608826, 151.196014);
1911path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
1912path.quadTo(415.106598, 136.674606, 427.300842, 150.451324);
1913path.lineTo(427.300842, 138.908661);
1914path.lineTo(445.731873, 138.908661);
1915path.lineTo(445.731873, 212.446564);
1916path.quadTo(445.731873, 236.183472, 443.265106, 247.586502);
1917path.quadTo(440.798309, 258.989532, 434.003052, 266.250244);
1918path.quadTo(421.994965, 279.002991, 396.675598, 279.002991);
1919path.quadTo(378.989258, 279.002991, 362.792297, 273.604034);
1920path.close();
1921path.moveTo(427.300842, 204.999695);
1922path.lineTo(427.300842, 163.017929);
1923path.quadTo(415.199677, 150.451324, 400.95755, 150.451324);
1924path.quadTo(388.297852, 150.451324, 381.130249, 160.597687);
1925path.quadTo(373.962616, 170.744064, 373.962616, 188.430389);
1926path.quadTo(373.962616, 221.662079, 397.327179, 221.662079);
1927path.quadTo(413.244873, 221.662079, 427.300842, 204.999695);
1928path.close();
1929path.moveTo(461.457764, 236.741989);
1930path.quadTo(443.026764, 242.327148, 429.901642, 242.327148);
1931path.quadTo(407.561005, 242.327148, 393.458496, 227.479935);
1932path.quadTo(379.355988, 212.632736, 379.355988, 188.988907);
1933path.quadTo(379.355988, 165.996674, 391.782959, 151.289093);
1934path.quadTo(404.20993, 136.581512, 423.571808, 136.581512);
1935path.quadTo(441.909729, 136.581512, 451.916473, 149.613556);
1936path.quadTo(461.923218, 162.645584, 461.923218, 186.661758);
1937path.lineTo(461.830109, 192.339996);
1938path.lineTo(398.066254, 192.339996);
1939path.quadTo(402.068939, 228.364258, 433.345825, 228.364258);
1940path.quadTo(444.79538, 228.364258, 461.457764, 222.220581);
1941path.lineTo(461.457764, 236.741989);
1942path.close();
1943path.moveTo(398.904022, 178.563278);
1944path.lineTo(443.492188, 178.563278);
1945path.quadTo(443.492188, 150.358246, 422.454773, 150.358246);
1946path.quadTo(401.324249, 150.358246, 398.904022, 178.563278);
1947path.close();
1948</div>
1949
1950<div id="testQuadratic43s">
1951path.moveTo(288.755981, 240);
1952path.lineTo(288.755981,102.232819);
1953path.lineTo(315.843994,102.232819);
1954path.lineTo(331.979736,147.294876);
1955path.quadTo(343.453125,136.581512, 359.978058,136.581512);
1956path.quadTo(370.869446,136.581512, 378.822021,141.178574);
1957path.quadTo(378.893585,141.140915, 378.965302,141.103577);
1958path.lineTo(393.291473,102.232819);
1959path.lineTo(417.493835,102.232819);
1960path.lineTo(417.493835,136.965759);
1961path.quadTo(420.44223,136.581512, 423.571808,136.581512);
1962path.quadTo(431.320984,136.581512, 437.582458,138.908661);
1963path.lineTo(445.731873,138.908661);
1964path.lineTo(445.731873,143.392502);
1965path.quadTo(449.143951,146.002823, 451.916473,149.613556);
1966path.quadTo(461.923218,162.645584, 461.923218,186.661758);
1967path.lineTo(461.830109,192.339996);
1968path.lineTo(445.731873,192.339996);
1969path.lineTo(445.731873,212.446564);
1970path.quadTo(445.731873,220.39856, 445.455017,226.966339);
1971path.quadTo(452.7435,225.43367, 461.457764,222.220581);
1972path.lineTo(461.457764,236.741989);
1973path.quadTo(452.250824,239.531982, 444.367889,240.928268);
1974path.quadTo(443.897583,244.662796, 443.265106,247.586502);
1975path.quadTo(440.798309,258.989532, 434.003052,266.250244);
1976path.quadTo(421.994965,279.002991, 396.675598,279.002991);
1977path.quadTo(378.989258,279.002991, 362.792297,273.604034);
1978path.lineTo(364.933289,257.68634);
1979path.quadTo(380.850983,265.226288, 396.303253,265.226288);
1980path.quadTo(422.230743,265.226288, 426.471558,242.237076);
1981path.quadTo(419.570892,241.869324, 413.503387,240);
1982path.lineTo(399.248962,240);
1983path.lineTo(399.248962,237.37915);
1984path.quadTo(397.047638,237.633072, 394.711517,237.667465);
1985path.quadTo(378.296356,242.327148, 366.307892,242.327148);
1986path.quadTo(357.463165,242.327148, 349.909637,240);
1987path.lineTo(346.052765,240);
1988path.lineTo(346.052765,238.625916);
1989path.quadTo(336.926056,234.914124, 329.864746,227.479935);
1990path.quadTo(315.762238,212.632736, 315.762238,188.988907);
1991path.quadTo(315.762238,176.540054, 319.405273,166.519882);
1992path.lineTo(305.511444,127.645271);
1993path.lineTo(305.511444,240);
1994path.lineTo(288.755981,240);
1995path.close();
1996path.moveTo(375.464813, 192.339996);
1997path.lineTo(374.267029,195.583939);
1998path.quadTo(375.987579,214.575378, 387.432068,219.736267);
1999path.quadTo(380.122528,208.101486, 379.428741,192.339996);
2000path.lineTo(375.464813,192.339996);
2001path.close();
2002path.moveTo(427.300842, 178.563278);
2003path.lineTo(427.300842,163.017929);
2004path.quadTo(422.561523,158.096329, 417.493835,155.102234);
2005path.lineTo(417.493835,178.563278);
2006path.lineTo(427.300842,178.563278);
2007path.close();
2008path.moveTo(427.300842, 192.339996);
2009path.lineTo(417.493835,192.339996);
2010path.lineTo(417.493835,214.429169);
2011path.quadTo(422.505676,210.684036, 427.300842,204.999695);
2012path.lineTo(427.300842,192.339996);
2013path.close();
2014path.moveTo(420.700134, 226.556015);
2015path.quadTo(423.794342,227.54834, 427.300842,227.996094);
2016path.lineTo(427.300842,216.449265);
2017path.quadTo(424.497772,222.312531, 420.700134,226.556015);
2018path.close();
2019path.moveTo(368.744965, 228.354782);
2020path.quadTo(366.836426,226.574738, 365.119446,224.454651);
2021path.quadTo(364.748657,223.996796, 364.390686,223.527878);
2022path.lineTo(364.390686,228.077774);
2023path.quadTo(366.495239,228.312164, 368.744965,228.354782);
2024path.close();
2025path.moveTo(399.248962, 199.701065);
2026path.lineTo(399.248962,192.339996);
2027path.lineTo(398.236359,192.339996);
2028path.lineTo(398.066254,192.339996);
2029path.quadTo(398.498535,196.230621, 399.248962,199.701065);
2030path.close();
2031path.moveTo(399.248962, 178.563278);
2032path.lineTo(399.248962,175.376892);
2033path.quadTo(399.04483,176.922348, 398.904022,178.563278);
2034path.lineTo(399.248962,178.563278);
2035path.close();
2036path.moveTo(399.248962, 136.688828);
2037path.lineTo(399.248962,127.92453);
2038path.lineTo(396.018158,136.674606);
2039path.quadTo(396.029053,136.674606, 396.039917,136.674606);
2040path.quadTo(396.513672,136.674606, 396.995453,136.688004);
2041path.quadTo(397.576904,136.674606, 398.164948,136.674606);
2042path.quadTo(398.709412,136.674606, 399.248962,136.688828);
2043path.close();
2044path.moveTo(346.052765, 178.563278);
2045path.lineTo(346.052765,154.02713);
2046path.quadTo(340.97113,157.621338, 338.22525,164.736588);
2047path.lineTo(343.1763,178.563278);
2048path.lineTo(346.052765,178.563278);
2049path.close();
2050path.moveTo(364.390686, 150.922379);
2051path.lineTo(364.390686,154.048065);
2052path.quadTo(365.340851,152.726639, 366.38147,151.468765);
2053path.quadTo(365.420258,151.14975, 364.390686,150.922379);
2054path.close();
2055path.moveTo(367.863586, 152.032623);
2056path.quadTo(367.144043,151.721848, 366.38147,151.468765);
2057</div>
2058
2059<div id="testQuadratic44o">
2060path.moveTo(354.009216, 208.816208);
2061path.lineTo(393.291473, 102.232819);
2062path.lineTo(399.248962, 127.92453);
2063path.lineTo(361.269928, 230.784485);
2064path.lineTo(354.009216, 208.816208);
2065path.close();
2066path.moveTo(328.189209, 151.289093);
2067path.quadTo(340.61618, 136.581512, 359.978058, 136.581512);
2068path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2069path.lineTo(328.189209, 151.289093);
2070path.close();
2071path.moveTo(346.052765, 138.908661);
2072path.lineTo(364.390686, 138.908661);
2073path.lineTo(364.390686, 157.898193);
2074path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2075path.lineTo(346.052765, 138.908661);
2076path.close();
2077</div>
2078
2079<div id="testQuadratic44s">
2080path.moveTo(380.33902, 137.376312);
2081path.lineTo(393.291473,102.232819);
2082path.lineTo(399.248962,127.92453);
2083path.lineTo(396.018158,136.674606);
2084path.quadTo(396.029053,136.674606, 396.039917,136.674606);
2085path.lineTo(396.017792,136.675598);
2086path.lineTo(361.269928,230.784485);
2087path.lineTo(354.009216,208.816208);
2088path.lineTo(375.699249,149.965286);
2089path.lineTo(369.22699,150.14563);
2090path.quadTo(373.524384,144.511566, 378.917297,141.233871);
2091path.lineTo(380.33902,137.376312);
2092path.close();
caryclark@google.coma461ff02012-10-11 12:54:23 +00002093path.moveTo(380.33902, 137.376312);
2094path.lineTo(378.917297,141.233856);
2095path.quadTo(375.048248,138.978912, 370.480499,137.816925);
2096path.lineTo(380.33902,137.376312);
2097path.close();
caryclark@google.com6aea33f2012-10-09 14:11:58 +00002098path.moveTo(392.55661, 136.830276);
caryclark@google.coma461ff02012-10-11 12:54:23 +00002099path.lineTo(380.33902,137.376312);
2100</div>
2101
2102<div id="testQuadratic45o">
2103path.moveTo(315.843994, 102.232819);
2104path.lineTo(354.009216, 208.816208);
2105path.lineTo(393.291473, 102.232819);
2106path.lineTo(399.248962, 127.92453);
2107path.lineTo(361.269928, 230.784485);
2108path.lineTo(342.373474, 230.784485);
2109path.lineTo(305.511444, 127.645271);
2110path.lineTo(315.843994, 102.232819);
2111path.close();
2112path.moveTo(366.307892, 242.327148);
2113path.quadTo(343.967255, 242.327148, 329.864746, 227.479935);
2114path.quadTo(315.762238, 212.632736, 315.762238, 188.988907);
2115path.quadTo(315.762238, 165.996674, 328.189209, 151.289093);
2116path.quadTo(340.61618, 136.581512, 359.978058, 136.581512);
2117path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2118path.quadTo(398.329468, 162.645584, 398.329468, 186.661758);
2119path.lineTo(398.236359, 192.339996);
2120path.lineTo(334.472504, 192.339996);
2121path.quadTo(338.475189, 228.364258, 369.752075, 228.364258);
2122path.quadTo(381.20163, 228.364258, 397.864014, 222.220581);
2123path.lineTo(366.307892, 242.327148);
2124path.close();
2125path.moveTo(335.310272, 178.563278);
2126path.lineTo(379.898438, 178.563278);
2127path.quadTo(379.898438, 150.358246, 358.861023, 150.358246);
2128path.quadTo(337.730499, 150.358246, 335.310272, 178.563278);
2129path.close();
2130path.moveTo(346.052765, 240);
2131path.lineTo(346.052765, 138.908661);
2132path.lineTo(364.390686, 138.908661);
2133path.lineTo(364.390686, 157.898193);
2134path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2135path.lineTo(401.904327, 154.267853);
2136path.quadTo(397.156952, 152.685394, 393.526611, 152.685394);
2137path.quadTo(376.119537, 152.685394, 364.390686, 173.350464);
2138path.lineTo(364.390686, 240);
2139path.lineTo(346.052765, 240);
2140path.close();
2141path.moveTo(396.303253, 265.226288);
2142path.quadTo(427.300842, 265.226288, 427.300842, 232.366959);
2143path.lineTo(427.300842, 216.449265);
2144path.quadTo(417.15448, 237.672852, 393.976105, 237.672852);
2145path.quadTo(375.824341, 237.672852, 365.119446, 224.454651);
2146path.quadTo(354.414581, 211.23645, 354.414581, 188.802734);
2147path.quadTo(354.414581, 165.717422, 366.608826, 151.196014);
2148path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
2149path.lineTo(396.303253, 265.226288);
2150path.close();
2151path.moveTo(400.95755, 150.451324);
2152path.quadTo(388.297852, 150.451324, 381.130249, 160.597687);
2153path.quadTo(373.962616, 170.744064, 373.962616, 188.430389);
2154path.quadTo(373.962616, 221.662079, 397.327179, 221.662079);
2155path.lineTo(400.95755, 150.451324);
2156path.close();
2157path.moveTo(429.901642, 242.327148);
2158path.quadTo(407.561005, 242.327148, 393.458496, 227.479935);
2159path.quadTo(379.355988, 212.632736, 379.355988, 188.988907);
2160path.quadTo(379.355988, 165.996674, 391.782959, 151.289093);
2161path.quadTo(404.20993, 136.581512, 423.571808, 136.581512);
2162path.lineTo(429.901642, 242.327148);
2163path.close();
2164</div>
2165
2166<div id="testQuadratic45s">
2167path.moveTo(305.511444, 127.645271);
2168path.lineTo(315.843994,102.232819);
2169path.lineTo(331.979736,147.294876);
2170path.quadTo(343.453125,136.581512, 359.978058,136.581512);
2171path.quadTo(370.869446,136.581512, 378.822021,141.178574);
2172path.quadTo(378.893585,141.140915, 378.965302,141.103577);
2173path.lineTo(393.291473,102.232819);
2174path.lineTo(399.248962,127.92453);
2175path.lineTo(396.018158,136.674606);
2176path.quadTo(396.029053,136.674606, 396.039917,136.674606);
2177path.lineTo(396.054596,136.718628);
2178path.quadTo(397.098907,136.674606, 398.164948,136.674606);
2179path.lineTo(398.076477,142.784256);
2180path.lineTo(398.697632,144.647751);
2181path.quadTo(409.233032,136.581512, 423.571808,136.581512);
2182path.lineTo(429.901642,242.327148);
2183path.quadTo(428.161621,242.327148, 426.471558,242.237076);
2184path.quadTo(427.300842,237.741562, 427.300842,232.366959);
2185path.lineTo(427.300842,216.449265);
2186path.quadTo(419.710114,232.327133, 404.8255,236.326401);
2187path.quadTo(400.557983,233.971252, 396.803375,230.691772);
2188path.lineTo(396.7034,237.596863);
2189path.quadTo(395.363068,237.672852, 393.976105,237.672852);
2190path.quadTo(385.309937,237.672852, 378.341187,234.659912);
2191path.lineTo(366.307892,242.327148);
2192path.quadTo(357.463165,242.327148, 349.909637,240);
2193path.lineTo(346.052765,240);
2194path.lineTo(346.052765,238.625916);
2195path.quadTo(336.926056,234.914124, 329.864746,227.479935);
2196path.quadTo(315.762238,212.632736, 315.762238,188.988907);
2197path.quadTo(315.762238,176.540054, 319.405273,166.519882);
2198path.lineTo(305.511444,127.645271);
2199path.close();
2200path.moveTo(375.464813, 192.339996);
2201path.lineTo(374.267029,195.583939);
2202path.quadTo(375.987579,214.575378, 387.432068,219.736267);
2203path.quadTo(380.122528,208.101486, 379.428741,192.339996);
2204path.lineTo(375.464813,192.339996);
2205path.close();
2206path.moveTo(397.925934, 153.178131);
2207path.lineTo(397.615479,174.615356);
2208path.quadTo(398.329468,180.246704, 398.329468,186.661758);
2209path.lineTo(398.236359,192.339996);
2210path.lineTo(397.358795,192.339996);
2211path.lineTo(396.934174,221.659714);
2212path.quadTo(397.129852,221.662079, 397.327179,221.662079);
2213path.lineTo(400.781189,153.910889);
2214path.quadTo(399.295654,153.462463, 397.925934,153.178131);
2215path.close();
2216path.moveTo(400.914398, 151.298019);
2217path.lineTo(400.632721,150.453003);
2218path.quadTo(400.794678,150.451324, 400.95755,150.451324);
2219path.lineTo(400.914398,151.298019);
2220path.close();
2221path.moveTo(368.744965, 228.354782);
2222path.quadTo(366.836426,226.574738, 365.119446,224.454651);
2223path.quadTo(364.748657,223.996796, 364.390686,223.527878);
2224path.lineTo(364.390686,228.077774);
2225path.quadTo(366.495239,228.312164, 368.744965,228.354782);
2226path.close();
2227path.moveTo(346.052765, 178.563278);
2228path.lineTo(346.052765,154.02713);
2229path.quadTo(340.97113,157.621338, 338.22525,164.736588);
2230path.lineTo(343.1763,178.563278);
2231path.lineTo(346.052765,178.563278);
2232path.close();
2233path.moveTo(364.390686, 150.922379);
2234path.lineTo(364.390686,154.048065);
2235path.quadTo(365.340851,152.726639, 366.38147,151.468765);
2236path.quadTo(365.420258,151.14975, 364.390686,150.922379);
2237path.close();
2238path.moveTo(367.863586, 152.032623);
2239path.quadTo(367.144043,151.721848, 366.38147,151.468765);
2240</div>
2241
2242<div id="testQuadratic46o">
2243path.moveTo(366.608826, 151.196014);
2244path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
2245path.lineTo(354.009216, 208.816208);
2246path.lineTo(393.291473, 102.232819);
2247path.lineTo(359.978058, 136.581512);
2248path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2249path.lineTo(364.390686, 157.898193);
2250path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2251path.lineTo(350, 120);
2252path.lineTo(366.608826, 151.196014);
2253path.close();
2254</div>
2255
2256<div id="testQuadratic46s">
2257path.moveTo(369.285553, 126.984779);
2258path.lineTo(393.291473,102.232819);
2259path.lineTo(382.416199,131.740402);
2260path.lineTo(396.039917,136.674606);
2261path.quadTo(387.290802,136.674606, 380.294495,140.44487);
2262path.quadTo(379.623352,140.760971, 378.965302,141.103577);
2263path.lineTo(378.917297,141.233856);
2264path.quadTo(378.86972,141.206131, 378.822021,141.178574);
2265path.quadTo(372.011871,144.761871, 366.608826,151.196014);
2266path.lineTo(350,120);
2267path.lineTo(369.285553,126.984779);
2268path.close();
2269path.moveTo(374.00174, 154.571106);
2270path.lineTo(378.917297,141.233871);
2271path.quadTo(378.917297,141.233871, 378.917297,141.233856);
2272path.quadTo(384.294891,144.368011, 388.322723,149.613556);
2273path.lineTo(374.00174,154.571106);
2274path.close();
2275path.moveTo(378.917297, 141.233871);
2276path.quadTo(370.233887,146.511475, 364.390686,157.898193);
2277path.lineTo(374.00174,154.571106);
2278path.lineTo(354.009216,208.816208);
2279path.lineTo(398.164948,136.674606);
2280path.quadTo(388.299255,136.674606, 380.294495,140.44487);
caryclark@google.com6aea33f2012-10-09 14:11:58 +00002281</div>
2282
caryclark@google.comc91dfe42012-10-16 12:06:27 +00002283<div id="testQuadratic47o">
2284path.moveTo(343.939362, 212.598053);
2285path.lineTo(378.457642, 118.940636);
2286path.lineTo(383.692657, 141.516571);
2287path.lineTo(350.319519, 231.902115);
2288path.lineTo(343.939362, 212.598053);
2289path.close();
2290path.moveTo(325.429016, 162.047577);
2291path.quadTo(336.348907, 149.123688, 353.36264, 149.123688);
2292path.quadTo(369.476624, 149.123688, 378.269806, 160.575241);
2293path.lineTo(325.429016, 162.047577);
2294path.close();
2295path.moveTo(370.867188, 186.014069);
2296path.quadTo(370.867188, 161.229614, 352.381104, 161.229614);
2297path.quadTo(333.813202, 161.229614, 331.686493, 186.014069);
2298path.lineTo(370.867188, 186.014069);
2299path.close();
2300path.moveTo(353.161499, 195.011719);
2301path.quadTo(353.161499, 174.726105, 363.876862, 161.96579);
2302path.lineTo(353.161499, 195.011719);
2303path.close();
2304</div>
2305
2306<div id="testQuadratic47s">
2307path.moveTo(366.466309, 151.476364);
2308path.lineTo(378.457642,118.940636);
2309path.lineTo(383.692657,141.516571);
2310path.lineTo(377.159943,159.209305);
2311path.quadTo(377.728729,159.87059, 378.269806,160.575241);
2312path.lineTo(376.638824,160.620682);
2313path.lineTo(370.26593,177.8806);
2314path.quadTo(368.708496,168.390671, 363.116943,164.309357);
2315path.lineTo(356.079041,186.014069);
2316path.lineTo(367.262817,186.014069);
2317path.lineTo(350.319519,231.902115);
2318path.lineTo(343.939362,212.598053);
2319path.lineTo(353.736816,186.014923);
2320path.lineTo(353.737122,186.014069);
2321path.lineTo(353.736938,186.014069);
2322path.quadTo(353.736877,186.014496, 353.736816,186.014923);
2323path.quadTo(353.161499,190.31131, 353.161499,195.011719);
2324</div>
2325
caryclark@google.comfb51afb2012-10-19 15:54:16 +00002326<div id="testQuadratic48o">
2327path.moveTo(366.608826, 151.196014);
2328path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
2329path.lineTo(354.009216, 208.816208);
2330path.lineTo(393.291473, 102.232819);
2331path.lineTo(359.978058, 136.581512);
2332path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2333path.lineTo(364.390686, 157.898193);
2334path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2335path.lineTo(350, 120);
2336path.lineTo(366.608826, 151.196014);
2337path.close();
2338</div>
2339
2340<div id="testQuadratic48s">
2341path.moveTo(369.285553, 126.984779);
2342path.lineTo(393.291473,102.232819);
2343path.lineTo(382.416199,131.740402);
2344path.lineTo(396.039917,136.674606);
2345path.quadTo(387.290802,136.674606, 380.294495,140.44487);
2346path.quadTo(379.623352,140.760971, 378.965302,141.103577);
2347path.lineTo(378.917297,141.233856);
2348path.quadTo(378.86972,141.206131, 378.822021,141.178574);
2349path.quadTo(372.011871,144.761871, 366.608826,151.196014);
2350path.lineTo(350,120);
2351path.lineTo(369.285553,126.984779);
2352path.close();
2353</div>
2354
2355<div id="testQuadratic49s">
2356path.moveTo(366.400513, 204.162521);
2357path.lineTo(411.545044, 81.6732483);
2358path.lineTo(366.400513, 204.162521);
2359path.close();
2360path.moveTo(331.585693, 138.050415);
2361path.quadTo(345.867188, 121.147957, 368.11853, 121.147957);
2362path.quadTo(389.193115, 121.147957, 400.693176, 136.124817);
2363path.lineTo(331.585693, 138.050415);
2364path.close();
2365path.moveTo(369.863983, 145.645813);
2366path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2367path.lineTo(369.863983, 145.645813);
2368path.close();
2369path.moveTo(369.970581, 137.94342);
2370path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2371path.lineTo(369.970581, 137.94342);
2372path.close();
2373</div>
2374
2375<div id="testQuadratic50o">
2376path.moveTo(366.400513, 204.162521);
2377path.lineTo(411.545044, 81.6732483);
2378path.lineTo(366.400513, 204.162521);
2379path.close();
2380path.moveTo(331.585693, 138.050415);
2381path.quadTo(345.867188, 121.147957, 368.11853, 121.147957);
2382path.quadTo(389.193115, 121.147957, 400.693176, 136.124817);
2383path.lineTo(331.585693, 138.050415);
2384path.close();
2385path.moveTo(369.863983, 145.645813);
2386path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2387path.lineTo(369.863983, 145.645813);
2388path.close();
2389path.moveTo(369.970581, 137.94342);
2390path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2391path.lineTo(369.970581, 137.94342);
2392path.close();
2393</div>
2394
2395<div id="testQuadratic50s">
2396path.moveTo(331.585693, 138.050415);
2397path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2398path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2399path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2400path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2401path.lineTo(395.061676,126.397095);
2402path.lineTo(391.979187,127.81559);
2403path.quadTo(393.010406,128.517273, 393.994415,129.292801);
2404path.quadTo(394.053131,129.339066, 394.111664,129.385605);
2405path.lineTo(393.910492,129.520508);
2406path.lineTo(383.340973,136.608322);
2407path.lineTo(375.350006,136.830978);
2408path.quadTo(376.20224,135.708145, 377.092102,134.66626);
2409path.lineTo(372.197113,136.918823);
2410</div>
2411
2412<div id="testQuadratic51">
2413path.moveTo(369.863983, 145.645813);
2414path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2415path.lineTo(369.863983, 145.645813);
2416path.close();
2417path.moveTo(369.970581, 137.94342);
2418path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2419path.lineTo(369.970581, 137.94342);
2420path.close();
2421</div>
2422
caryclark@google.com185c7c42012-10-19 18:26:24 +00002423<div id="testQuadratic52o">
2424path.moveTo(366.400513, 204.162521);
2425path.lineTo(411.545044, 81.6732483);
2426path.lineTo(366.400513, 204.162521);
2427path.close();
2428path.moveTo(331.585693, 138.050415);
2429path.quadTo(345.867188, 121.147957, 368.11853, 121.147957);
2430path.quadTo(389.193115, 121.147957, 400.693176, 136.124817);
2431path.lineTo(331.585693, 138.050415);
2432path.close();
2433path.moveTo(369.863983, 145.645813);
2434path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2435path.lineTo(369.863983, 145.645813);
2436path.close();
2437path.moveTo(369.970581, 137.94342);
2438path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2439path.lineTo(369.970581, 137.94342);
2440path.close();
2441</div>
2442
2443<div id="testQuadratic52s">
2444path.moveTo(331.585693, 138.050415);
2445path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2446path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2447path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2448path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2449path.close();
2450path.moveTo(383.340973, 136.608322);
2451path.lineTo(369.863983,145.645813);
2452path.quadTo(372.378204,140.746292, 375.350006,136.830978);
2453path.lineTo(372.197113,136.918823);
2454path.lineTo(369.970581,137.94342);
2455path.quadTo(370.390961,137.442825, 370.818756,136.95723);
2456path.lineTo(331.585693,138.050415);
2457path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2458path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2459path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2460path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2461path.close();
2462path.moveTo(383.340973, 136.608322);
2463path.lineTo(391.380798,136.384293);
2464path.lineTo(400.693176,136.124817);
2465path.quadTo(397.721985,132.255341, 394.111664,129.385605);
2466path.lineTo(406.236359,121.254936);
2467path.quadTo(406.236176,121.254936, 406.235992,121.254936);
2468path.lineTo(406.235992,121.254936);
2469path.quadTo(401.232697,121.254936, 396.645874,122.098694);
2470path.quadTo(391.577667,123.030998, 387.017914,124.993469);
2471path.quadTo(378.797424,121.147957, 368.11853,121.147957);
2472path.quadTo(345.867188,121.147957, 331.585693,138.050415);
2473path.lineTo(370.818756,136.95723);
2474path.quadTo(370.390961,137.442825, 369.970581,137.94342);
2475path.lineTo(372.197113,136.918823);
2476path.lineTo(375.350006,136.830978);
2477path.quadTo(372.378204,140.746292, 369.863983,145.645813);
2478path.lineTo(383.340973,136.608322);
2479path.close();
2480</div>
2481
caryclark@google.comf839c032012-10-26 21:03:50 +00002482<div id="testQuadratic52sa">
2483path.moveTo(331.585693, 138.050415);
2484path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2485path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2486path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2487path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2488path.close();
2489</div>
2490
2491<div id="testQuadratic52sb">
2492path.moveTo(383.340973, 136.608322);
2493path.lineTo(369.863983,145.645813);
2494path.quadTo(372.378204,140.746292, 375.350006,136.830978);
2495path.lineTo(372.197113,136.918823);
2496path.lineTo(369.970581,137.94342);
2497path.quadTo(370.390961,137.442825, 370.818756,136.95723);
2498path.lineTo(331.585693,138.050415);
2499path.quadTo(345.867188,121.147957, 368.11853,121.147957);
2500path.quadTo(378.797424,121.147957, 387.017914,124.993469);
2501path.quadTo(391.577667,123.030998, 396.645874,122.098694);
2502path.quadTo(401.232697,121.254936, 406.235992,121.254936);
2503path.close();
2504</div>
2505
2506<div id="testQuadratic52sc">
2507path.moveTo(383.340973, 136.608322);
2508path.lineTo(391.380798,136.384293);
2509path.lineTo(400.693176,136.124817);
2510path.quadTo(397.721985,132.255341, 394.111664,129.385605);
2511path.lineTo(406.236359,121.254936);
2512path.quadTo(406.236176,121.254936, 406.235992,121.254936);
2513path.lineTo(406.235992,121.254936);
2514path.quadTo(401.232697,121.254936, 396.645874,122.098694);
2515path.quadTo(391.577667,123.030998, 387.017914,124.993469);
2516path.quadTo(378.797424,121.147957, 368.11853,121.147957);
2517path.quadTo(345.867188,121.147957, 331.585693,138.050415);
2518path.lineTo(370.818756,136.95723);
2519path.quadTo(370.390961,137.442825, 369.970581,137.94342);
2520path.lineTo(372.197113,136.918823);
2521path.lineTo(375.350006,136.830978);
2522path.quadTo(372.378204,140.746292, 369.863983,145.645813);
2523path.lineTo(383.340973,136.608322);
2524path.close();
2525</div>
2526
2527<div id="testQuadratic53o">
2528path.moveTo(303.12088, 141.299606);
2529path.lineTo(330.463562, 217.659027);
2530path.lineTo(303.12088, 141.299606);
2531path.close();
2532path.moveTo(371.919067, 205.854996);
2533path.lineTo(326.236786, 205.854996);
2534path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2535path.lineTo(371.919067, 205.854996);
2536path.close();
2537</div>
2538
2539<div id="testQuadratic53s">
2540path.moveTo(326.236786,205.854996);
2541path.lineTo(326.236786,205.854996);
2542path.close();
2543path.moveTo(371.919067,205.854996);
2544path.lineTo(326.236786,205.854996);
2545</div>
2546
2547<div id="testQuadratic54">
2548path.moveTo(303.12088, 141.299606);
2549path.lineTo(330.463562, 217.659027);
2550path.lineTo(358.606506, 141.299606);
2551path.lineTo(303.12088, 141.299606);
2552path.close();
2553path.moveTo(371.919067, 205.854996);
2554path.lineTo(326.236786, 205.854996);
2555path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2556path.lineTo(371.919067, 205.854996);
2557path.close();
2558</div>
2559
2560<div id="testQuadratic55o">
2561path.moveTo(303.12088, 141.299606);
2562path.lineTo(330.463562, 217.659027);
2563path.lineTo(358.606506, 141.299606);
2564path.lineTo(303.12088, 141.299606);
2565path.close();
2566path.moveTo(326.236786, 205.854996);
2567path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2568path.lineTo(326.236786, 205.854996);
2569path.close();
2570</div>
2571
2572<div id="testQuadratic55s">
2573path.moveTo(326.236786,205.854996);
2574path.lineTo(303.12088,141.299606);
2575path.lineTo(358.606506,141.299606);
2576path.lineTo(332.468719,212.218475);
2577path.lineTo(351.512085,231.663818);
2578path.quadTo(329.104431,231.663818, 326.236786,205.854996);
2579path.close();
2580</div>
2581
2582<div id="testQuadratic56o">
2583path.moveTo(366.608826, 151.196014);
2584path.quadTo(378.803101, 136.674606, 398.164948, 136.674606);
2585path.lineTo(354.009216, 208.816208);
2586path.lineTo(393.291473, 102.232819);
2587path.lineTo(359.978058, 136.581512);
2588path.quadTo(378.315979, 136.581512, 388.322723, 149.613556);
2589path.lineTo(364.390686, 157.898193);
2590path.quadTo(375.281769, 136.674606, 396.039917, 136.674606);
2591path.lineTo(350, 120);
2592path.lineTo(366.608826, 151.196014);
2593path.close();
2594</div>
2595
2596<div id="testQuadratic56s">
2597path.moveTo(369.285553,126.984779);
2598path.lineTo(393.291473,102.232819);
2599path.lineTo(382.416199,131.740402);
2600path.lineTo(396.039917,136.674606);
2601path.quadTo(387.290802,136.674606, 380.294495,140.44487);
2602path.quadTo(379.623352,140.760971, 378.965302,141.103577);
2603path.lineTo(378.917297,141.233856);
2604path.quadTo(378.86972,141.206131, 378.822021,141.178574);
2605path.quadTo(372.011871,144.761871, 366.608826,151.196014);
2606path.lineTo(350,120);
2607path.lineTo(369.285553,126.984779);
2608path.close();
2609path.moveTo(378.917297,141.233871);
2610path.lineTo(378.917297,141.233856);
2611path.quadTo(378.86972,141.206131, 378.822021,141.178574);
2612path.quadTo(372.011871,144.761871, 366.608826,151.196014);
2613</div>
2614
2615<div id="testQuadratic57o">
2616path.moveTo(303.12088, 141.299606);
2617path.lineTo(330.463562, 217.659027);
2618path.lineTo(358.606506, 141.299606);
2619path.lineTo(362.874634, 159.705902);
2620path.lineTo(335.665344, 233.397751);
2621path.lineTo(322.12738, 233.397751);
2622path.lineTo(295.718353, 159.505829);
2623path.lineTo(295.718353, 240);
2624path.lineTo(303.12088, 141.299606);
2625path.close();
2626path.moveTo(322.935669, 231.030273);
2627path.quadTo(312.832214, 220.393295, 312.832214, 203.454178);
2628path.quadTo(312.832214, 186.981888, 321.73526, 176.444946);
2629path.quadTo(330.638306, 165.90802, 344.509705, 165.90802);
2630path.lineTo(371.919067, 205.854996);
2631path.lineTo(326.236786, 205.854996);
2632path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2633path.lineTo(322.935669, 231.030273);
2634path.close();
2635path.moveTo(326.837006, 195.984955);
2636path.lineTo(358.78125, 195.984955);
2637path.lineTo(343.709442, 175.778046);
2638path.quadTo(328.570923, 175.778046, 326.837006, 195.984955);
2639path.close();
2640</div>
2641
2642<div id="testQuadratic57s">
2643path.moveTo(300.708282,173.46756);
2644path.lineTo(303.12088,141.299606);
2645path.lineTo(317.770294,182.210785);
2646path.quadTo(319.462738,179.134506, 321.73526,176.444946);
2647path.quadTo(330.638306,165.90802, 344.509705,165.90802);
2648path.lineTo(347.780151,170.674438);
2649path.lineTo(358.606506,141.299606);
2650path.lineTo(362.874634,159.705902);
2651path.lineTo(354.960693,181.139511);
2652path.lineTo(371.919067,205.854996);
2653path.lineTo(345.834961,205.854996);
2654path.lineTo(337.609253,228.13298);
2655path.quadTo(342.649323,231.302383, 349.843323,231.626816);
2656path.lineTo(336.429047,231.329422);
2657path.lineTo(335.665344,233.397751);
2658path.lineTo(322.12738,233.397751);
2659path.lineTo(320.050781,227.587433);
2660path.quadTo(313.982483,219.336182, 313.015503,207.902908);
2661path.lineTo(300.708282,173.46756);
2662path.close();
2663path.moveTo(300.708282,173.46756);
2664path.lineTo(295.718353,240);
2665path.lineTo(295.718353,159.505829);
2666path.lineTo(300.708282,173.46756);
2667path.close();
2668path.moveTo(349.843323,231.626816);
2669path.lineTo(351.512085,231.663818);
2670path.quadTo(350.663696,231.663818, 349.843323,231.626816);
2671path.close();
2672path.moveTo(326.236786,205.854996);
2673path.lineTo(330.463562,217.659027);
2674path.lineTo(334.814056,205.854996);
2675path.lineTo(326.236786,205.854996);
2676path.close();
2677path.moveTo(334.814056,205.854996);
2678path.lineTo(338.451721,195.984955);
2679path.lineTo(349.479309,195.984955);
2680path.lineTo(352.559326,187.643173);
2681path.lineTo(358.78125,195.984955);
2682</div>
2683
2684<div id="testQuadratic58o">
2685path.moveTo(283.714233, 240);
2686path.lineTo(283.714233, 141.299606);
2687path.lineTo(303.12088, 141.299606);
2688path.lineTo(330.463562, 217.659027);
2689path.lineTo(358.606506, 141.299606);
2690path.lineTo(362.874634, 159.705902);
2691path.lineTo(335.665344, 233.397751);
2692path.lineTo(322.12738, 233.397751);
2693path.lineTo(295.718353, 159.505829);
2694path.lineTo(295.718353, 240);
2695path.lineTo(283.714233, 240);
2696path.close();
2697path.moveTo(322.935669, 231.030273);
2698path.quadTo(312.832214, 220.393295, 312.832214, 203.454178);
2699path.quadTo(312.832214, 186.981888, 321.73526, 176.444946);
2700path.quadTo(330.638306, 165.90802, 344.509705, 165.90802);
2701path.quadTo(357.647522, 165.90802, 364.81665, 175.244537);
2702path.lineTo(371.919067, 205.854996);
2703path.lineTo(326.236786, 205.854996);
2704path.quadTo(329.104431, 231.663818, 351.512085, 231.663818);
2705path.lineTo(322.935669, 231.030273);
2706path.close();
2707path.moveTo(326.837006, 195.984955);
2708path.lineTo(358.78125, 195.984955);
2709path.quadTo(358.78125, 175.778046, 343.709442, 175.778046);
2710path.quadTo(328.570923, 175.778046, 326.837006, 195.984955);
2711path.close();
2712</div>
2713
2714<div id="testQuadratic58s">
2715path.moveTo(283.714233,240);
2716path.lineTo(283.714233,141.299606);
2717path.lineTo(303.12088,141.299606);
2718path.lineTo(317.770294,182.210785);
2719path.quadTo(319.462738,179.134506, 321.73526,176.444946);
2720path.quadTo(330.638306,165.90802, 344.509705,165.90802);
2721path.quadTo(347.07132,165.90802, 349.406036,166.26297);
2722path.lineTo(358.606506,141.299606);
2723path.lineTo(362.874634,159.705902);
2724path.lineTo(359.116211,169.884979);
2725path.quadTo(362.326477,172.001541, 364.81665,175.244537);
2726path.lineTo(371.919067,205.854996);
2727path.lineTo(345.834961,205.854996);
2728path.lineTo(337.609253,228.13298);
2729path.quadTo(342.649323,231.302383, 349.843323,231.626816);
2730path.lineTo(336.429047,231.329422);
2731path.lineTo(335.665344,233.397751);
2732path.lineTo(322.12738,233.397751);
2733path.lineTo(320.050781,227.587433);
2734path.quadTo(313.982483,219.336182, 313.015503,207.902908);
2735path.lineTo(295.718353,159.505829);
2736path.lineTo(295.718353,240);
2737path.lineTo(283.714233,240);
2738path.close();
2739path.moveTo(349.843323,231.626816);
2740path.lineTo(351.512085,231.663818);
2741path.quadTo(350.663696,231.663818, 349.843323,231.626816);
2742path.close();
2743path.moveTo(326.236786,205.854996);
2744path.lineTo(330.463562,217.659027);
2745path.lineTo(334.814056,205.854996);
2746path.lineTo(326.236786,205.854996);
2747path.close();
2748path.moveTo(334.814056,205.854996);
2749path.lineTo(338.451721,195.984955);
2750path.lineTo(349.479309,195.984955);
2751path.lineTo(355.054535,180.885361);
2752path.quadTo(358.78125,185.936935, 358.78125,195.984955);
2753</div>
2754
2755<div id="testQuadratic58a">
2756path.moveTo(283.714233,240);
2757path.lineTo(283.714233,141.299606);
2758path.lineTo(303.12088,141.299606);
2759path.lineTo(317.770294,182.210785);
2760path.quadTo(319.462738,179.134506, 321.73526,176.444946);
2761path.quadTo(330.638306,165.90802, 344.509705,165.90802);
2762path.quadTo(347.07132,165.90802, 349.406036,166.26297);
2763path.lineTo(358.606506,141.299606);
2764path.lineTo(362.874634,159.705902);
2765path.lineTo(359.116211,169.884979);
2766path.quadTo(362.326477,172.001541, 364.81665,175.244537);
2767path.lineTo(371.919067,205.854996);
2768path.lineTo(345.834961,205.854996);
2769path.lineTo(337.609253,228.13298);
2770path.quadTo(342.649323,231.302383, 349.843323,231.626816);
2771path.lineTo(336.429047,231.329422);
2772path.lineTo(335.665344,233.397751);
2773path.lineTo(322.12738,233.397751);
2774path.lineTo(320.050781,227.587433);
2775path.quadTo(313.982483,219.336182, 313.015503,207.902908);
2776path.lineTo(295.718353,159.505829);
2777path.lineTo(295.718353,240);
2778path.lineTo(283.714233,240);
2779path.close();
2780path.moveTo(349.843323,231.626816);
2781path.lineTo(351.512085,231.663818);
2782path.quadTo(350.663696,231.663818, 349.843323,231.626816);
2783path.close();
2784path.moveTo(349.479309,195.984955);
2785path.lineTo(358.78125,195.984955);
2786path.quadTo(358.78125,185.936935, 355.054535,180.885361);
2787path.lineTo(349.479309,195.984955);
2788path.close();
2789path.moveTo(345.858368,175.888794);
2790path.lineTo(338.451721,195.984955);
2791path.lineTo(326.837006,195.984955);
2792path.quadTo(328.570923,175.778046, 343.709442,175.778046);
2793path.quadTo(344.825195,175.778046, 345.858368,175.888794);
2794path.close();
2795</div>
2796
caryclark@google.comdb0b3e02012-12-21 21:34:36 +00002797<div id="testQuadratic59">
2798 path.moveTo(0, 0);
2799 path.quadTo(0, 0, 0, 0);
2800 path.lineTo(2, 2);
2801 path.close();
2802 path.moveTo(0, 0);
2803 path.lineTo(2, 0);
2804 path.quadTo(3, 1, 1, 2);
2805</div>
2806
caryclark@google.com0b7da432012-10-31 19:00:20 +00002807<div id="testQuadratic59o">
2808path.moveTo(369.863983, 145.645813);
2809path.quadTo(382.380371, 121.254936, 406.236359, 121.254936);
2810path.quadTo(409.445679, 121.254936, 412.975952, 121.789818);
2811path.lineTo(369.863983, 145.645813);
2812path.close();
2813path.moveTo(369.970581, 137.94342);
2814path.quadTo(383.98465, 121.254936, 406.235992, 121.254936);
2815path.quadTo(425.705902, 121.254936, 439.71994, 137.087616);
2816path.lineTo(369.970581, 137.94342);
2817path.close();
2818</div>
2819
2820<div id="testQuadratic59s">
2821path.moveTo(369.970581,137.94342);
2822path.quadTo(383.98465,121.254936, 406.235992,121.254936);
2823path.quadTo(406.237854,121.254936, 406.239746,121.254936);
2824path.lineTo(406.239532,121.254936);
2825path.quadTo(409.447418,121.255203, 412.975952,121.789818);
2826</div>
2827
2828<div id="testQuadratic60">
2829path.moveTo(360.416077, 166.795715);
2830path.quadTo(370.126831, 147.872162, 388.635406, 147.872162);
2831path.lineTo(360.416077, 166.795715);
2832path.close();
2833path.moveTo(353.2948, 194.351074);
2834path.quadTo(353.2948, 173.767563, 364.167572, 160.819855);
2835path.quadTo(375.040314, 147.872162, 392.303894, 147.872162);
2836path.lineTo(353.2948, 194.351074);
2837path.close();
2838</div>
2839
2840<div id="testQuadratic61">
2841path.moveTo(348.781738, 123.864815);
2842path.lineTo(369.848602, 123.864815);
2843path.lineTo(369.848602, 145.680267);
2844path.quadTo(382.360413, 121.298294, 406.207703, 121.298294);
2845path.lineTo(348.781738, 123.864815);
2846path.close();
2847path.moveTo(369.961151, 137.980698);
2848path.quadTo(383.970093, 121.298294, 406.213287, 121.298294);
2849path.lineTo(369.961151, 137.980698);
2850path.close();
2851</div>
2852
caryclark@google.come7bd5f42012-12-13 19:47:53 +00002853<div id="testQuadratic62x">
2854 path.setFillType(SkPath::kEvenOdd_FillType);
2855 path.moveTo(0, 0);
2856 path.quadTo(0, 0, 0, 0);
2857 path.lineTo(2, 2);
2858 path.close();
2859 path.moveTo(0, 0);
2860 path.lineTo(2, 0);
2861 path.quadTo(3, 1, 1, 2);
2862 path.close();
2863</div>
2864
2865<div id="testLine1a">
2866 path.addRect(0, 0, 12, 12, SkPath::kCW_Direction);
2867 path.addRect(4, 0, 13, 13, SkPath::kCCW_Direction);
2868 path.close();
2869</div>
2870
2871<div id="testQuadratic63">
2872 path.moveTo(0, 0);
2873 path.quadTo(0, 0, 0, 0);
2874 path.lineTo(3, 2);
2875 path.close();
2876 path.moveTo(1, 0);
2877 path.lineTo(2, 1);
2878 path.quadTo(2, 1, 2, 2);
2879 path.close();
2880</div>
2881
2882<div id="testQuadratic64">
2883 path.moveTo(0, 0);
2884 path.quadTo(0, 0, 0, 0);
2885 path.lineTo(2, 3);
2886 path.close();
2887 path.moveTo(1, 2);
2888 path.lineTo(2, 2);
2889 path.quadTo(0, 3, 3, 3);
2890 path.close();
2891</div>
2892
2893<div id="testQuadratic65">
2894 path.moveTo(0, 0);
2895 path.quadTo(0, 0, 0, 0);
2896 path.lineTo(3, 2);
2897 path.close();
2898 path.moveTo(2, 1);
2899 path.lineTo(2, 2);
2900 path.quadTo(0, 3, 1, 3);
2901 path.close();
2902</div>
2903
2904<div id="testQuadratic66">
2905 path.moveTo(0, 0);
2906 path.quadTo(0, 0, 0, 1);
2907 path.lineTo(3, 2);
2908 path.close();
2909 path.moveTo(2, 0);
2910 path.lineTo(1, 1);
2911 path.quadTo(3, 2, 2, 3);
2912 path.close();
2913</div>
2914
2915<div id="testQuadratic67x">
2916 path.setFillType(SkPath::kEvenOdd_FillType);
2917 path.moveTo(0, 0);
2918 path.quadTo(0, 0, 2, 1);
2919 path.lineTo(2, 2);
2920 path.close();
2921 path.moveTo(0, 0);
2922 path.lineTo(2, 0);
2923 path.quadTo(1, 1, 3, 2);
2924 path.close();
2925</div>
2926
2927<div id="testQuadratic68">
2928 path.moveTo(0, 0);
2929 path.quadTo(1, 0, 0, 1);
2930 path.lineTo(1, 2);
2931 path.close();
2932 path.moveTo(0, 0);
2933 path.lineTo(0, 0);
2934 path.quadTo(0, 1, 2, 1);
2935 path.close();
2936</div>
2937
2938<div id="testQuadratic69">
2939 path.moveTo(0, 0);
2940 path.quadTo(0, 0, 0, 1);
2941 path.lineTo(3, 2);
2942 path.close();
2943 path.moveTo(2, 0);
2944 path.lineTo(1, 1);
2945 path.quadTo(3, 2, 2, 3);
2946 path.close();
2947</div>
2948
2949<div id="testQuadratic70x">
2950 path.setFillType(SkPath::kEvenOdd_FillType);
2951 path.moveTo(0, 0);
2952 path.quadTo(1, 0, 0, 1);
2953 path.lineTo(1, 2);
2954 path.close();
2955 path.moveTo(0, 0);
2956 path.lineTo(0, 0);
2957 path.quadTo(0, 1, 2, 1);
2958 path.close();
2959</div>
2960
2961<div id="testQuadratic71">
2962 path.moveTo(0, 0);
2963 path.quadTo(1, 0, 1, 1);
2964 path.lineTo(3, 2);
2965 path.close();
2966 path.moveTo(0, 0);
2967 path.lineTo(0, 0);
2968 path.quadTo(1, 1, 3, 1);
2969 path.close();
2970</div>
2971
2972<div id="testQuadratic72">
2973 path.moveTo(0, 0);
2974 path.quadTo(1, 0, 1, 2);
2975 path.lineTo(1, 2);
2976 path.close();
2977 path.moveTo(0, 0);
2978 path.lineTo(1, 0);
2979 path.quadTo(0, 1, 3, 2);
2980 path.close();
2981</div>
2982
2983<div id="testQuadratic73">
2984 path.moveTo(0, 0);
2985 path.quadTo(1, 0, 0, 3);
2986 path.lineTo(0, 3);
2987 path.close();
2988 path.moveTo(0, 0);
2989 path.lineTo(1, 0);
2990 path.quadTo(0, 1, 1, 1);
2991 path.close();
2992</div>
2993
2994<div id="testQuadratic74">
2995 path.moveTo(0, 0);
2996 path.quadTo(1, 0, 1, 3);
2997 path.lineTo(1, 3);
2998 path.close();
2999 path.moveTo(0, 0);
3000 path.lineTo(0, 1);
3001 path.quadTo(3, 2, 2, 3);
3002 path.close();
3003</div>
3004
3005<div id="testQuadratic75">
3006 path.moveTo(0, 0);
3007 path.quadTo(1, 0, 1, 3);
3008 path.lineTo(2, 3);
3009 path.close();
3010 path.moveTo(0, 0);
3011 path.lineTo(0, 1);
3012 path.quadTo(3, 2, 2, 3);
3013 path.close();
3014</div>
3015
caryclark@google.comdb0b3e02012-12-21 21:34:36 +00003016<div id="testQuadratic76">
3017 path.moveTo(0, 0);
3018 path.quadTo(0, 0, 0, 0);
3019 path.lineTo(2, 3);
3020 path.close();
3021 path.moveTo(1, 0);
3022 path.lineTo(1, 2);
3023 path.quadTo(1, 2, 2, 2);
3024 path.close();
3025</div>
3026
3027<div id="testQuadratic77">
3028 path.moveTo(0, 0);
3029 path.quadTo(1, 0, 1, 1);
3030 path.lineTo(3, 1);
3031 path.close();
3032 path.moveTo(0, 0);
3033 path.lineTo(1, 0);
3034 path.quadTo(0, 1, 3, 2);
3035 path.close();
3036</div>
3037
3038<div id="testQuadratic78">
3039 path.moveTo(0, 0);
3040 path.quadTo(1, 0, 1, 2);
3041 path.lineTo(3, 2);
3042 path.close();
3043 path.moveTo(0, 0);
3044 path.lineTo(0, 0);
3045 path.quadTo(2, 1, 0, 2);
3046 path.close();
3047</div>
3048
3049<div id="testQuadratic79">
3050 path.moveTo(0, 0);
3051 path.quadTo(1, 0, 1, 2);
3052 path.lineTo(3, 2);
3053 path.close();
3054 path.moveTo(0, 0);
3055 path.lineTo(1, 0);
3056 path.quadTo(0, 1, 3, 2);
3057 path.close();
3058</div>
3059
3060<div id="testQuadratic80">
3061 path.moveTo(0, 0);
3062 path.quadTo(1, 0, 2, 3);
3063 path.lineTo(2, 3);
3064 path.close();
3065 path.moveTo(1, 0);
3066 path.lineTo(3, 0);
3067 path.quadTo(0, 1, 1, 1);
3068 path.close();
3069</div>
3070
3071<div id="testQuadratic81">
3072 path.moveTo(0, 0);
3073 path.quadTo(2, 0, 1, 1);
3074 path.lineTo(1, 1);
3075 path.close();
3076 path.moveTo(0, 0);
3077 path.lineTo(0, 0);
3078 path.quadTo(2, 1, 0, 2);
3079 path.close();
3080</div>
3081
3082<div id="testQuadratic82">
3083 path.moveTo(0, 0);
3084 path.quadTo(2, 0, 1, 1);
3085 path.lineTo(0, 3);
3086 path.close();
3087 path.moveTo(0, 0);
3088 path.lineTo(0, 0);
3089 path.quadTo(2, 1, 0, 2);
3090 path.close();
3091</div>
3092
caryclark@google.com3586ece2012-12-27 18:46:58 +00003093<div id="testQuadratic83">
3094 path.moveTo(0, 0);
3095 path.quadTo(0, 0, 2, 0);
3096 path.lineTo(2, 2);
3097 path.close();
3098 path.moveTo(0, 1);
3099 path.lineTo(0, 2);
3100 path.quadTo(2, 2, 1, 3);
3101 path.close();
3102</div>
3103
caryclark@google.com10227bf2012-12-28 22:10:41 +00003104<div id="testQuadratic84">
3105 path.moveTo(0, 0);
3106 path.quadTo(2, 0, 1, 1);
3107 path.lineTo(2, 1);
3108 path.close();
3109 path.moveTo(1, 0);
3110 path.lineTo(2, 0);
3111 path.quadTo(0, 1, 2, 2);
3112 path.close();
3113</div>
3114
3115<div id="testQuadratic85">
3116 path.moveTo(0, 0);
3117 path.quadTo(3, 0, 1, 1);
3118 path.lineTo(1, 1);
3119 path.close();
3120 path.moveTo(1, 0);
3121 path.lineTo(3, 0);
3122 path.quadTo(0, 1, 1, 2);
3123 path.close();
3124</div>
3125
3126<div id="testQuadratic86">
3127 path.moveTo(0, 0);
3128 path.quadTo(0, 1, 1, 1);
3129 path.lineTo(2, 3);
3130 path.close();
3131 path.moveTo(0, 0);
3132 path.lineTo(0, 0);
3133 path.quadTo(1, 1, 1, 3);
3134 path.close();
3135</div>
3136
3137<div id="testQuadratic87">
3138 path.moveTo(0, 0);
3139 path.quadTo(2, 1, 0, 2);
3140 path.lineTo(2, 3);
3141 path.close();
3142 path.moveTo(0, 0);
3143 path.lineTo(1, 1);
3144 path.quadTo(0, 2, 3, 2);
3145 path.close();
3146</div>
3147
3148<div id="testQuadratic88">
3149 path.moveTo(0, 0);
3150 path.quadTo(2, 1, 0, 2);
3151 path.lineTo(2, 2);
3152 path.close();
3153 path.moveTo(1, 0);
3154 path.lineTo(1, 1);
3155 path.quadTo(0, 2, 2, 2);
3156 path.close();
3157</div>
3158
caryclark@google.com8f9f4682013-01-03 21:18:16 +00003159<div id="testQuadratic89x">
3160 path.setFillType(SkPath::kEvenOdd_FillType);
3161 path.moveTo(0, 0);
3162 path.quadTo(3, 1, 2, 2);
3163 path.lineTo(0, 3);
3164 path.close();
3165 path.moveTo(0, 0);
3166 path.lineTo(2, 1);
3167 path.quadTo(3, 1, 3, 3);
3168 path.close();
3169</div>
3170
3171<div id="testQuadratic90x">
3172 path.setFillType(SkPath::kEvenOdd_FillType);
3173 path.moveTo(0, 0);
3174 path.quadTo(3, 0, 2, 2);
3175 path.lineTo(1, 3);
3176 path.close();
3177 path.moveTo(0, 0);
3178 path.lineTo(0, 1);
3179 path.quadTo(3, 2, 2, 3);
3180 path.close();
3181</div>
3182
3183<div id="testQuadratic91">
3184 path.moveTo(0, 0);
3185 path.quadTo(3, 2, 2, 3);
3186 path.lineTo(2, 3);
3187 path.close();
3188 path.moveTo(0, 0);
3189 path.lineTo(1, 1);
3190 path.quadTo(2, 1, 2, 3);
3191 path.close();
3192</div>
3193
3194<div id="testQuadratic92x">
3195 path.setFillType(SkPath::kEvenOdd_FillType);
3196 path.moveTo(1, 0);
3197 path.quadTo(3, 0, 2, 2);
3198 path.lineTo(2, 2);
3199 path.close();
3200 path.moveTo(2, 0);
3201 path.lineTo(0, 1);
3202 path.quadTo(3, 2, 2, 3);
3203 path.close();
3204</div>
3205
3206<div id="testLine82">
3207 path.addRect(20, 0, 40, 40, SkPath::kCCWDirection);
3208 path.addRect(24, 20, 36, 30, SkPath::kCCWDirection);
3209 path.addRect(24, 32, 33, 36, SkPath::kCCWDirection);
3210</div>
3211
3212<div id="testLine82a">
3213 SkPath path;
3214 path.addRect(0, 0, 6, 10, SkPath::kCW_Direction);
3215 path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
3216 path.addRect(2, 6, 4, 8, SkPath::kCW_Direction);
3217 testSimplifyx(path);
3218</div>
3219
3220<div id="testLine82b">
3221 SkPath path;
3222 path.addRect(0, 0, 6, 10, SkPath::kCW_Direction);
3223 path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
3224 path.addRect(2, 6, 4, 8, SkPath::kCCW_Direction);
3225 testSimplifyx(path);
3226</div>
3227
3228<div id="testLine82c">
3229 SkPath path;
3230 path.addRect(0, 0, 6, 10, SkPath::kCW_Direction);
3231 path.addRect(2, 2, 4, 4, SkPath::kCCW_Direction);
3232 path.addRect(2, 6, 4, 8, SkPath::kCW_Direction);
3233 testSimplifyx(path);
3234</div>
3235
3236
3237<div id="testLine82d">
3238 SkPath path;
3239 path.addRect(0, 0, 6, 10, SkPath::kCW_Direction);
3240 path.addRect(2, 2, 4, 4, SkPath::kCCW_Direction);
3241 path.addRect(2, 6, 4, 8, SkPath::kCCW_Direction);
3242 testSimplifyx(path);
3243</div>
3244
3245<div id="testLine82e">
3246 SkPath path;
3247 path.addRect(0, 0, 6, 10, SkPath::kCCW_Direction);
3248 path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
3249 path.addRect(2, 6, 4, 8, SkPath::kCW_Direction);
3250 testSimplifyx(path);
3251</div>
3252
3253<div id="testLine82f">
3254 SkPath path;
3255 path.addRect(0, 0, 6, 10, SkPath::kCCW_Direction);
3256 path.addRect(2, 2, 4, 4, SkPath::kCW_Direction);
3257 path.addRect(2, 6, 4, 8, SkPath::kCCW_Direction);
3258 testSimplifyx(path);
3259</div>
3260
3261<div id="testLine82g">
3262 SkPath path;
3263 path.addRect(0, 0, 6, 10, SkPath::kCCW_Direction);
3264 path.addRect(2, 2, 4, 4, SkPath::kCCW_Direction);
3265 path.addRect(2, 6, 4, 8, SkPath::kCW_Direction);
3266 testSimplifyx(path);
3267</div>
3268
3269<div id="testLine82h">
3270 SkPath path;
3271 path.addRect(0, 0, 6, 10, SkPath::kCCW_Direction);
3272 path.addRect(2, 2, 4, 4, SkPath::kCCW_Direction);
3273 path.addRect(2, 6, 4, 8, SkPath::kCCW_Direction);
3274 testSimplifyx(path);
3275</div>
3276
3277<div id="testLine83">
3278path.addRect(10, 30, 30, 40, SkPath::kCCW_Direction);
3279path.addRect(0, 12, 12, 18, SkPath::kCCW_Direction);
3280path.addRect(4, 13, 13, 16, SkPath::kCCW_Direction);
3281</div>
3282
3283<div id="testLine84x">
3284 path.setFillType(SkPath::kEvenOdd_FillType);
3285 path.addRect(0, 12, 60, 30, SkPath::kCCW_Direction);
3286 path.addRect(10, 20, 40, 30, SkPath::kCCW_Direction);
3287 path.addRect(0, 12, 12, 12, SkPath::kCCW_Direction);
3288 path.addRect(4, 12, 13, 13, SkPath::kCCW_Direction);
3289</div>
3290
3291<div id="testLine85">
3292 path.addRect(36, 0, 66, 60, SkPath::kCCW_Direction);
3293 path.addRect(20, 0, 40, 40, SkPath::kCCW_Direction);
3294 path.addRect(12, 0, 24, 24, SkPath::kCCW_Direction);
3295 path.addRect(32, 0, 36, 41, SkPath::kCCW_Direction);
3296</div>
3297
caryclark@google.com73ca6242013-01-17 21:02:47 +00003298<div id="testQuadralateral1">
3299 path.moveTo(0, 0);
3300 path.lineTo(0, 0);
3301 path.lineTo(0, 0);
3302 path.lineTo(3, 2);
3303 path.close();
3304 path.moveTo(0, 0);
3305 path.lineTo(2, 1);
3306 path.lineTo(2, 2);
3307 path.lineTo(2, 3);
3308 path.close();
3309</div>
3310
3311<div id="testCubic1">
3312 path.moveTo(0, 0);
3313 path.cubicTo(0, 1, 1, 1, 1, 0);
3314 path.close();
3315 path.moveTo(1, 0);
3316 path.cubicTo(0, 0, 0, 1, 1, 1);
3317 path.close();
3318</div>
3319
caryclark@google.com85ec74c2013-01-28 19:25:51 +00003320<div id="testQuadratic93">
3321 path.moveTo(3, 0);
3322 path.quadTo(0, 1, 3, 2);
3323 path.lineTo(0, 3);
3324 path.close();
3325 path.moveTo(1, 0);
3326 path.lineTo(2, 0);
3327 path.quadTo(1, 1, 2, 2);
3328 path.close();
3329</div>
3330
caryclark@google.comaa358312013-01-29 20:28:49 +00003331<div id="cubicOp1d">
3332 path.setFillType(SkPath::kWinding_FillType);
3333 path.moveTo(0,1);
3334 path.cubicTo(0,2, 1,0, 1,0);
3335 path.close();
3336 pathB.setFillType(SkPath::kWinding_FillType);
3337 pathB.moveTo(0,1);
3338 pathB.cubicTo(0,1, 1,0, 2,0);
3339 pathB.close();
3340</div>
3341
caryclark@google.combeda3892013-02-07 13:13:41 +00003342<div id="cubicOp2d">
3343 path.setFillType(SkPath::kWinding_FillType);
3344 path.moveTo(0,2);
3345 path.cubicTo(0,1, 1,0, 1,0);
3346 path.close();
3347 pathB.setFillType(SkPath::kWinding_FillType);
3348 pathB.moveTo(0,1);
3349 pathB.cubicTo(0,1, 2,0, 1,0);
3350 pathB.close();
3351</div>
3352
3353<div id="cubicOp3d">
3354 path.setFillType(SkPath::kWinding_FillType);
3355 path.moveTo(0,1);
3356 path.cubicTo(2,3, 1,0, 1,0);
3357 path.close();
3358 pathB.setFillType(SkPath::kWinding_FillType);
3359 pathB.moveTo(0,1);
3360 pathB.cubicTo(0,1, 1,0, 3,2);
3361 pathB.close();
3362</div>
3363
3364<div id="cubicOp4d">
3365 path.setFillType(SkPath::kWinding_FillType);
3366 path.moveTo(0,1);
3367 path.cubicTo(0,2, 1,0, 2,0);
3368 path.close();
3369 pathB.setFillType(SkPath::kWinding_FillType);
3370 pathB.moveTo(0,1);
3371 pathB.cubicTo(0,2, 1,0, 2,0);
3372 pathB.close();
3373</div>
3374
3375<div id="cubicOp5d">
3376 path.setFillType(SkPath::kWinding_FillType);
3377 path.moveTo(0,1);
3378 path.cubicTo(0,2, 1,0, 2,0);
3379 path.close();
3380 pathB.setFillType(SkPath::kWinding_FillType);
3381 pathB.moveTo(0,1);
3382 pathB.cubicTo(0,2, 1,0, 2,0);
3383 pathB.close();
3384</div>
3385
3386<div id="cubicOp6d">
3387 path.setFillType(SkPath::kWinding_FillType);
3388 path.moveTo(0,1);
3389 path.cubicTo(0,6, 1,0, 3,0);
3390 path.close();
3391 pathB.setFillType(SkPath::kWinding_FillType);
3392 pathB.moveTo(0,1);
3393 pathB.cubicTo(0,3, 1,0, 6,0);
3394 pathB.close();
3395</div>
3396
3397<div id="cubicOp7d">
3398 path.setFillType(SkPath::kWinding_FillType);
3399 path.moveTo(0,1);
3400 path.cubicTo(3,4, 1,0, 3,0);
3401 path.close();
3402 pathB.setFillType(SkPath::kWinding_FillType);
3403 pathB.moveTo(0,1);
3404 pathB.cubicTo(0,3, 1,0, 4,3);
3405 pathB.close();
3406</div>
3407
caryclark@google.com752b60e2012-03-22 21:11:17 +00003408</div>
3409
3410<script type="text/javascript">
3411
3412var testDivs = [
caryclark@google.combeda3892013-02-07 13:13:41 +00003413 cubicOp7d,
3414 cubicOp6d,
3415 cubicOp5d,
3416 cubicOp4d,
3417 cubicOp3d,
3418 cubicOp2d,
caryclark@google.comaa358312013-01-29 20:28:49 +00003419 cubicOp1d,
caryclark@google.com85ec74c2013-01-28 19:25:51 +00003420 testQuadratic93,
caryclark@google.com73ca6242013-01-17 21:02:47 +00003421 testCubic1,
3422 testQuadralateral1,
caryclark@google.com8f9f4682013-01-03 21:18:16 +00003423 testLine85,
3424 testLine84x,
3425 testLine83,
3426 testLine82h,
3427 testLine82g,
3428 testLine82f,
3429 testLine82e,
3430 testLine82d,
3431 testLine82c,
3432 testLine82b,
3433 testLine82a,
3434 testLine82,
3435 testQuadratic92x,
3436 testQuadratic91,
3437 testQuadratic90x,
3438 testQuadratic89x,
caryclark@google.com10227bf2012-12-28 22:10:41 +00003439 testQuadratic88,
3440 testQuadratic87,
3441 testQuadratic86,
3442 testQuadratic85,
3443 testQuadratic84,
caryclark@google.com3586ece2012-12-27 18:46:58 +00003444 testQuadratic83,
caryclark@google.comdb0b3e02012-12-21 21:34:36 +00003445 testQuadratic82,
3446 testQuadratic81,
3447 testQuadratic80,
3448 testQuadratic79,
3449 testQuadratic78,
3450 testQuadratic77,
3451 testQuadratic76,
caryclark@google.come7bd5f42012-12-13 19:47:53 +00003452 testQuadratic75,
3453 testQuadratic74,
3454 testQuadratic73,
3455 testQuadratic72,
3456 testQuadratic71,
3457 testQuadratic70x,
3458 testQuadratic69,
3459 testQuadratic68,
3460 testQuadratic67x,
3461 testQuadratic66,
3462 testQuadratic65,
3463 testQuadratic64,
3464 testQuadratic63,
3465 testLine1a,
3466 testQuadratic62x,
caryclark@google.com7fce0de2012-11-29 14:31:50 +00003467 testLine81,
caryclark@google.com0b7da432012-10-31 19:00:20 +00003468 testQuadratic61,
3469 testQuadratic60,
caryclark@google.comdb0b3e02012-12-21 21:34:36 +00003470 testQuadratic59,
caryclark@google.com0b7da432012-10-31 19:00:20 +00003471 testQuadratic59o,
3472 testQuadratic59s,
caryclark@google.comf839c032012-10-26 21:03:50 +00003473 testQuadratic58o,
3474 testQuadratic58a,
3475 testQuadratic58s,
3476 testQuadratic57o,
3477 testQuadratic57s,
3478 testQuadratic56o,
3479 testQuadratic56s,
3480 testQuadratic55o,
3481 testQuadratic55s,
3482 testQuadratic54,
3483 testQuadratic53o,
3484 testQuadratic53s,
3485 testQuadratic52sa,
3486 testQuadratic52sb,
3487 testQuadratic52sc,
caryclark@google.com185c7c42012-10-19 18:26:24 +00003488 testQuadratic52o,
3489 testQuadratic52s,
caryclark@google.comfb51afb2012-10-19 15:54:16 +00003490 testQuadratic51,
3491 testQuadratic50o,
3492 testQuadratic50s,
3493 testQuadratic49s,
3494 testQuadratic48o,
3495 testQuadratic48s,
caryclark@google.comc91dfe42012-10-16 12:06:27 +00003496 testQuadratic47o,
3497 testQuadratic47s,
caryclark@google.coma461ff02012-10-11 12:54:23 +00003498 testQuadratic46o,
3499 testQuadratic46s,
3500 testQuadratic45o,
3501 testQuadratic45s,
caryclark@google.com6aea33f2012-10-09 14:11:58 +00003502 testQuadratic44o,
3503 testQuadratic44s,
3504 testQuadratic43o,
3505 testQuadratic43s,
3506 testQuadratic42o,
3507 testQuadratic42s,
3508 testQuadratic41o,
3509 testQuadratic41s,
3510 testQuadratic40xb,
3511 testQuadratic40xa,
3512 testQuadratic40x,
caryclark@google.comd1688742012-09-18 20:08:37 +00003513 testQuadratic39,
3514 testQuadratic39a,
3515 testQuadratic38,
3516 testQuadratic37,
3517 testQuadratic36,
3518 testQuadratic35,
3519 testQuadratic34,
3520 testQuadratic33,
3521 testQuadratic32,
3522 testQuadratic31,
3523 testQuadratic30,
3524 testQuadratic29,
caryclark@google.com235f56a2012-09-14 14:19:30 +00003525 testQuadratic28,
3526 testQuadratic27,
3527 testQuadratic26,
3528 testQuadratic25,
3529 testQuadratic24,
3530 testQuadratic23,
3531 testQuadratic22,
3532 testQuadratic21,
caryclark@google.com32546db2012-08-31 20:55:07 +00003533 testQuadratic20,
caryclark@google.coma7e483d2012-08-28 20:44:43 +00003534 testQuadratic19,
caryclark@google.com3350c3c2012-08-24 15:24:36 +00003535 testQuadratic18,
3536 testQuadratic17x,
3537 testQuadratic16b,
3538 testQuadratic16a,
3539 testQuadratic15,
caryclark@google.comc899ad92012-08-23 15:24:42 +00003540 testQuadratic14,
3541 testQuadratic13b,
3542 testQuadratic13a,
3543 testQuadratic12,
3544 testQuadratic11b,
3545 testQuadratic11a,
3546 testQuadratic10b,
3547 testQuadratic10a,
3548 testQuadratic9a,
3549 testQuadratic9,
3550 testQuadratic8,
3551 testQuadratic7,
3552 testQuadratic6,
3553 testQuadratic5,
3554 testQuadratic4x,
caryclark@google.com03f97062012-08-21 13:13:52 +00003555 testQuadratic3,
caryclark@google.com24bec792012-08-20 12:43:57 +00003556 testQuadratic2,
3557 testQuadratic1,
3558 testLine4x,
3559 testLine3x,
3560 testLine2x,
3561 testLine1x,
3562 testQuadralateral9,
3563 testQuadralateral8,
3564 testQuadralateral7,
3565 testFauxQuadralateral6d,
3566 testFauxQuadralateral6c,
3567 testFauxQuadralateral6b,
3568 testFauxQuadralateral6a,
3569 testFauxQuadralateral6,
3570 testQuadralateral6a,
caryclark@google.com59823f72012-08-09 18:17:47 +00003571 testQuadralateral6,
3572 testQuadralateral5,
3573 testNondegenerate4,
3574 testNondegenerate3,
3575 testNondegenerate2,
3576 testNondegenerate1,
3577 testDegenerate4,
3578 testDegenerate3,
3579 testDegenerate2,
3580 testDegenerate1,
caryclark@google.com2ddff932012-08-07 21:25:27 +00003581 testLine79,
3582 testLine78,
3583 testLine77,
3584 testLine76,
3585 testLine75,
caryclark@google.com0c803d02012-08-06 11:15:47 +00003586 testLine74,
caryclark@google.com200c2112012-08-03 15:05:04 +00003587 testLine73,
3588 testLine72,
caryclark@google.com534aa5b2012-08-02 20:08:21 +00003589 testLine71,
3590 testLine70,
3591 testLine69,
3592 testLine68f,
3593 testLine68e,
3594 testLine68d,
3595 testLine68c,
3596 testLine68b,
3597 testLine68a,
3598 testLine67,
caryclark@google.com27c449a2012-07-27 18:26:38 +00003599 testLine66,
3600 testLine65,
3601 testLine64,
3602 testLine63,
3603 testLine62,
3604 testLine61,
3605 testLine60,
caryclark@google.comcc905052012-07-25 20:59:42 +00003606 testLine59,
3607 testLine58,
caryclark@google.com18063442012-07-25 12:05:18 +00003608 testLine57,
3609 testLine56,
caryclark@google.come21cb182012-07-23 21:26:31 +00003610 testLine55,
3611 testLine54,
3612 testLine53,
3613 testLine52,
caryclark@google.com47580692012-07-23 12:14:49 +00003614 testLine51,
3615 testLine50,
3616 testLine49,
3617 testLine48,
3618 testLine47,
3619 testLine46,
3620 testLine45,
3621 testLine44,
3622 testLine43,
3623 testLine42,
3624 testLine41,
3625 testLine40,
3626 testLine39,
3627 testLine38,
3628 testLine37,
caryclark@google.com0e08a192012-07-13 21:07:52 +00003629 testLine36,
caryclark@google.com210acaf2012-07-12 21:05:13 +00003630 testLine35,
3631 testLine34,
caryclark@google.com9764cc62012-07-12 19:29:45 +00003632 testLine33,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003633 testLine32,
3634 testLine31,
caryclark@google.com534aa5b2012-08-02 20:08:21 +00003635 testLine30,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003636 testLine29,
3637 testLine28,
caryclark@google.com47580692012-07-23 12:14:49 +00003638 testLine24,
caryclark@google.comcc905052012-07-25 20:59:42 +00003639 testLine22,
caryclark@google.com47580692012-07-23 12:14:49 +00003640 testLine19,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003641 testLine17,
caryclark@google.come21cb182012-07-23 21:26:31 +00003642 testLine13,
3643 testLine12,
caryclark@google.com47580692012-07-23 12:14:49 +00003644 testLine9,
caryclark@google.comcc905052012-07-25 20:59:42 +00003645 testLine7b,
caryclark@google.com47580692012-07-23 12:14:49 +00003646 testLine7,
caryclark@google.com8dcf1142012-07-02 20:27:02 +00003647 testSimplifyQuadratic21,
3648 testSimplifyQuadratic20,
3649 testSimplifyQuadratic19,
caryclark@google.comb45a1b42012-05-18 20:50:33 +00003650 testSimplifyQuadratic18,
caryclark@google.comfa0588f2012-04-26 21:01:06 +00003651 testSimplifyQuadratic17,
3652 testSimplifyQuadratic16,
3653 testSimplifyQuadratic15,
3654 testSimplifyQuadratic14,
3655 testSimplifyQuadratic13,
3656 testSimplifyQuadratic12,
3657 testSimplifyQuadratic11,
3658 testSimplifyQuadratic10,
3659 testSimplifyQuadratic9,
3660 testSimplifyQuadratic8,
3661 testSimplifyQuadratic7,
3662 testSimplifyQuadratic6,
3663 testSimplifyQuadratic5,
3664 testSimplifyQuadratic4,
3665 testSimplifyQuadratic3,
3666 testSimplifyQuadratic2,
3667 testSimplifyQuadratic1,
caryclark@google.com752b60e2012-03-22 21:11:17 +00003668];
3669
3670var scale, columns, rows, xStart, yStart;
3671
3672var ticks = 0.1;
3673var at_x = 13 + 0.5;
3674var at_y = 13 + 0.5;
caryclark@google.com2ddff932012-08-07 21:25:27 +00003675var decimal_places = 0; // make this 3 to show more precision
caryclark@google.com752b60e2012-03-22 21:11:17 +00003676
3677var tests = [];
caryclark@google.com0e08a192012-07-13 21:07:52 +00003678var testTitles = [];
caryclark@google.com752b60e2012-03-22 21:11:17 +00003679var testIndex = 0;
caryclark@google.com24bec792012-08-20 12:43:57 +00003680var hasXor = false;
caryclark@google.com6aea33f2012-10-09 14:11:58 +00003681var draw_labels = true;
caryclark@google.com752b60e2012-03-22 21:11:17 +00003682
3683var ctx;
3684
caryclark@google.com0e08a192012-07-13 21:07:52 +00003685function parse(test, title) {
caryclark@google.com752b60e2012-03-22 21:11:17 +00003686 var contours = [];
3687 var contourStrs = test.split("path.close();");
caryclark@google.comd88e0892012-03-27 13:23:51 +00003688 var pattern = /-?\d+\.*\d*/g;
caryclark@google.com24bec792012-08-20 12:43:57 +00003689 hasXor = test.split("kEvenOdd_FillType").length > 1;
caryclark@google.com752b60e2012-03-22 21:11:17 +00003690 for (var c in contourStrs) {
caryclark@google.comfb173422012-04-10 18:28:55 +00003691 var contour = contourStrs[c];
3692 var verbStrs = contour.split("path");
3693 var verbs = [];
3694 for (var v in verbStrs) {
3695 var verbStr = verbStrs[v];
3696 var points = verbStr.match(pattern);
3697 var pts = [];
3698 for (var wd in points) {
3699 var num = parseFloat(points[wd]);
3700 if (isNaN(num)) continue;
3701 pts.push(num);
3702 }
3703 if (pts.length > 0)
3704 verbs.push(pts);
caryclark@google.com752b60e2012-03-22 21:11:17 +00003705 }
caryclark@google.comfa0588f2012-04-26 21:01:06 +00003706 if (verbs.length > 0) {
3707 var lastIndex = verbs.length - 1;
3708 var lastVerb = verbs[lastIndex];
3709 var lastLen = lastVerb.length;
3710 if (verbs[0][0] != lastVerb[lastLen - 2] && verbs[0][1] != lastVerb[lastLen - 1]) {
3711 var lastPts = [];
3712 lastPts.push(verbs[0][0]);
3713 lastPts.push(verbs[0][1]);
3714 verbs.push(lastPts);
3715 }
caryclark@google.comfb173422012-04-10 18:28:55 +00003716 contours.push(verbs);
caryclark@google.comfa0588f2012-04-26 21:01:06 +00003717 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00003718 }
caryclark@google.com0e08a192012-07-13 21:07:52 +00003719 if (contours.length > 0) {
caryclark@google.comfb173422012-04-10 18:28:55 +00003720 tests.push(contours);
caryclark@google.com0e08a192012-07-13 21:07:52 +00003721 testTitles.push(title);
3722 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00003723}
3724
caryclark@google.com0e08a192012-07-13 21:07:52 +00003725function parseRect(test, title) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003726 var contours = [];
3727 var rectStrs = test.split("path.addRect");
3728 var pattern = /-?\d+\.*\d*/g;
caryclark@google.com24bec792012-08-20 12:43:57 +00003729 hasXor = test.split("kEvenOdd_FillType").length > 1;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003730 for (var r in rectStrs) {
3731 var rect = rectStrs[r];
3732 var sideStrs = rect.match(pattern);
caryclark@google.com7fce0de2012-11-29 14:31:50 +00003733 var ccw = rect.split("kCCW_Direction").length > 1;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003734 var sides = [];
3735 for (var wd in sideStrs) {
3736 var num = parseFloat(sideStrs[wd]);
3737 if (isNaN(num)) continue;
3738 sides.push(num);
3739 }
3740 if (sides.length == 0)
3741 continue;
3742 var verbs = [];
3743 var topLeft = [];
3744 topLeft.push(sides[0]); topLeft.push(sides[1]);
3745 var topRight = [];
3746 topRight.push(sides[2]); topRight.push(sides[1]);
3747 var botLeft = [];
3748 botLeft.push(sides[0]); botLeft.push(sides[3]);
3749 var botRight = [];
3750 botRight.push(sides[2]); botRight.push(sides[3]);
3751 verbs.push(topLeft);
caryclark@google.com7fce0de2012-11-29 14:31:50 +00003752 if (!ccw) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003753 verbs.push(topRight);
3754 verbs.push(botRight);
3755 verbs.push(botLeft);
3756 } else {
3757 verbs.push(botLeft);
3758 verbs.push(botRight);
3759 verbs.push(topRight);
3760 }
3761 verbs.push(topLeft);
3762 contours.push(verbs);
3763 }
caryclark@google.com0e08a192012-07-13 21:07:52 +00003764 if (contours.length > 0) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003765 tests.push(contours);
caryclark@google.com0e08a192012-07-13 21:07:52 +00003766 testTitles.push(title);
3767 }
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003768}
3769
caryclark@google.com752b60e2012-03-22 21:11:17 +00003770function init(test) {
3771 var canvas = document.getElementById('canvas');
3772 if (!canvas.getContext) return;
caryclark@google.com534aa5b2012-08-02 20:08:21 +00003773 canvas.width = window.innerWidth - at_x;
3774 canvas.height = window.innerHeight - at_y;
caryclark@google.com752b60e2012-03-22 21:11:17 +00003775 ctx = canvas.getContext('2d');
3776 var xmin = Infinity;
3777 var xmax = -Infinity;
3778 var ymin = Infinity;
3779 var ymax = -Infinity;
caryclark@google.comfb173422012-04-10 18:28:55 +00003780 for (var contours in test) {
3781 var contour = test[contours];
3782 for (var verbs in contour) {
3783 var verb = contour[verbs];
3784 var last = verb.length;
caryclark@google.comb45a1b42012-05-18 20:50:33 +00003785 for (var idx = 0; idx < last; idx += 2) {
3786 xmin = Math.min(xmin, verb[idx]);
3787 xmax = Math.max(xmax, verb[idx]);
3788 ymin = Math.min(ymin, verb[idx + 1]);
3789 ymax = Math.max(ymax, verb[idx + 1]);
3790 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00003791 }
3792 }
3793 var subscale = 1;
3794 while ((xmax - xmin) * subscale < 0.1 && (ymax - ymin) * subscale < 0.1) {
3795 subscale *= 10;
3796 }
3797 columns = Math.ceil(xmax) - Math.floor(xmin) + 1;
3798 rows = Math.ceil(ymax) - Math.floor(ymin) + 1;
3799 xStart = Math.floor(xmin);
3800 yStart = Math.floor(ymin);
3801 var hscale = ctx.canvas.width / columns / ticks;
3802 var vscale = ctx.canvas.height / rows / ticks;
3803 scale = Math.floor(Math.min(hscale, vscale)) * subscale;
3804}
3805
3806function drawPoint(px, py, xoffset, yoffset, unit) {
caryclark@google.com2ddff932012-08-07 21:25:27 +00003807 var label = px.toFixed(decimal_places) + ", " + py.toFixed(decimal_places);
caryclark@google.com752b60e2012-03-22 21:11:17 +00003808 var _px = px * unit + xoffset;
3809 var _py = py * unit + yoffset;
3810 ctx.beginPath();
3811 ctx.arc(_px, _py, 3, 0, Math.PI*2, true);
3812 ctx.closePath();
3813 ctx.fill();
3814 ctx.fillText(label, _px + 5, _py);
3815}
3816
caryclark@google.com0e08a192012-07-13 21:07:52 +00003817function draw(test, title, _at_x, _at_y, scale) {
3818 ctx.fillStyle = "rgba(0,0,0, 0.1)";
3819 ctx.font = "normal 50px Arial";
3820 ctx.fillText(title, 50, 50);
3821 ctx.font = "normal 10px Arial";
3822
caryclark@google.com752b60e2012-03-22 21:11:17 +00003823 var unit = scale * ticks;
3824 ctx.lineWidth = 1;
3825 var i;
3826 for (i = 0; i <= rows * ticks; ++i) {
3827 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
3828 ctx.beginPath();
3829 ctx.moveTo(_at_x + 0, _at_y + i * scale);
3830 ctx.lineTo(_at_x + unit * columns, _at_y + i * scale);
3831 ctx.stroke();
3832 }
3833 for (i = 0; i <= columns * ticks; ++i) {
3834 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
3835 ctx.beginPath();
3836 ctx.moveTo(_at_x + i * scale, _at_y + 0);
3837 ctx.lineTo(_at_x + i * scale, _at_y + unit * rows);
3838 ctx.stroke();
3839 }
3840
3841 var xoffset = xStart * -unit + _at_x;
3842 var yoffset = yStart * -unit + _at_y;
3843
3844 ctx.fillStyle = "rgb(40,80,60)"
3845 for (i = 0; i <= columns; i += (1 / ticks))
3846 {
3847 num = (xoffset - _at_x) / -unit + i;
3848 ctx.fillText(num.toFixed(0), i * unit + _at_y - 5, 10);
3849 }
3850 for (i = 0; i <= rows; i += (1 / ticks))
3851 {
3852 num = (yoffset - _at_x) / -unit + i;
3853 ctx.fillText(num.toFixed(0), 0, i * unit + _at_y + 0);
3854 }
caryclark@google.com32546db2012-08-31 20:55:07 +00003855
caryclark@google.com752b60e2012-03-22 21:11:17 +00003856 ctx.strokeStyle = "red";
caryclark@google.comfb173422012-04-10 18:28:55 +00003857 var contours, verbs, pts;
caryclark@google.com8dcf1142012-07-02 20:27:02 +00003858 ctx.beginPath();
caryclark@google.comfb173422012-04-10 18:28:55 +00003859 for (contours in test) {
3860 var contour = test[contours];
3861 if (contours == 2) ctx.strokeStyle = "blue";
caryclark@google.comfb173422012-04-10 18:28:55 +00003862 var first = true;
3863 for (verbs in contour) {
3864 var verb = contour[verbs];
3865 switch (verb.length) {
3866 case 2:
3867 if (first) {
3868 ctx.moveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
3869 first = false;
3870 } else
3871 ctx.lineTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
3872 break;
3873 case 4:
3874 ctx.quadraticCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
3875 xoffset + verb[2] * unit, yoffset + verb[3] * unit);
3876 break;
3877 case 6:
3878 ctx.bezierCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
3879 xoffset + verb[2] * unit, yoffset + verb[3] * unit,
3880 xoffset + verb[4] * unit, yoffset + verb[5] * unit);
3881 break;
3882 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00003883 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +00003884 ctx.closePath();
caryclark@google.com752b60e2012-03-22 21:11:17 +00003885 }
caryclark@google.com73ca6242013-01-17 21:02:47 +00003886 // uncomment if ever part of the standard
3887 // ctx.fillRule=hasXor ? evenodd : nonzero;
caryclark@google.com8dcf1142012-07-02 20:27:02 +00003888 ctx.stroke();
3889 ctx.fillStyle="rgba(192,192,255, 0.3)";
3890 ctx.fill();
caryclark@google.com752b60e2012-03-22 21:11:17 +00003891
caryclark@google.com6aea33f2012-10-09 14:11:58 +00003892 if (!draw_labels) {
3893 return;
3894 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00003895 ctx.fillStyle="blue";
caryclark@google.comfb173422012-04-10 18:28:55 +00003896 for (contours in test) {
3897 var contour = test[contours];
3898 for (verbs in contour) {
3899 var verb = contour[verbs];
3900 for (i = 0; i < verb.length; i += 2) {
3901 x = verb[i];
3902 y = verb[i + 1];
3903 drawPoint(x, y, xoffset, yoffset, unit);
3904 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00003905 }
3906 }
3907}
3908
3909var mouseX = Infinity, mouseY;
3910
3911function calcXY() {
3912 var e = window.event;
3913 var tgt = e.target || e.srcElement;
3914 var left = tgt.offsetLeft;
3915 var top = tgt.offsetTop;
3916 var unit = scale * ticks;
3917 mouseX = (e.clientX - left - Math.ceil(at_x) + 1) / unit + xStart;
3918 mouseY = (e.clientY - top - Math.ceil(at_y)) / unit + yStart;
3919}
3920
3921function handleMouseOver() {
3922 calcXY();
3923 var num = mouseX.toFixed(3) + ", " + mouseY.toFixed(3);
3924 ctx.beginPath();
3925 ctx.rect(300,100,200,10);
3926 ctx.fillStyle="white";
3927 ctx.fill();
3928 ctx.fillStyle="black";
3929 ctx.fillText(num, 300, 108);
3930}
3931
3932function handleMouseClick() {
3933 calcXY();
3934// drawInset();
3935}
3936
3937function drawTop() {
3938 init(tests[testIndex]);
3939 redraw();
3940}
3941
3942function redraw() {
3943 ctx.beginPath();
3944 ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
3945 ctx.fillStyle="white";
3946 ctx.fill();
caryclark@google.com0e08a192012-07-13 21:07:52 +00003947 draw(tests[testIndex], testTitles[testIndex], at_x, at_y, scale);
caryclark@google.com752b60e2012-03-22 21:11:17 +00003948// if (insetScale != scale && mouseX != Infinity)
3949// drawInset();
3950}
3951
3952function doKeyPress(evt) {
3953 var char = String.fromCharCode(evt.charCode);
3954 switch (char) {
3955 case 'N':
caryclark@google.com534aa5b2012-08-02 20:08:21 +00003956 testIndex += 9;
caryclark@google.com752b60e2012-03-22 21:11:17 +00003957 case 'n':
3958 if (++testIndex >= tests.length)
3959 testIndex = 0;
caryclark@google.comfa0588f2012-04-26 21:01:06 +00003960 mouseX = Infinity;
3961 drawTop();
3962 break;
3963 case 'P':
caryclark@google.com534aa5b2012-08-02 20:08:21 +00003964 testIndex -= 9;
caryclark@google.comfa0588f2012-04-26 21:01:06 +00003965 case 'p':
3966 if (--testIndex < 0)
3967 testIndex = tests.length - 1;
caryclark@google.com752b60e2012-03-22 21:11:17 +00003968 mouseX = Infinity;
3969 drawTop();
3970 break;
3971 case 'T':
3972 case 't':
caryclark@google.com752b60e2012-03-22 21:11:17 +00003973 break;
3974 case '-':
caryclark@google.com534aa5b2012-08-02 20:08:21 +00003975 drawTop();
caryclark@google.com752b60e2012-03-22 21:11:17 +00003976 break;
3977 case '=':
3978 case '+':
caryclark@google.com534aa5b2012-08-02 20:08:21 +00003979 drawTop();
caryclark@google.com752b60e2012-03-22 21:11:17 +00003980 break;
caryclark@google.com6aea33f2012-10-09 14:11:58 +00003981 case 'x':
3982 draw_labels ^= true;
3983 drawTop();
3984 break;
caryclark@google.com752b60e2012-03-22 21:11:17 +00003985 }
3986}
3987
3988function start() {
3989 for (i = 0; i < testDivs.length; ++i) {
caryclark@google.com0e08a192012-07-13 21:07:52 +00003990 var title = testDivs[i].id.toString();
caryclark@google.com752b60e2012-03-22 21:11:17 +00003991 var str = testDivs[i].firstChild.data;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003992 if (str.split("addRect").length > 1) {
caryclark@google.com0e08a192012-07-13 21:07:52 +00003993 parseRect(str, title);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003994 } else {
caryclark@google.com0e08a192012-07-13 21:07:52 +00003995 parse(str, title);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00003996 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00003997 }
3998 drawTop();
3999 window.addEventListener('keypress', doKeyPress, true);
caryclark@google.com534aa5b2012-08-02 20:08:21 +00004000 window.onresize = function() {
4001 drawTop();
4002 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00004003}
4004
4005</script>
4006</head>
4007
4008<body onLoad="start();">
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00004009<canvas id="canvas" width="750" height="500"
caryclark@google.com752b60e2012-03-22 21:11:17 +00004010 onmousemove="handleMouseOver()"
4011 onclick="handleMouseClick()"
4012 ></canvas >
4013</body>
4014</html>