blob: 2e0a44f6999c93e0e74f557eeed433e8dbcdb4f7 [file] [log] [blame]
caryclark@google.com752b60e2012-03-22 21:11:17 +00001<html>
2<head>
3<div style="height:0">
caryclark@google.comfa0588f2012-04-26 21:01:06 +00004
5<div id="testSimplifyQuadratic1">
6 SkPath path, out;
7 path.moveTo(0, 0);
8 path.quadTo(1, 0, 1, 1);
9 path.close();
10 path.moveTo(1, 0);
11 path.quadTo(0, 0, 0, 1);
12 path.close();
13 testSimplify(path, true, out, bitmap);
14}
caryclark@google.com752b60e2012-03-22 21:11:17 +000015</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000016
17<div id="testSimplifyQuadratic2">
18 SkPath path, out;
19 path.moveTo(0, 0);
20 path.quadTo(20, 0, 20, 20);
21 path.close();
22 path.moveTo(20, 0);
23 path.quadTo(0, 0, 0, 20);
24 path.close();
25 testSimplify(path, true, out, bitmap);
26}
caryclark@google.comd88e0892012-03-27 13:23:51 +000027</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000028
29<div id="testSimplifyQuadratic3">
30 SkPath path, out;
31 path.moveTo(0, 0);
32 path.quadTo(20, 0, 20, 20);
33 path.close();
34 path.moveTo(0, 20);
35 path.quadTo(0, 0, 20, 0);
36 path.close();
37 testSimplify(path, true, out, bitmap);
38}
caryclark@google.comd88e0892012-03-27 13:23:51 +000039</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000040
41<div id="testSimplifyQuadratic4">
42 SkPath path, out;
43 path.moveTo(0, 20);
44 path.quadTo(20, 0, 40, 20);
45 path.close();
46 path.moveTo(40, 10);
47 path.quadTo(20, 30, 0, 10);
48 path.close();
49 testSimplify(path, true, out, bitmap);
50 drawAsciiPaths(path, out, true);
51}
caryclark@google.comd88e0892012-03-27 13:23:51 +000052</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000053
54<div id="testSimplifyQuadratic5">
55 SkPath path, out;
56 path.moveTo(0, 0);
57 path.quadTo(0, 0, 0, 0);
58 path.lineTo(0, 0);
59 path.close();
60 path.moveTo(0, 0);
61 path.lineTo(0, 0);
62 path.quadTo(0, 0, 0, 1);
63 path.close();
64 testSimplify(path, true, out, bitmap);
65 drawAsciiPaths(path, out, true);
66}
caryclark@google.comfb173422012-04-10 18:28:55 +000067</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000068
69<div id="testSimplifyQuadratic6">
70 SkPath path, out;
71 path.moveTo(0, 0);
72 path.quadTo(0, 0, 0, 0);
73 path.lineTo(1, 0);
74 path.close();
75 path.moveTo(0, 0);
76 path.lineTo(0, 0);
77 path.quadTo(1, 0, 0, 1);
78 path.close();
79 testSimplify(path, true, out, bitmap);
80 drawAsciiPaths(path, out, true);
81}
caryclark@google.comfb173422012-04-10 18:28:55 +000082</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000083
84<div id="testSimplifyQuadratic7">
85 SkPath path, out;
86 path.moveTo(0, 0);
87 path.quadTo(0, 0, 0, 0);
88 path.lineTo(0, 1);
89 path.close();
90 path.moveTo(0, 0);
91 path.lineTo(0, 0);
92 path.quadTo(1, 0, 0, 2);
93 path.close();
94 testSimplify(path, true, out, bitmap);
95 drawAsciiPaths(path, out, true);
96}
97</div>
98
99<div id="testSimplifyQuadratic8">
100 SkPath path, out;
101 path.moveTo(0, 0);
102 path.quadTo(0, 0, 0, 0);
103 path.lineTo(0, 0);
104 path.close();
105 path.moveTo(0, 0);
106 path.lineTo(0, 0);
107 path.quadTo(1, 0, 0, 2);
108 path.close();
109 testSimplify(path, true, out, bitmap);
110 drawAsciiPaths(path, out, true);
111}
112</div>
113
114<div id="testSimplifyQuadratic9">
115 SkPath path, out;
116 path.moveTo(0, 0);
117 path.quadTo(0, 0, 0, 0);
118 path.lineTo(1, 1);
119 path.close();
120 path.moveTo(0, 0);
121 path.lineTo(0, 0);
122 path.quadTo(1, 0, 2, 2);
123 path.close();
124 testSimplify(path, true, out, bitmap);
125 drawAsciiPaths(path, out, true);
126}
127</div>
128
129<div id="testSimplifyQuadratic10">
130 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000131 path.moveTo(0, 0);
132 path.quadTo(0, 0, 0, 0);
133 path.lineTo(0, 0);
134 path.close();
135 path.moveTo(0, 0);
136 path.lineTo(0, 1);
137 path.quadTo(1, 1, 1, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000138 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000139 testSimplify(path, true, out, bitmap);
140 drawAsciiPaths(path, out, true);
141}
caryclark@google.com78e17132012-04-17 11:40:34 +0000142</div>
143
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000144<div id="testSimplifyQuadratic11">
145 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000146 path.moveTo(0, 0);
147 path.quadTo(0, 0, 0, 0);
148 path.lineTo(0, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000149 path.close();
150 path.moveTo(0, 0);
151 path.lineTo(2, 1);
152 path.quadTo(2, 2, 3, 3);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000153 path.close();
154 testSimplify(path, true, out, bitmap);
155 drawAsciiPaths(path, out, true);
156}
157</div>
158
159<div id="testSimplifyQuadratic12">
160 SkPath path, out;
161 path.moveTo(0, 0);
162 path.lineTo(0, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000163 path.lineTo(0, 0);
164 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000165 path.moveTo(3, 0);
166 path.quadTo(1, 1, 0, 2);
167 path.lineTo(3, 0);
168 path.close();
169 testSimplify(path, true, out, bitmap);
170 drawAsciiPaths(path, out, true);
171}
caryclark@google.com78e17132012-04-17 11:40:34 +0000172</div>
173
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000174<div id="testSimplifyQuadratic13">
175 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000176path.moveTo(0, 0);
177path.quadTo(0, 0, 1, 0);
178path.lineTo(1, 1);
179path.lineTo(0, 0);
180path.close();
181path.moveTo(0, 0);
182path.quadTo(3, 0, 1, 1);
183path.lineTo(0, 0);
184path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000185 testSimplify(path, true, out, bitmap);
186 drawAsciiPaths(path, out, true);
187}
caryclark@google.com78e17132012-04-17 11:40:34 +0000188</div>
189
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000190<div id="testSimplifyQuadratic14">
191 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000192 path.moveTo(0, 0);
193 path.quadTo(0, 0, 0, 0);
194 path.lineTo(1, 1);
caryclark@google.com78e17132012-04-17 11:40:34 +0000195 path.close();
196 path.moveTo(0, 0);
197 path.lineTo(0, 0);
198 path.quadTo(0, 1, 2, 1);
caryclark@google.com78e17132012-04-17 11:40:34 +0000199 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000200 testSimplify(path, true, out, bitmap);
201 drawAsciiPaths(path, out, true);
202}
caryclark@google.com78e17132012-04-17 11:40:34 +0000203</div>
204
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000205<div id="testSimplifyQuadratic15">
206 SkPath path, out;
207 path.moveTo(0, 0);
208 path.quadTo(0, 0, 1, 3);
209 path.lineTo(3, 3);
210 path.close();
211 path.moveTo(0, 1);
212 path.lineTo(1, 1);
213 path.quadTo(0, 3, 3, 3);
214 path.close();
215 testSimplify(path, true, out, bitmap);
216 drawAsciiPaths(path, out, true);
217}
218</div>
219
220<div id="testSimplifyQuadratic16">
221 SkPath path, out;
222 path.moveTo(0, 0);
223 path.quadTo(0, 0, 0, 0);
224 path.lineTo(0, 1);
225 path.close();
226 path.moveTo(0, 0);
227 path.lineTo(0, 0);
228 path.quadTo(1, 0, 0, 1);
229 path.close();
230 testSimplify(path, true, out, bitmap);
231 drawAsciiPaths(path, out, true);
232}
233</div>
234
235<div id="testSimplifyQuadratic17">
236 SkPath path, out;
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000237 path.moveTo(8, 8);
238 path.quadTo(10, 10, 8, -10);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000239 path.close();
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000240 path.moveTo(8, 8);
241 path.quadTo(12, 12, 14, 4);
242 path.close();
243 path.moveTo(8, 8);
244 path.quadTo(9, 9, 10, 8);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000245 path.close();
246 testSimplify(path, true, out, bitmap);
247 drawAsciiPaths(path, out, true);
248}
caryclark@google.com78e17132012-04-17 11:40:34 +0000249</div>
caryclark@google.comfb173422012-04-10 18:28:55 +0000250
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000251<div id="testSimplifyQuadratic18">
252 SkPath path, out;
253 path.moveTo(8.0000000000000071, 8.0000000000000071);
254 path.quadTo(8.7289570079366854, 8.7289570079366889, 9.3914917259458743, 9.0593802763083691);
255 path.close();
256 path.moveTo(8.0000000000000142, 8.0000000000000142);
257 path.quadTo(8.1250000000000107, 8.1250000000000071, 8.2500000000000071, 8.2187500000000053);
258 path.close();
259 testSimplify(path, true, out, bitmap);
260 drawAsciiPaths(path, out, true);
261</div>
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000262
263<div id="testSimplifyQuadratic19">
264 SkPath path, simple;
265 path.moveTo(0,4);
266 path.lineTo(6,4);
267 path.lineTo(3,1);
268 path.close();
269 path.moveTo(2,3);
270 path.lineTo(3,2);
271 path.lineTo(4,3);
272 path.close();
273 testSimplifyx(path);
274</div>
275
276<div id="testSimplifyQuadratic20">
277 SkPath path, simple;
278 path.moveTo(0,4);
279 path.lineTo(6,4);
280 path.lineTo(3,1);
281 path.close();
282 path.moveTo(2,3);
283 path.lineTo(4,3);
284 path.lineTo(3,2);
285 path.close();
286 testSimplifyx(path);
287</div>
288
289<div id="testSimplifyQuadratic21">
290 SkPath path, simple;
291 path.moveTo(0,4);
292 path.lineTo(8,4);
293 path.lineTo(4,0);
294 path.close();
295 path.moveTo(2,2);
296 path.lineTo(3,3);
297 path.lineTo(4,2);
298 path.close();
299 testSimplifyx(path);
300</div>
301
302<div id="testLine6">
303 SkPath path, simple;
304 path.moveTo(0,0);
305 path.lineTo(4,0);
306 path.lineTo(2,2);
307 path.close();
308 path.moveTo(2,0);
309 path.lineTo(6,0);
310 path.lineTo(4,2);
311 path.close();
312 testSimplifyx(path);
313</div>
314
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000315<div id="testLine7">
316 SkPath path, simple;
317 path.moveTo(0,0);
318 path.lineTo(4,0);
319 path.lineTo(2,2);
320 path.close();
321 path.moveTo(6,0);
322 path.lineTo(2,0);
323 path.lineTo(4,2);
324 path.close();
325 testSimplifyx(path);
326</div>
327
328<div id="testLine9">
329 SkPath path, simple;
330 path.moveTo(0,4);
331 path.lineTo(4,4);
332 path.lineTo(2,2);
333 path.close();
334 path.moveTo(6,4);
335 path.lineTo(2,4);
336 path.lineTo(4,2);
337 path.close();
338 testSimplifyx(path);
339</div>
340
caryclark@google.come21cb182012-07-23 21:26:31 +0000341<div id="testLine12">
342 path.moveTo(0,4);
343 path.lineTo(6,4);
344 path.lineTo(3,1);
345 path.close();
346 path.moveTo(2,3);
347 path.lineTo(3,2);
348 path.lineTo(4,3);
349 path.close();
350</div>
351
352<div id="testLine13">
353 path.moveTo(6,4);
354 path.lineTo(0,4);
355 path.lineTo(3,1);
356 path.close();
357 path.moveTo(3,2);
358 path.lineTo(2,3);
359 path.lineTo(4,3);
360 path.close();
361</div>
362
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000363<div id="testLine17">
364 SkPath path, simple;
365 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
366 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
367 testSimplifyx(path);
368</div>
369
caryclark@google.com47580692012-07-23 12:14:49 +0000370<div id="testLine19">
371 SkPath path, simple;
372 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
373 path.addRect(12, 16, 21, 21, (SkPath::Direction) 0);
374 testSimplifyx(path);
375</div>
376
377<div id="testLine24">
378 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
379 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
380</div>
381
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000382<div id="testLine28">
383 SkPath path, simple;
384 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
385 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
386 testSimplifyx(path);
387</div>
388
389<div id="testLine29">
390 SkPath path, simple;
391 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
392 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
393 testSimplifyx(path);
394</div>
395
396<div id="testLine30">
397 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
398 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
399 path.addRect(4, 4, 13, 13, (SkPath::Direction) 0);
400</div>
401
402<div id="testLine31">
403 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
404 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
405 path.addRect(0, 4, 9, 9, (SkPath::Direction) 0);
406</div>
407
408<div id="testLine32">
409 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
410 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
411 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
412</div>
413
caryclark@google.com9764cc62012-07-12 19:29:45 +0000414<div id="testLine33">
415 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
416 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
417 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
418</div>
419
caryclark@google.com210acaf2012-07-12 21:05:13 +0000420<div id="testLine34">
421 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
422 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
423 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
424</div>
425
426<div id="testLine35">
427 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
428 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
429 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
430</div>
431
caryclark@google.com0e08a192012-07-13 21:07:52 +0000432<div id="testLine36">
433 path.addRect(0, 10, 20, 20, (SkPath::Direction) 0);
434 path.addRect(6, 12, 18, 18, (SkPath::Direction) 0);
435 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
436</div>
437
caryclark@google.com47580692012-07-23 12:14:49 +0000438<div id="testLine37">
439 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
440 path.addRect(18, 24, 30, 30, (SkPath::Direction) 0);
441 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
442</div>
443
444<div id="testLine38">
445 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
446 path.addRect(6, 12, 18, 18, (SkPath::Direction) 0);
447 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
448</div>
449
450<div id="testLine39">
451 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
452 path.addRect(12, 6, 24, 24, (SkPath::Direction) 0);
453 path.addRect(12, 4, 21, 21, (SkPath::Direction) 0);
454</div>
455
456<div id="testLine40">
457 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
458 path.addRect(12, 18, 24, 24, (SkPath::Direction) 0);
459 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
460</div>
461
462<div id="testLine41">
463 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
464 path.addRect(18, 24, 30, 30, (SkPath::Direction) 0);
465 path.addRect(12, 0, 21, 21, (SkPath::Direction) 0);
466</div>
467
468<div id="testLine42">
469 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
470 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
471 path.addRect(8, 16, 17, 17, (SkPath::Direction) 0);
472</div>
473
474<div id="testLine43">
475 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
476 path.addRect(6, 24, 18, 18, (SkPath::Direction) 0);
477 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
478</div>
479
480<div id="testLine44">
481 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
482 path.addRect(18, 0, 30, 30, (SkPath::Direction) 0);
483 path.addRect(18, 32, 27, 36, (SkPath::Direction) 1);
484</div>
485
486<div id="testLine45">
487 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
488 path.addRect(18, 0, 30, 30, (SkPath::Direction) 0);
489 path.addRect(24, 32, 33, 36, (SkPath::Direction) 0);
490</div>
491
492<div id="testLine46">
493 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
494 path.addRect(24, 0, 36, 36, (SkPath::Direction) 0);
495 path.addRect(24, 32, 33, 36, (SkPath::Direction) 0);
496</div>
497
498<div id="testLine47">
499 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
500 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
501 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
502</div>
503
504<div id="testLine48">
505 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
506 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
507 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
508</div>
509
510<div id="testLine49">
511 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
512 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
513 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
514</div>
515
516<div id="testLine50">
517 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
518 path.addRect(24, 20, 36, 30, (SkPath::Direction) 0);
519</div>
520
521<div id="testLine51">
522 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
523 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
524 path.addRect(4, 12, 13, 13, (SkPath::Direction) 1);
525</div>
526
caryclark@google.come21cb182012-07-23 21:26:31 +0000527<div id="testLine52">
528 path.addRect(0, 30, 20, 20, (SkPath::Direction) 0);
529 path.addRect(6, 20, 18, 30, (SkPath::Direction) 0);
530 path.addRect(32, 0, 36, 41, (SkPath::Direction) 0);
531</div>
532
533<div id="testLine53">
534 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
535 path.addRect(12, 20, 24, 30, (SkPath::Direction) 0);
536 path.addRect(12, 32, 21, 36, (SkPath::Direction) 1);
537</div>
538
539<div id="testLine54">
540 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
541 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
542 path.addRect(8, 4, 17, 17, (SkPath::Direction) 1);
543</div>
544
545<div id="testLine55">
546 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
547 path.addRect(6, 6, 18, 18, (SkPath::Direction) 0);
548 path.addRect(4, 4, 13, 13, (SkPath::Direction) 1);
549</div>
550
caryclark@google.com18063442012-07-25 12:05:18 +0000551<div id="testLine56">
552 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
553 path.addRect(18, 20, 30, 30, (SkPath::Direction) 0);
554 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
555</div>
556
557<div id="testLine57">
558 path.addRect(20, 0, 40, 40, (SkPath::Direction) 0);
559 path.addRect(20, 0, 30, 40, (SkPath::Direction) 0);
560 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
561</div>
562
caryclark@google.com752b60e2012-03-22 21:11:17 +0000563</div>
564
565<script type="text/javascript">
566
567var testDivs = [
caryclark@google.com18063442012-07-25 12:05:18 +0000568 testLine57,
569 testLine56,
caryclark@google.come21cb182012-07-23 21:26:31 +0000570 testLine55,
571 testLine54,
572 testLine53,
573 testLine52,
caryclark@google.com47580692012-07-23 12:14:49 +0000574 testLine51,
575 testLine50,
576 testLine49,
577 testLine48,
578 testLine47,
579 testLine46,
580 testLine45,
581 testLine44,
582 testLine43,
583 testLine42,
584 testLine41,
585 testLine40,
586 testLine39,
587 testLine38,
588 testLine37,
caryclark@google.com0e08a192012-07-13 21:07:52 +0000589 testLine36,
caryclark@google.com210acaf2012-07-12 21:05:13 +0000590 testLine35,
591 testLine34,
caryclark@google.com9764cc62012-07-12 19:29:45 +0000592 testLine33,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000593 testLine30,
594 testLine32,
595 testLine31,
596 testLine29,
597 testLine28,
caryclark@google.com47580692012-07-23 12:14:49 +0000598 testLine24,
599 testLine19,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000600 testLine17,
caryclark@google.come21cb182012-07-23 21:26:31 +0000601 testLine13,
602 testLine12,
caryclark@google.com47580692012-07-23 12:14:49 +0000603 testLine9,
604 testLine7,
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000605 testSimplifyQuadratic21,
606 testSimplifyQuadratic20,
607 testSimplifyQuadratic19,
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000608 testSimplifyQuadratic18,
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000609 testSimplifyQuadratic17,
610 testSimplifyQuadratic16,
611 testSimplifyQuadratic15,
612 testSimplifyQuadratic14,
613 testSimplifyQuadratic13,
614 testSimplifyQuadratic12,
615 testSimplifyQuadratic11,
616 testSimplifyQuadratic10,
617 testSimplifyQuadratic9,
618 testSimplifyQuadratic8,
619 testSimplifyQuadratic7,
620 testSimplifyQuadratic6,
621 testSimplifyQuadratic5,
622 testSimplifyQuadratic4,
623 testSimplifyQuadratic3,
624 testSimplifyQuadratic2,
625 testSimplifyQuadratic1,
caryclark@google.com752b60e2012-03-22 21:11:17 +0000626];
627
628var scale, columns, rows, xStart, yStart;
629
630var ticks = 0.1;
631var at_x = 13 + 0.5;
632var at_y = 13 + 0.5;
633
634var tests = [];
caryclark@google.com0e08a192012-07-13 21:07:52 +0000635var testTitles = [];
caryclark@google.com752b60e2012-03-22 21:11:17 +0000636var testIndex = 0;
637
638var ctx;
639
caryclark@google.com0e08a192012-07-13 21:07:52 +0000640function parse(test, title) {
caryclark@google.com752b60e2012-03-22 21:11:17 +0000641 var contours = [];
642 var contourStrs = test.split("path.close();");
caryclark@google.comd88e0892012-03-27 13:23:51 +0000643 var pattern = /-?\d+\.*\d*/g;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000644 for (var c in contourStrs) {
caryclark@google.comfb173422012-04-10 18:28:55 +0000645 var contour = contourStrs[c];
646 var verbStrs = contour.split("path");
647 var verbs = [];
648 for (var v in verbStrs) {
649 var verbStr = verbStrs[v];
650 var points = verbStr.match(pattern);
651 var pts = [];
652 for (var wd in points) {
653 var num = parseFloat(points[wd]);
654 if (isNaN(num)) continue;
655 pts.push(num);
656 }
657 if (pts.length > 0)
658 verbs.push(pts);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000659 }
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000660 if (verbs.length > 0) {
661 var lastIndex = verbs.length - 1;
662 var lastVerb = verbs[lastIndex];
663 var lastLen = lastVerb.length;
664 if (verbs[0][0] != lastVerb[lastLen - 2] && verbs[0][1] != lastVerb[lastLen - 1]) {
665 var lastPts = [];
666 lastPts.push(verbs[0][0]);
667 lastPts.push(verbs[0][1]);
668 verbs.push(lastPts);
669 }
caryclark@google.comfb173422012-04-10 18:28:55 +0000670 contours.push(verbs);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000671 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000672 }
caryclark@google.com0e08a192012-07-13 21:07:52 +0000673 if (contours.length > 0) {
caryclark@google.comfb173422012-04-10 18:28:55 +0000674 tests.push(contours);
caryclark@google.com0e08a192012-07-13 21:07:52 +0000675 testTitles.push(title);
676 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000677}
678
caryclark@google.com0e08a192012-07-13 21:07:52 +0000679function parseRect(test, title) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000680 var contours = [];
681 var rectStrs = test.split("path.addRect");
682 var pattern = /-?\d+\.*\d*/g;
683 for (var r in rectStrs) {
684 var rect = rectStrs[r];
685 var sideStrs = rect.match(pattern);
686 var sides = [];
687 for (var wd in sideStrs) {
688 var num = parseFloat(sideStrs[wd]);
689 if (isNaN(num)) continue;
690 sides.push(num);
691 }
692 if (sides.length == 0)
693 continue;
694 var verbs = [];
695 var topLeft = [];
696 topLeft.push(sides[0]); topLeft.push(sides[1]);
697 var topRight = [];
698 topRight.push(sides[2]); topRight.push(sides[1]);
699 var botLeft = [];
700 botLeft.push(sides[0]); botLeft.push(sides[3]);
701 var botRight = [];
702 botRight.push(sides[2]); botRight.push(sides[3]);
703 verbs.push(topLeft);
704 if (sides[4] == 0) {
705 verbs.push(topRight);
706 verbs.push(botRight);
707 verbs.push(botLeft);
708 } else {
709 verbs.push(botLeft);
710 verbs.push(botRight);
711 verbs.push(topRight);
712 }
713 verbs.push(topLeft);
714 contours.push(verbs);
715 }
caryclark@google.com0e08a192012-07-13 21:07:52 +0000716 if (contours.length > 0) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000717 tests.push(contours);
caryclark@google.com0e08a192012-07-13 21:07:52 +0000718 testTitles.push(title);
719 }
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000720}
721
caryclark@google.com752b60e2012-03-22 21:11:17 +0000722function init(test) {
723 var canvas = document.getElementById('canvas');
724 if (!canvas.getContext) return;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000725 canvas.width = document.width;
726 canvas.height = document.height;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000727 ctx = canvas.getContext('2d');
728 var xmin = Infinity;
729 var xmax = -Infinity;
730 var ymin = Infinity;
731 var ymax = -Infinity;
caryclark@google.comfb173422012-04-10 18:28:55 +0000732 for (var contours in test) {
733 var contour = test[contours];
734 for (var verbs in contour) {
735 var verb = contour[verbs];
736 var last = verb.length;
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000737 for (var idx = 0; idx < last; idx += 2) {
738 xmin = Math.min(xmin, verb[idx]);
739 xmax = Math.max(xmax, verb[idx]);
740 ymin = Math.min(ymin, verb[idx + 1]);
741 ymax = Math.max(ymax, verb[idx + 1]);
742 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000743 }
744 }
745 var subscale = 1;
746 while ((xmax - xmin) * subscale < 0.1 && (ymax - ymin) * subscale < 0.1) {
747 subscale *= 10;
748 }
749 columns = Math.ceil(xmax) - Math.floor(xmin) + 1;
750 rows = Math.ceil(ymax) - Math.floor(ymin) + 1;
751 xStart = Math.floor(xmin);
752 yStart = Math.floor(ymin);
753 var hscale = ctx.canvas.width / columns / ticks;
754 var vscale = ctx.canvas.height / rows / ticks;
755 scale = Math.floor(Math.min(hscale, vscale)) * subscale;
756}
757
758function drawPoint(px, py, xoffset, yoffset, unit) {
caryclark@google.comd88e0892012-03-27 13:23:51 +0000759 var label = px.toFixed(3) + ", " + py.toFixed(3);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000760 var _px = px * unit + xoffset;
761 var _py = py * unit + yoffset;
762 ctx.beginPath();
763 ctx.arc(_px, _py, 3, 0, Math.PI*2, true);
764 ctx.closePath();
765 ctx.fill();
766 ctx.fillText(label, _px + 5, _py);
767}
768
caryclark@google.com0e08a192012-07-13 21:07:52 +0000769function draw(test, title, _at_x, _at_y, scale) {
770 ctx.fillStyle = "rgba(0,0,0, 0.1)";
771 ctx.font = "normal 50px Arial";
772 ctx.fillText(title, 50, 50);
773 ctx.font = "normal 10px Arial";
774
caryclark@google.com752b60e2012-03-22 21:11:17 +0000775 var unit = scale * ticks;
776 ctx.lineWidth = 1;
777 var i;
778 for (i = 0; i <= rows * ticks; ++i) {
779 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
780 ctx.beginPath();
781 ctx.moveTo(_at_x + 0, _at_y + i * scale);
782 ctx.lineTo(_at_x + unit * columns, _at_y + i * scale);
783 ctx.stroke();
784 }
785 for (i = 0; i <= columns * ticks; ++i) {
786 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
787 ctx.beginPath();
788 ctx.moveTo(_at_x + i * scale, _at_y + 0);
789 ctx.lineTo(_at_x + i * scale, _at_y + unit * rows);
790 ctx.stroke();
791 }
792
793 var xoffset = xStart * -unit + _at_x;
794 var yoffset = yStart * -unit + _at_y;
795
796 ctx.fillStyle = "rgb(40,80,60)"
797 for (i = 0; i <= columns; i += (1 / ticks))
798 {
799 num = (xoffset - _at_x) / -unit + i;
800 ctx.fillText(num.toFixed(0), i * unit + _at_y - 5, 10);
801 }
802 for (i = 0; i <= rows; i += (1 / ticks))
803 {
804 num = (yoffset - _at_x) / -unit + i;
805 ctx.fillText(num.toFixed(0), 0, i * unit + _at_y + 0);
806 }
807 ctx.strokeStyle = "red";
caryclark@google.comfb173422012-04-10 18:28:55 +0000808 var contours, verbs, pts;
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000809 ctx.beginPath();
caryclark@google.comfb173422012-04-10 18:28:55 +0000810 for (contours in test) {
811 var contour = test[contours];
812 if (contours == 2) ctx.strokeStyle = "blue";
caryclark@google.comfb173422012-04-10 18:28:55 +0000813 var first = true;
814 for (verbs in contour) {
815 var verb = contour[verbs];
816 switch (verb.length) {
817 case 2:
818 if (first) {
819 ctx.moveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
820 first = false;
821 } else
822 ctx.lineTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
823 break;
824 case 4:
825 ctx.quadraticCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
826 xoffset + verb[2] * unit, yoffset + verb[3] * unit);
827 break;
828 case 6:
829 ctx.bezierCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
830 xoffset + verb[2] * unit, yoffset + verb[3] * unit,
831 xoffset + verb[4] * unit, yoffset + verb[5] * unit);
832 break;
833 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000834 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000835 ctx.closePath();
caryclark@google.com752b60e2012-03-22 21:11:17 +0000836 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000837 ctx.stroke();
838 ctx.fillStyle="rgba(192,192,255, 0.3)";
839 ctx.fill();
caryclark@google.com752b60e2012-03-22 21:11:17 +0000840
841 ctx.fillStyle="blue";
caryclark@google.comfb173422012-04-10 18:28:55 +0000842 for (contours in test) {
843 var contour = test[contours];
844 for (verbs in contour) {
845 var verb = contour[verbs];
846 for (i = 0; i < verb.length; i += 2) {
847 x = verb[i];
848 y = verb[i + 1];
849 drawPoint(x, y, xoffset, yoffset, unit);
850 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000851 }
852 }
853}
854
855var mouseX = Infinity, mouseY;
856
857function calcXY() {
858 var e = window.event;
859 var tgt = e.target || e.srcElement;
860 var left = tgt.offsetLeft;
861 var top = tgt.offsetTop;
862 var unit = scale * ticks;
863 mouseX = (e.clientX - left - Math.ceil(at_x) + 1) / unit + xStart;
864 mouseY = (e.clientY - top - Math.ceil(at_y)) / unit + yStart;
865}
866
867function handleMouseOver() {
868 calcXY();
869 var num = mouseX.toFixed(3) + ", " + mouseY.toFixed(3);
870 ctx.beginPath();
871 ctx.rect(300,100,200,10);
872 ctx.fillStyle="white";
873 ctx.fill();
874 ctx.fillStyle="black";
875 ctx.fillText(num, 300, 108);
876}
877
878function handleMouseClick() {
879 calcXY();
880// drawInset();
881}
882
883function drawTop() {
884 init(tests[testIndex]);
885 redraw();
886}
887
888function redraw() {
889 ctx.beginPath();
890 ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
891 ctx.fillStyle="white";
892 ctx.fill();
caryclark@google.com0e08a192012-07-13 21:07:52 +0000893 draw(tests[testIndex], testTitles[testIndex], at_x, at_y, scale);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000894// if (insetScale != scale && mouseX != Infinity)
895// drawInset();
896}
897
898function doKeyPress(evt) {
899 var char = String.fromCharCode(evt.charCode);
900 switch (char) {
901 case 'N':
902 case 'n':
903 if (++testIndex >= tests.length)
904 testIndex = 0;
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000905 mouseX = Infinity;
906 drawTop();
907 break;
908 case 'P':
909 case 'p':
910 if (--testIndex < 0)
911 testIndex = tests.length - 1;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000912 mouseX = Infinity;
913 drawTop();
914 break;
915 case 'T':
916 case 't':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000917 break;
918 case '-':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000919 redraw();
920 break;
921 case '=':
922 case '+':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000923 redraw();
924 break;
925 }
926}
927
928function start() {
929 for (i = 0; i < testDivs.length; ++i) {
caryclark@google.com0e08a192012-07-13 21:07:52 +0000930 var title = testDivs[i].id.toString();
caryclark@google.com752b60e2012-03-22 21:11:17 +0000931 var str = testDivs[i].firstChild.data;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000932 if (str.split("addRect").length > 1) {
caryclark@google.com0e08a192012-07-13 21:07:52 +0000933 parseRect(str, title);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000934 } else {
caryclark@google.com0e08a192012-07-13 21:07:52 +0000935 parse(str, title);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000936 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000937 }
938 drawTop();
939 window.addEventListener('keypress', doKeyPress, true);
940}
941
942</script>
943</head>
944
945<body onLoad="start();">
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000946<canvas id="canvas" width="750" height="500"
caryclark@google.com752b60e2012-03-22 21:11:17 +0000947 onmousemove="handleMouseOver()"
948 onclick="handleMouseClick()"
949 ></canvas >
950</body>
951</html>