blob: ce40130fd52d1fd940e54762616248c26de06c8d [file] [log] [blame]
caryclark@google.com752b60e2012-03-22 21:11:17 +00001<html>
2<head>
3<div style="height:0">
caryclark@google.comfa0588f2012-04-26 21:01:06 +00004
5<div id="testSimplifyQuadratic1">
6 SkPath path, out;
7 path.moveTo(0, 0);
8 path.quadTo(1, 0, 1, 1);
9 path.close();
10 path.moveTo(1, 0);
11 path.quadTo(0, 0, 0, 1);
12 path.close();
13 testSimplify(path, true, out, bitmap);
14}
caryclark@google.com752b60e2012-03-22 21:11:17 +000015</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000016
17<div id="testSimplifyQuadratic2">
18 SkPath path, out;
19 path.moveTo(0, 0);
20 path.quadTo(20, 0, 20, 20);
21 path.close();
22 path.moveTo(20, 0);
23 path.quadTo(0, 0, 0, 20);
24 path.close();
25 testSimplify(path, true, out, bitmap);
26}
caryclark@google.comd88e0892012-03-27 13:23:51 +000027</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000028
29<div id="testSimplifyQuadratic3">
30 SkPath path, out;
31 path.moveTo(0, 0);
32 path.quadTo(20, 0, 20, 20);
33 path.close();
34 path.moveTo(0, 20);
35 path.quadTo(0, 0, 20, 0);
36 path.close();
37 testSimplify(path, true, out, bitmap);
38}
caryclark@google.comd88e0892012-03-27 13:23:51 +000039</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000040
41<div id="testSimplifyQuadratic4">
42 SkPath path, out;
43 path.moveTo(0, 20);
44 path.quadTo(20, 0, 40, 20);
45 path.close();
46 path.moveTo(40, 10);
47 path.quadTo(20, 30, 0, 10);
48 path.close();
49 testSimplify(path, true, out, bitmap);
50 drawAsciiPaths(path, out, true);
51}
caryclark@google.comd88e0892012-03-27 13:23:51 +000052</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000053
54<div id="testSimplifyQuadratic5">
55 SkPath path, out;
56 path.moveTo(0, 0);
57 path.quadTo(0, 0, 0, 0);
58 path.lineTo(0, 0);
59 path.close();
60 path.moveTo(0, 0);
61 path.lineTo(0, 0);
62 path.quadTo(0, 0, 0, 1);
63 path.close();
64 testSimplify(path, true, out, bitmap);
65 drawAsciiPaths(path, out, true);
66}
caryclark@google.comfb173422012-04-10 18:28:55 +000067</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000068
69<div id="testSimplifyQuadratic6">
70 SkPath path, out;
71 path.moveTo(0, 0);
72 path.quadTo(0, 0, 0, 0);
73 path.lineTo(1, 0);
74 path.close();
75 path.moveTo(0, 0);
76 path.lineTo(0, 0);
77 path.quadTo(1, 0, 0, 1);
78 path.close();
79 testSimplify(path, true, out, bitmap);
80 drawAsciiPaths(path, out, true);
81}
caryclark@google.comfb173422012-04-10 18:28:55 +000082</div>
caryclark@google.comfa0588f2012-04-26 21:01:06 +000083
84<div id="testSimplifyQuadratic7">
85 SkPath path, out;
86 path.moveTo(0, 0);
87 path.quadTo(0, 0, 0, 0);
88 path.lineTo(0, 1);
89 path.close();
90 path.moveTo(0, 0);
91 path.lineTo(0, 0);
92 path.quadTo(1, 0, 0, 2);
93 path.close();
94 testSimplify(path, true, out, bitmap);
95 drawAsciiPaths(path, out, true);
96}
97</div>
98
99<div id="testSimplifyQuadratic8">
100 SkPath path, out;
101 path.moveTo(0, 0);
102 path.quadTo(0, 0, 0, 0);
103 path.lineTo(0, 0);
104 path.close();
105 path.moveTo(0, 0);
106 path.lineTo(0, 0);
107 path.quadTo(1, 0, 0, 2);
108 path.close();
109 testSimplify(path, true, out, bitmap);
110 drawAsciiPaths(path, out, true);
111}
112</div>
113
114<div id="testSimplifyQuadratic9">
115 SkPath path, out;
116 path.moveTo(0, 0);
117 path.quadTo(0, 0, 0, 0);
118 path.lineTo(1, 1);
119 path.close();
120 path.moveTo(0, 0);
121 path.lineTo(0, 0);
122 path.quadTo(1, 0, 2, 2);
123 path.close();
124 testSimplify(path, true, out, bitmap);
125 drawAsciiPaths(path, out, true);
126}
127</div>
128
129<div id="testSimplifyQuadratic10">
130 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000131 path.moveTo(0, 0);
132 path.quadTo(0, 0, 0, 0);
133 path.lineTo(0, 0);
134 path.close();
135 path.moveTo(0, 0);
136 path.lineTo(0, 1);
137 path.quadTo(1, 1, 1, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000138 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000139 testSimplify(path, true, out, bitmap);
140 drawAsciiPaths(path, out, true);
141}
caryclark@google.com78e17132012-04-17 11:40:34 +0000142</div>
143
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000144<div id="testSimplifyQuadratic11">
145 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000146 path.moveTo(0, 0);
147 path.quadTo(0, 0, 0, 0);
148 path.lineTo(0, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000149 path.close();
150 path.moveTo(0, 0);
151 path.lineTo(2, 1);
152 path.quadTo(2, 2, 3, 3);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000153 path.close();
154 testSimplify(path, true, out, bitmap);
155 drawAsciiPaths(path, out, true);
156}
157</div>
158
159<div id="testSimplifyQuadratic12">
160 SkPath path, out;
161 path.moveTo(0, 0);
162 path.lineTo(0, 2);
caryclark@google.com78e17132012-04-17 11:40:34 +0000163 path.lineTo(0, 0);
164 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000165 path.moveTo(3, 0);
166 path.quadTo(1, 1, 0, 2);
167 path.lineTo(3, 0);
168 path.close();
169 testSimplify(path, true, out, bitmap);
170 drawAsciiPaths(path, out, true);
171}
caryclark@google.com78e17132012-04-17 11:40:34 +0000172</div>
173
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000174<div id="testSimplifyQuadratic13">
175 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000176path.moveTo(0, 0);
177path.quadTo(0, 0, 1, 0);
178path.lineTo(1, 1);
179path.lineTo(0, 0);
180path.close();
181path.moveTo(0, 0);
182path.quadTo(3, 0, 1, 1);
183path.lineTo(0, 0);
184path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000185 testSimplify(path, true, out, bitmap);
186 drawAsciiPaths(path, out, true);
187}
caryclark@google.com78e17132012-04-17 11:40:34 +0000188</div>
189
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000190<div id="testSimplifyQuadratic14">
191 SkPath path, out;
caryclark@google.com78e17132012-04-17 11:40:34 +0000192 path.moveTo(0, 0);
193 path.quadTo(0, 0, 0, 0);
194 path.lineTo(1, 1);
caryclark@google.com78e17132012-04-17 11:40:34 +0000195 path.close();
196 path.moveTo(0, 0);
197 path.lineTo(0, 0);
198 path.quadTo(0, 1, 2, 1);
caryclark@google.com78e17132012-04-17 11:40:34 +0000199 path.close();
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000200 testSimplify(path, true, out, bitmap);
201 drawAsciiPaths(path, out, true);
202}
caryclark@google.com78e17132012-04-17 11:40:34 +0000203</div>
204
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000205<div id="testSimplifyQuadratic15">
206 SkPath path, out;
207 path.moveTo(0, 0);
208 path.quadTo(0, 0, 1, 3);
209 path.lineTo(3, 3);
210 path.close();
211 path.moveTo(0, 1);
212 path.lineTo(1, 1);
213 path.quadTo(0, 3, 3, 3);
214 path.close();
215 testSimplify(path, true, out, bitmap);
216 drawAsciiPaths(path, out, true);
217}
218</div>
219
220<div id="testSimplifyQuadratic16">
221 SkPath path, out;
222 path.moveTo(0, 0);
223 path.quadTo(0, 0, 0, 0);
224 path.lineTo(0, 1);
225 path.close();
226 path.moveTo(0, 0);
227 path.lineTo(0, 0);
228 path.quadTo(1, 0, 0, 1);
229 path.close();
230 testSimplify(path, true, out, bitmap);
231 drawAsciiPaths(path, out, true);
232}
233</div>
234
235<div id="testSimplifyQuadratic17">
236 SkPath path, out;
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000237 path.moveTo(8, 8);
238 path.quadTo(10, 10, 8, -10);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000239 path.close();
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000240 path.moveTo(8, 8);
241 path.quadTo(12, 12, 14, 4);
242 path.close();
243 path.moveTo(8, 8);
244 path.quadTo(9, 9, 10, 8);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000245 path.close();
246 testSimplify(path, true, out, bitmap);
247 drawAsciiPaths(path, out, true);
248}
caryclark@google.com78e17132012-04-17 11:40:34 +0000249</div>
caryclark@google.comfb173422012-04-10 18:28:55 +0000250
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000251<div id="testSimplifyQuadratic18">
252 SkPath path, out;
253 path.moveTo(8.0000000000000071, 8.0000000000000071);
254 path.quadTo(8.7289570079366854, 8.7289570079366889, 9.3914917259458743, 9.0593802763083691);
255 path.close();
256 path.moveTo(8.0000000000000142, 8.0000000000000142);
257 path.quadTo(8.1250000000000107, 8.1250000000000071, 8.2500000000000071, 8.2187500000000053);
258 path.close();
259 testSimplify(path, true, out, bitmap);
260 drawAsciiPaths(path, out, true);
261</div>
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000262
263<div id="testSimplifyQuadratic19">
264 SkPath path, simple;
265 path.moveTo(0,4);
266 path.lineTo(6,4);
267 path.lineTo(3,1);
268 path.close();
269 path.moveTo(2,3);
270 path.lineTo(3,2);
271 path.lineTo(4,3);
272 path.close();
273 testSimplifyx(path);
274</div>
275
276<div id="testSimplifyQuadratic20">
277 SkPath path, simple;
278 path.moveTo(0,4);
279 path.lineTo(6,4);
280 path.lineTo(3,1);
281 path.close();
282 path.moveTo(2,3);
283 path.lineTo(4,3);
284 path.lineTo(3,2);
285 path.close();
286 testSimplifyx(path);
287</div>
288
289<div id="testSimplifyQuadratic21">
290 SkPath path, simple;
291 path.moveTo(0,4);
292 path.lineTo(8,4);
293 path.lineTo(4,0);
294 path.close();
295 path.moveTo(2,2);
296 path.lineTo(3,3);
297 path.lineTo(4,2);
298 path.close();
299 testSimplifyx(path);
300</div>
301
302<div id="testLine6">
303 SkPath path, simple;
304 path.moveTo(0,0);
305 path.lineTo(4,0);
306 path.lineTo(2,2);
307 path.close();
308 path.moveTo(2,0);
309 path.lineTo(6,0);
310 path.lineTo(4,2);
311 path.close();
312 testSimplifyx(path);
313</div>
314
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000315<div id="testLine7">
316 SkPath path, simple;
317 path.moveTo(0,0);
318 path.lineTo(4,0);
319 path.lineTo(2,2);
320 path.close();
321 path.moveTo(6,0);
322 path.lineTo(2,0);
323 path.lineTo(4,2);
324 path.close();
325 testSimplifyx(path);
326</div>
327
caryclark@google.comcc905052012-07-25 20:59:42 +0000328<div id="testLine7b">
329 path.moveTo(0,0);
330 path.lineTo(4,0);
331 path.close();
332 path.moveTo(6,0);
333 path.lineTo(2,0);
334 path.lineTo(4,2);
335 path.close();
336</div>
337
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000338<div id="testLine9">
339 SkPath path, simple;
340 path.moveTo(0,4);
341 path.lineTo(4,4);
342 path.lineTo(2,2);
343 path.close();
344 path.moveTo(6,4);
345 path.lineTo(2,4);
346 path.lineTo(4,2);
347 path.close();
348 testSimplifyx(path);
349</div>
350
caryclark@google.come21cb182012-07-23 21:26:31 +0000351<div id="testLine12">
352 path.moveTo(0,4);
353 path.lineTo(6,4);
354 path.lineTo(3,1);
355 path.close();
356 path.moveTo(2,3);
357 path.lineTo(3,2);
358 path.lineTo(4,3);
359 path.close();
360</div>
361
362<div id="testLine13">
363 path.moveTo(6,4);
364 path.lineTo(0,4);
365 path.lineTo(3,1);
366 path.close();
367 path.moveTo(3,2);
368 path.lineTo(2,3);
369 path.lineTo(4,3);
370 path.close();
371</div>
372
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000373<div id="testLine17">
374 SkPath path, simple;
375 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
376 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
377 testSimplifyx(path);
378</div>
379
caryclark@google.com47580692012-07-23 12:14:49 +0000380<div id="testLine19">
381 SkPath path, simple;
382 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
383 path.addRect(12, 16, 21, 21, (SkPath::Direction) 0);
384 testSimplifyx(path);
385</div>
386
caryclark@google.comcc905052012-07-25 20:59:42 +0000387<div id="testLine22">
388 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
389 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
390</div>
391
caryclark@google.com47580692012-07-23 12:14:49 +0000392<div id="testLine24">
393 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
394 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
395</div>
396
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000397<div id="testLine28">
398 SkPath path, simple;
399 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
400 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
401 testSimplifyx(path);
402</div>
403
404<div id="testLine29">
405 SkPath path, simple;
406 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
407 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
408 testSimplifyx(path);
409</div>
410
411<div id="testLine30">
412 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
413 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
414 path.addRect(4, 4, 13, 13, (SkPath::Direction) 0);
415</div>
416
417<div id="testLine31">
418 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
419 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
420 path.addRect(0, 4, 9, 9, (SkPath::Direction) 0);
421</div>
422
423<div id="testLine32">
424 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
425 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
426 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
427</div>
428
caryclark@google.com9764cc62012-07-12 19:29:45 +0000429<div id="testLine33">
430 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
431 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
432 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
433</div>
434
caryclark@google.com210acaf2012-07-12 21:05:13 +0000435<div id="testLine34">
436 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
437 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
438 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
439</div>
440
441<div id="testLine35">
442 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
443 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
444 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
445</div>
446
caryclark@google.com0e08a192012-07-13 21:07:52 +0000447<div id="testLine36">
448 path.addRect(0, 10, 20, 20, (SkPath::Direction) 0);
449 path.addRect(6, 12, 18, 18, (SkPath::Direction) 0);
450 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
451</div>
452
caryclark@google.com47580692012-07-23 12:14:49 +0000453<div id="testLine37">
454 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
455 path.addRect(18, 24, 30, 30, (SkPath::Direction) 0);
456 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
457</div>
458
459<div id="testLine38">
460 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
461 path.addRect(6, 12, 18, 18, (SkPath::Direction) 0);
462 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
463</div>
464
465<div id="testLine39">
466 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
467 path.addRect(12, 6, 24, 24, (SkPath::Direction) 0);
468 path.addRect(12, 4, 21, 21, (SkPath::Direction) 0);
469</div>
470
471<div id="testLine40">
472 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
473 path.addRect(12, 18, 24, 24, (SkPath::Direction) 0);
474 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
475</div>
476
477<div id="testLine41">
478 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
479 path.addRect(18, 24, 30, 30, (SkPath::Direction) 0);
480 path.addRect(12, 0, 21, 21, (SkPath::Direction) 0);
481</div>
482
483<div id="testLine42">
484 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
485 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
486 path.addRect(8, 16, 17, 17, (SkPath::Direction) 0);
487</div>
488
489<div id="testLine43">
490 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
491 path.addRect(6, 24, 18, 18, (SkPath::Direction) 0);
492 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
493</div>
494
495<div id="testLine44">
496 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
497 path.addRect(18, 0, 30, 30, (SkPath::Direction) 0);
498 path.addRect(18, 32, 27, 36, (SkPath::Direction) 1);
499</div>
500
501<div id="testLine45">
502 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
503 path.addRect(18, 0, 30, 30, (SkPath::Direction) 0);
504 path.addRect(24, 32, 33, 36, (SkPath::Direction) 0);
505</div>
506
507<div id="testLine46">
508 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
509 path.addRect(24, 0, 36, 36, (SkPath::Direction) 0);
510 path.addRect(24, 32, 33, 36, (SkPath::Direction) 0);
511</div>
512
513<div id="testLine47">
514 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
515 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
516 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
517</div>
518
519<div id="testLine48">
520 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
521 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
522 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
523</div>
524
525<div id="testLine49">
526 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
527 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
528 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
529</div>
530
531<div id="testLine50">
532 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
533 path.addRect(24, 20, 36, 30, (SkPath::Direction) 0);
534</div>
535
536<div id="testLine51">
537 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
538 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
539 path.addRect(4, 12, 13, 13, (SkPath::Direction) 1);
540</div>
541
caryclark@google.come21cb182012-07-23 21:26:31 +0000542<div id="testLine52">
543 path.addRect(0, 30, 20, 20, (SkPath::Direction) 0);
544 path.addRect(6, 20, 18, 30, (SkPath::Direction) 0);
545 path.addRect(32, 0, 36, 41, (SkPath::Direction) 0);
546</div>
547
548<div id="testLine53">
549 path.addRect(10, 30, 30, 30, (SkPath::Direction) 0);
550 path.addRect(12, 20, 24, 30, (SkPath::Direction) 0);
551 path.addRect(12, 32, 21, 36, (SkPath::Direction) 1);
552</div>
553
554<div id="testLine54">
555 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
556 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
557 path.addRect(8, 4, 17, 17, (SkPath::Direction) 1);
558</div>
559
560<div id="testLine55">
561 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
562 path.addRect(6, 6, 18, 18, (SkPath::Direction) 0);
563 path.addRect(4, 4, 13, 13, (SkPath::Direction) 1);
564</div>
565
caryclark@google.com18063442012-07-25 12:05:18 +0000566<div id="testLine56">
567 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
568 path.addRect(18, 20, 30, 30, (SkPath::Direction) 0);
569 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
570</div>
571
572<div id="testLine57">
573 path.addRect(20, 0, 40, 40, (SkPath::Direction) 0);
574 path.addRect(20, 0, 30, 40, (SkPath::Direction) 0);
575 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
576</div>
577
caryclark@google.comcc905052012-07-25 20:59:42 +0000578<div id="testLine58">
579 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
580 path.addRect(0, 0, 12, 12, (SkPath::Direction) 1);
581 path.addRect(0, 12, 9, 9, (SkPath::Direction) 1);
582</div>
583
584<div id="testLine59">
585 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
586 path.addRect(6, 6, 18, 18, (SkPath::Direction) 1);
587 path.addRect(4, 4, 13, 13, (SkPath::Direction) 1);
588</div>
589
caryclark@google.com27c449a2012-07-27 18:26:38 +0000590<div id="testLine60">
591 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
592 path.addRect(6, 12, 18, 18, (SkPath::Direction) 1);
593 path.addRect(4, 12, 13, 13, (SkPath::Direction) 1);
594</div>
595
596<div id="testLine61">
597 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
598 path.addRect(12, 0, 24, 24, (SkPath::Direction) 1);
599 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
600</div>
601
602<div id="testLine62">
603 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
604 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
605 path.addRect(0, 12, 12, 12, (SkPath::Direction) 0);
606 path.addRect(4, 12, 13, 13, (SkPath::Direction) 1);
607</div>
608
609<div id="testLine63">
610 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
611 path.addRect(0, 10, 20, 20, (SkPath::Direction) 0);
612 path.addRect(0, 6, 12, 12, (SkPath::Direction) 1);
613 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
614</div>
615
616<div id="testLine64">
617 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
618 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
619 path.addRect(18, 6, 30, 30, (SkPath::Direction) 0);
620</div>
621
622<div id="testLine65">
623 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
624 path.addRect(10, 0, 30, 30, (SkPath::Direction) 0);
625 path.addRect(24, 0, 36, 36, (SkPath::Direction) 0);
626 path.addRect(32, 6, 36, 41, (SkPath::Direction) 1);
627</div>
628
629<div id="testLine66">
630 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
631 path.addRect(0, 30, 20, 20, (SkPath::Direction) 0);
632 path.addRect(12, 20, 24, 30, (SkPath::Direction) 0);
633</div>
634
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000635<div id="testLine67">
636 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
637 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
638 path.addRect(24, 20, 36, 30, (SkPath::Direction) 0);
639 path.addRect(32, 0, 36, 41, (SkPath::Direction) 0);
640</div>
641
642<div id="testLine68a">
643 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
644 path.addRect(2, 2, 6, 6, (SkPath::Direction) 0);
645 path.addRect(1, 2, 4, 2, (SkPath::Direction) 0);
646</div>
647
648<div id="testLine68b">
649 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
650 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
651 path.addRect(1, 2, 4, 2, (SkPath::Direction) 0);
652</div>
653
654<div id="testLine68c">
655 path.addRect(0, 0, 8, 8, (SkPath::Direction) 1);
656 path.addRect(2, 2, 6, 6, (SkPath::Direction) 0);
657 path.addRect(1, 2, 4, 2, (SkPath::Direction) 0);
658</div>
659
660<div id="testLine68d">
661 path.addRect(0, 0, 8, 8, (SkPath::Direction) 1);
662 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
663 path.addRect(1, 2, 4, 2, (SkPath::Direction) 0);
664</div>
665
666<div id="testLine68e">
667 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
668 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
669 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
670 path.addRect(1, 2, 2, 2, (SkPath::Direction) 0);
671</div>
672
673<div id="testLine68f">
674 path.addRect(0, 0, 8, 8, (SkPath::Direction) 0);
675 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
676 path.addRect(2, 2, 6, 6, (SkPath::Direction) 1);
677 path.addRect(1, 2, 2, 2, (SkPath::Direction) 0);
678</div>
679
680<div id="testLine69">
681 path.addRect(0, 20, 20, 20, (SkPath::Direction) 0);
682 path.addRect(0, 20, 12, 30, (SkPath::Direction) 0);
683 path.addRect(12, 32, 21, 36, (SkPath::Direction) 0);
684</div>
685
686<div id="testLine70">
687 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
688 path.addRect(0, 24, 12, 12, (SkPath::Direction) 0);
689 path.addRect(12, 32, 21, 36, (SkPath::Direction) 1);
690</div>
691
692<div id="testLine71">
693 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
694 path.addRect(12, 0, 24, 24, (SkPath::Direction) 0);
695 path.addRect(12, 32, 21, 36, (SkPath::Direction) 0);
696</div>
697
caryclark@google.com200c2112012-08-03 15:05:04 +0000698<div id="testLine72">
699 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
700 path.addRect(10, 40, 30, 30, (SkPath::Direction) 0);
701 path.addRect(6, 20, 18, 30, (SkPath::Direction) 0);
702</div>
703
704<div id="testLine73">
705 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
706 path.addRect(0, 40, 20, 20, (SkPath::Direction) 0);
707 path.addRect(0, 20, 12, 30, (SkPath::Direction) 0);
708 path.addRect(0, 0, 9, 9, (SkPath::Direction) 1);
709</div>
710
caryclark@google.com0c803d02012-08-06 11:15:47 +0000711<div id="testLine74">
712 path.addRect(20, 30, 40, 40, (SkPath::Direction) 0);
713 path.addRect(24, 20, 36, 30, (SkPath::Direction) 1);
714 path.addRect(32, 24, 36, 41, (SkPath::Direction) 1);
715</div>
716
caryclark@google.com2ddff932012-08-07 21:25:27 +0000717<div id="testLine75">
718 path.addRect(0, 0, 60, 60, (SkPath::Direction) 0);
719 path.addRect(10, 0, 30, 30, (SkPath::Direction) 1);
720 path.addRect(18, 0, 30, 30, (SkPath::Direction) 1);
721 path.addRect(12, 0, 21, 21, (SkPath::Direction) 1);
722</div>
723
724<div id="testLine76">
725 path.addRect(36, 0, 66, 60, (SkPath::Direction) 0);
726 path.addRect(10, 20, 40, 30, (SkPath::Direction) 0);
727 path.addRect(24, 20, 36, 30, (SkPath::Direction) 1);
728 path.addRect(32, 6, 36, 41, (SkPath::Direction) 1);
729</div>
730
731<div id="testLine77">
732 path.addRect(20, 0, 40, 40, (SkPath::Direction) 0);
733 path.addRect(24, 6, 36, 36, (SkPath::Direction) 1);
734 path.addRect(24, 32, 33, 36, (SkPath::Direction) 1);
735</div>
736
737<div id="testLine78">
738 path.addRect(0, 0, 30, 60, (SkPath::Direction) 0);
739 path.addRect(10, 20, 30, 30, (SkPath::Direction) 1);
740 path.addRect(18, 20, 30, 30, (SkPath::Direction) 1);
741 path.addRect(32, 0, 36, 41, (SkPath::Direction) 1);
742</div>
743
744<div id="testLine79">
745 path.addRect(0, 36, 60, 30, (SkPath::Direction) 0);
746 path.addRect(10, 30, 40, 30, (SkPath::Direction) 0);
747 path.addRect(0, 20, 12, 30, (SkPath::Direction) 1);
748 path.addRect(0, 32, 9, 36, (SkPath::Direction) 1);
749</div>
750
caryclark@google.com59823f72012-08-09 18:17:47 +0000751<div id="testDegenerate1">
752 path.moveTo(0, 0);
753 path.lineTo(0, 0);
754 path.lineTo(2, 0);
755 path.close();
756 path.moveTo(0, 0);
757 path.lineTo(1, 0);
758 path.lineTo(2, 0);
759 path.close();
760</div>
761
762<div id="testDegenerate2">
763 path.moveTo(0, 0);
764 path.lineTo(0, 0);
765 path.lineTo(0, 0);
766 path.close();
767 path.moveTo(0, 0);
768 path.lineTo(1, 0);
769 path.lineTo(0, 1);
770 path.close();
771</div>
772
773<div id="testDegenerate3">
774 path.moveTo(0, 0);
775 path.lineTo(2, 0);
776 path.lineTo(1, 0);
777 path.close();
778 path.moveTo(0, 0);
779 path.lineTo(0, 0);
780 path.lineTo(3, 0);
781 path.close();
782</div>
783
784<div id="testDegenerate4">
785 path.moveTo(0, 0);
786 path.lineTo(1, 0);
787 path.lineTo(1, 3);
788 path.close();
789 path.moveTo(1, 0);
790 path.lineTo(1, 1);
791 path.lineTo(1, 2);
792 path.close();
793</div>
794
795<div id="testNondegenerate1">
796 path.moveTo(0, 0);
797 path.lineTo(3, 0);
798 path.lineTo(1, 3);
799 path.close();
800 path.moveTo(1, 1);
801 path.lineTo(2, 1);
802 path.lineTo(1, 2);
803 path.close();
804</div>
805
806<div id="testNondegenerate2">
807 path.moveTo(1, 0);
808 path.lineTo(0, 1);
809 path.lineTo(1, 1);
810 path.close();
811 path.moveTo(0, 2);
812 path.lineTo(0, 3);
813 path.lineTo(1, 2);
814 path.close();
815</div>
816
817<div id="testNondegenerate3">
818 path.moveTo(0, 0);
819 path.lineTo(1, 0);
820 path.lineTo(2, 1);
821 path.close();
822 path.moveTo(0, 1);
823 path.lineTo(1, 1);
824 path.lineTo(0, 2);
825 path.close();
826</div>
827
828<div id="testNondegenerate4">
829 path.moveTo(1, 0);
830 path.lineTo(0, 1);
831 path.lineTo(1, 2);
832 path.close();
833 path.moveTo(0, 2);
834 path.lineTo(0, 3);
835 path.lineTo(1, 3);
836 path.close();
837</div>
838
839<div id="testQuadralateral5">
840 path.moveTo(0, 0);
841 path.lineTo(0, 0);
842 path.lineTo(1, 0);
843 path.lineTo(1, 1);
844 path.close();
845 path.moveTo(0, 0);
846 path.lineTo(2, 2);
847 path.lineTo(3, 2);
848 path.lineTo(3, 3);
849 path.close();
850</div>
851
852<div id="testQuadralateral6">
853 path.moveTo(0, 0);
854 path.lineTo(0, 0);
855 path.lineTo(1, 0);
856 path.lineTo(1, 1);
857 path.close();
858 path.moveTo(1, 0);
859 path.lineTo(2, 0);
860 path.lineTo(0, 2);
861 path.lineTo(2, 2);
862 path.close();
863</div>
864
caryclark@google.com752b60e2012-03-22 21:11:17 +0000865</div>
866
867<script type="text/javascript">
868
869var testDivs = [
caryclark@google.com59823f72012-08-09 18:17:47 +0000870 testQuadralateral6,
871 testQuadralateral5,
872 testNondegenerate4,
873 testNondegenerate3,
874 testNondegenerate2,
875 testNondegenerate1,
876 testDegenerate4,
877 testDegenerate3,
878 testDegenerate2,
879 testDegenerate1,
caryclark@google.com2ddff932012-08-07 21:25:27 +0000880 testLine79,
881 testLine78,
882 testLine77,
883 testLine76,
884 testLine75,
caryclark@google.com0c803d02012-08-06 11:15:47 +0000885 testLine74,
caryclark@google.com200c2112012-08-03 15:05:04 +0000886 testLine73,
887 testLine72,
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000888 testLine71,
889 testLine70,
890 testLine69,
891 testLine68f,
892 testLine68e,
893 testLine68d,
894 testLine68c,
895 testLine68b,
896 testLine68a,
897 testLine67,
caryclark@google.com27c449a2012-07-27 18:26:38 +0000898 testLine66,
899 testLine65,
900 testLine64,
901 testLine63,
902 testLine62,
903 testLine61,
904 testLine60,
caryclark@google.comcc905052012-07-25 20:59:42 +0000905 testLine59,
906 testLine58,
caryclark@google.com18063442012-07-25 12:05:18 +0000907 testLine57,
908 testLine56,
caryclark@google.come21cb182012-07-23 21:26:31 +0000909 testLine55,
910 testLine54,
911 testLine53,
912 testLine52,
caryclark@google.com47580692012-07-23 12:14:49 +0000913 testLine51,
914 testLine50,
915 testLine49,
916 testLine48,
917 testLine47,
918 testLine46,
919 testLine45,
920 testLine44,
921 testLine43,
922 testLine42,
923 testLine41,
924 testLine40,
925 testLine39,
926 testLine38,
927 testLine37,
caryclark@google.com0e08a192012-07-13 21:07:52 +0000928 testLine36,
caryclark@google.com210acaf2012-07-12 21:05:13 +0000929 testLine35,
930 testLine34,
caryclark@google.com9764cc62012-07-12 19:29:45 +0000931 testLine33,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000932 testLine32,
933 testLine31,
caryclark@google.com534aa5b2012-08-02 20:08:21 +0000934 testLine30,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000935 testLine29,
936 testLine28,
caryclark@google.com47580692012-07-23 12:14:49 +0000937 testLine24,
caryclark@google.comcc905052012-07-25 20:59:42 +0000938 testLine22,
caryclark@google.com47580692012-07-23 12:14:49 +0000939 testLine19,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000940 testLine17,
caryclark@google.come21cb182012-07-23 21:26:31 +0000941 testLine13,
942 testLine12,
caryclark@google.com47580692012-07-23 12:14:49 +0000943 testLine9,
caryclark@google.comcc905052012-07-25 20:59:42 +0000944 testLine7b,
caryclark@google.com47580692012-07-23 12:14:49 +0000945 testLine7,
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000946 testSimplifyQuadratic21,
947 testSimplifyQuadratic20,
948 testSimplifyQuadratic19,
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000949 testSimplifyQuadratic18,
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000950 testSimplifyQuadratic17,
951 testSimplifyQuadratic16,
952 testSimplifyQuadratic15,
953 testSimplifyQuadratic14,
954 testSimplifyQuadratic13,
955 testSimplifyQuadratic12,
956 testSimplifyQuadratic11,
957 testSimplifyQuadratic10,
958 testSimplifyQuadratic9,
959 testSimplifyQuadratic8,
960 testSimplifyQuadratic7,
961 testSimplifyQuadratic6,
962 testSimplifyQuadratic5,
963 testSimplifyQuadratic4,
964 testSimplifyQuadratic3,
965 testSimplifyQuadratic2,
966 testSimplifyQuadratic1,
caryclark@google.com752b60e2012-03-22 21:11:17 +0000967];
968
969var scale, columns, rows, xStart, yStart;
970
971var ticks = 0.1;
972var at_x = 13 + 0.5;
973var at_y = 13 + 0.5;
caryclark@google.com2ddff932012-08-07 21:25:27 +0000974var decimal_places = 0; // make this 3 to show more precision
caryclark@google.com752b60e2012-03-22 21:11:17 +0000975
976var tests = [];
caryclark@google.com0e08a192012-07-13 21:07:52 +0000977var testTitles = [];
caryclark@google.com752b60e2012-03-22 21:11:17 +0000978var testIndex = 0;
979
980var ctx;
981
caryclark@google.com0e08a192012-07-13 21:07:52 +0000982function parse(test, title) {
caryclark@google.com752b60e2012-03-22 21:11:17 +0000983 var contours = [];
984 var contourStrs = test.split("path.close();");
caryclark@google.comd88e0892012-03-27 13:23:51 +0000985 var pattern = /-?\d+\.*\d*/g;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000986 for (var c in contourStrs) {
caryclark@google.comfb173422012-04-10 18:28:55 +0000987 var contour = contourStrs[c];
988 var verbStrs = contour.split("path");
989 var verbs = [];
990 for (var v in verbStrs) {
991 var verbStr = verbStrs[v];
992 var points = verbStr.match(pattern);
993 var pts = [];
994 for (var wd in points) {
995 var num = parseFloat(points[wd]);
996 if (isNaN(num)) continue;
997 pts.push(num);
998 }
999 if (pts.length > 0)
1000 verbs.push(pts);
caryclark@google.com752b60e2012-03-22 21:11:17 +00001001 }
caryclark@google.comfa0588f2012-04-26 21:01:06 +00001002 if (verbs.length > 0) {
1003 var lastIndex = verbs.length - 1;
1004 var lastVerb = verbs[lastIndex];
1005 var lastLen = lastVerb.length;
1006 if (verbs[0][0] != lastVerb[lastLen - 2] && verbs[0][1] != lastVerb[lastLen - 1]) {
1007 var lastPts = [];
1008 lastPts.push(verbs[0][0]);
1009 lastPts.push(verbs[0][1]);
1010 verbs.push(lastPts);
1011 }
caryclark@google.comfb173422012-04-10 18:28:55 +00001012 contours.push(verbs);
caryclark@google.comfa0588f2012-04-26 21:01:06 +00001013 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00001014 }
caryclark@google.com0e08a192012-07-13 21:07:52 +00001015 if (contours.length > 0) {
caryclark@google.comfb173422012-04-10 18:28:55 +00001016 tests.push(contours);
caryclark@google.com0e08a192012-07-13 21:07:52 +00001017 testTitles.push(title);
1018 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00001019}
1020
caryclark@google.com0e08a192012-07-13 21:07:52 +00001021function parseRect(test, title) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00001022 var contours = [];
1023 var rectStrs = test.split("path.addRect");
1024 var pattern = /-?\d+\.*\d*/g;
1025 for (var r in rectStrs) {
1026 var rect = rectStrs[r];
1027 var sideStrs = rect.match(pattern);
1028 var sides = [];
1029 for (var wd in sideStrs) {
1030 var num = parseFloat(sideStrs[wd]);
1031 if (isNaN(num)) continue;
1032 sides.push(num);
1033 }
1034 if (sides.length == 0)
1035 continue;
1036 var verbs = [];
1037 var topLeft = [];
1038 topLeft.push(sides[0]); topLeft.push(sides[1]);
1039 var topRight = [];
1040 topRight.push(sides[2]); topRight.push(sides[1]);
1041 var botLeft = [];
1042 botLeft.push(sides[0]); botLeft.push(sides[3]);
1043 var botRight = [];
1044 botRight.push(sides[2]); botRight.push(sides[3]);
1045 verbs.push(topLeft);
1046 if (sides[4] == 0) {
1047 verbs.push(topRight);
1048 verbs.push(botRight);
1049 verbs.push(botLeft);
1050 } else {
1051 verbs.push(botLeft);
1052 verbs.push(botRight);
1053 verbs.push(topRight);
1054 }
1055 verbs.push(topLeft);
1056 contours.push(verbs);
1057 }
caryclark@google.com0e08a192012-07-13 21:07:52 +00001058 if (contours.length > 0) {
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00001059 tests.push(contours);
caryclark@google.com0e08a192012-07-13 21:07:52 +00001060 testTitles.push(title);
1061 }
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00001062}
1063
caryclark@google.com752b60e2012-03-22 21:11:17 +00001064function init(test) {
1065 var canvas = document.getElementById('canvas');
1066 if (!canvas.getContext) return;
caryclark@google.com534aa5b2012-08-02 20:08:21 +00001067 canvas.width = window.innerWidth - at_x;
1068 canvas.height = window.innerHeight - at_y;
caryclark@google.com752b60e2012-03-22 21:11:17 +00001069 ctx = canvas.getContext('2d');
1070 var xmin = Infinity;
1071 var xmax = -Infinity;
1072 var ymin = Infinity;
1073 var ymax = -Infinity;
caryclark@google.comfb173422012-04-10 18:28:55 +00001074 for (var contours in test) {
1075 var contour = test[contours];
1076 for (var verbs in contour) {
1077 var verb = contour[verbs];
1078 var last = verb.length;
caryclark@google.comb45a1b42012-05-18 20:50:33 +00001079 for (var idx = 0; idx < last; idx += 2) {
1080 xmin = Math.min(xmin, verb[idx]);
1081 xmax = Math.max(xmax, verb[idx]);
1082 ymin = Math.min(ymin, verb[idx + 1]);
1083 ymax = Math.max(ymax, verb[idx + 1]);
1084 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00001085 }
1086 }
1087 var subscale = 1;
1088 while ((xmax - xmin) * subscale < 0.1 && (ymax - ymin) * subscale < 0.1) {
1089 subscale *= 10;
1090 }
1091 columns = Math.ceil(xmax) - Math.floor(xmin) + 1;
1092 rows = Math.ceil(ymax) - Math.floor(ymin) + 1;
1093 xStart = Math.floor(xmin);
1094 yStart = Math.floor(ymin);
1095 var hscale = ctx.canvas.width / columns / ticks;
1096 var vscale = ctx.canvas.height / rows / ticks;
1097 scale = Math.floor(Math.min(hscale, vscale)) * subscale;
1098}
1099
1100function drawPoint(px, py, xoffset, yoffset, unit) {
caryclark@google.com2ddff932012-08-07 21:25:27 +00001101 var label = px.toFixed(decimal_places) + ", " + py.toFixed(decimal_places);
caryclark@google.com752b60e2012-03-22 21:11:17 +00001102 var _px = px * unit + xoffset;
1103 var _py = py * unit + yoffset;
1104 ctx.beginPath();
1105 ctx.arc(_px, _py, 3, 0, Math.PI*2, true);
1106 ctx.closePath();
1107 ctx.fill();
1108 ctx.fillText(label, _px + 5, _py);
1109}
1110
caryclark@google.com0e08a192012-07-13 21:07:52 +00001111function draw(test, title, _at_x, _at_y, scale) {
1112 ctx.fillStyle = "rgba(0,0,0, 0.1)";
1113 ctx.font = "normal 50px Arial";
1114 ctx.fillText(title, 50, 50);
1115 ctx.font = "normal 10px Arial";
1116
caryclark@google.com752b60e2012-03-22 21:11:17 +00001117 var unit = scale * ticks;
1118 ctx.lineWidth = 1;
1119 var i;
1120 for (i = 0; i <= rows * ticks; ++i) {
1121 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
1122 ctx.beginPath();
1123 ctx.moveTo(_at_x + 0, _at_y + i * scale);
1124 ctx.lineTo(_at_x + unit * columns, _at_y + i * scale);
1125 ctx.stroke();
1126 }
1127 for (i = 0; i <= columns * ticks; ++i) {
1128 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
1129 ctx.beginPath();
1130 ctx.moveTo(_at_x + i * scale, _at_y + 0);
1131 ctx.lineTo(_at_x + i * scale, _at_y + unit * rows);
1132 ctx.stroke();
1133 }
1134
1135 var xoffset = xStart * -unit + _at_x;
1136 var yoffset = yStart * -unit + _at_y;
1137
1138 ctx.fillStyle = "rgb(40,80,60)"
1139 for (i = 0; i <= columns; i += (1 / ticks))
1140 {
1141 num = (xoffset - _at_x) / -unit + i;
1142 ctx.fillText(num.toFixed(0), i * unit + _at_y - 5, 10);
1143 }
1144 for (i = 0; i <= rows; i += (1 / ticks))
1145 {
1146 num = (yoffset - _at_x) / -unit + i;
1147 ctx.fillText(num.toFixed(0), 0, i * unit + _at_y + 0);
1148 }
1149 ctx.strokeStyle = "red";
caryclark@google.comfb173422012-04-10 18:28:55 +00001150 var contours, verbs, pts;
caryclark@google.com8dcf1142012-07-02 20:27:02 +00001151 ctx.beginPath();
caryclark@google.comfb173422012-04-10 18:28:55 +00001152 for (contours in test) {
1153 var contour = test[contours];
1154 if (contours == 2) ctx.strokeStyle = "blue";
caryclark@google.comfb173422012-04-10 18:28:55 +00001155 var first = true;
1156 for (verbs in contour) {
1157 var verb = contour[verbs];
1158 switch (verb.length) {
1159 case 2:
1160 if (first) {
1161 ctx.moveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
1162 first = false;
1163 } else
1164 ctx.lineTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
1165 break;
1166 case 4:
1167 ctx.quadraticCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
1168 xoffset + verb[2] * unit, yoffset + verb[3] * unit);
1169 break;
1170 case 6:
1171 ctx.bezierCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
1172 xoffset + verb[2] * unit, yoffset + verb[3] * unit,
1173 xoffset + verb[4] * unit, yoffset + verb[5] * unit);
1174 break;
1175 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00001176 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +00001177 ctx.closePath();
caryclark@google.com752b60e2012-03-22 21:11:17 +00001178 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +00001179 ctx.stroke();
1180 ctx.fillStyle="rgba(192,192,255, 0.3)";
1181 ctx.fill();
caryclark@google.com752b60e2012-03-22 21:11:17 +00001182
1183 ctx.fillStyle="blue";
caryclark@google.comfb173422012-04-10 18:28:55 +00001184 for (contours in test) {
1185 var contour = test[contours];
1186 for (verbs in contour) {
1187 var verb = contour[verbs];
1188 for (i = 0; i < verb.length; i += 2) {
1189 x = verb[i];
1190 y = verb[i + 1];
1191 drawPoint(x, y, xoffset, yoffset, unit);
1192 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00001193 }
1194 }
1195}
1196
1197var mouseX = Infinity, mouseY;
1198
1199function calcXY() {
1200 var e = window.event;
1201 var tgt = e.target || e.srcElement;
1202 var left = tgt.offsetLeft;
1203 var top = tgt.offsetTop;
1204 var unit = scale * ticks;
1205 mouseX = (e.clientX - left - Math.ceil(at_x) + 1) / unit + xStart;
1206 mouseY = (e.clientY - top - Math.ceil(at_y)) / unit + yStart;
1207}
1208
1209function handleMouseOver() {
1210 calcXY();
1211 var num = mouseX.toFixed(3) + ", " + mouseY.toFixed(3);
1212 ctx.beginPath();
1213 ctx.rect(300,100,200,10);
1214 ctx.fillStyle="white";
1215 ctx.fill();
1216 ctx.fillStyle="black";
1217 ctx.fillText(num, 300, 108);
1218}
1219
1220function handleMouseClick() {
1221 calcXY();
1222// drawInset();
1223}
1224
1225function drawTop() {
1226 init(tests[testIndex]);
1227 redraw();
1228}
1229
1230function redraw() {
1231 ctx.beginPath();
1232 ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
1233 ctx.fillStyle="white";
1234 ctx.fill();
caryclark@google.com0e08a192012-07-13 21:07:52 +00001235 draw(tests[testIndex], testTitles[testIndex], at_x, at_y, scale);
caryclark@google.com752b60e2012-03-22 21:11:17 +00001236// if (insetScale != scale && mouseX != Infinity)
1237// drawInset();
1238}
1239
1240function doKeyPress(evt) {
1241 var char = String.fromCharCode(evt.charCode);
1242 switch (char) {
1243 case 'N':
caryclark@google.com534aa5b2012-08-02 20:08:21 +00001244 testIndex += 9;
caryclark@google.com752b60e2012-03-22 21:11:17 +00001245 case 'n':
1246 if (++testIndex >= tests.length)
1247 testIndex = 0;
caryclark@google.comfa0588f2012-04-26 21:01:06 +00001248 mouseX = Infinity;
1249 drawTop();
1250 break;
1251 case 'P':
caryclark@google.com534aa5b2012-08-02 20:08:21 +00001252 testIndex -= 9;
caryclark@google.comfa0588f2012-04-26 21:01:06 +00001253 case 'p':
1254 if (--testIndex < 0)
1255 testIndex = tests.length - 1;
caryclark@google.com752b60e2012-03-22 21:11:17 +00001256 mouseX = Infinity;
1257 drawTop();
1258 break;
1259 case 'T':
1260 case 't':
caryclark@google.com752b60e2012-03-22 21:11:17 +00001261 break;
1262 case '-':
caryclark@google.com534aa5b2012-08-02 20:08:21 +00001263 drawTop();
caryclark@google.com752b60e2012-03-22 21:11:17 +00001264 break;
1265 case '=':
1266 case '+':
caryclark@google.com534aa5b2012-08-02 20:08:21 +00001267 drawTop();
caryclark@google.com752b60e2012-03-22 21:11:17 +00001268 break;
1269 }
1270}
1271
caryclark@google.com534aa5b2012-08-02 20:08:21 +00001272function doResize(evt) {
1273 drawTop();
1274}
1275
caryclark@google.com752b60e2012-03-22 21:11:17 +00001276function start() {
1277 for (i = 0; i < testDivs.length; ++i) {
caryclark@google.com0e08a192012-07-13 21:07:52 +00001278 var title = testDivs[i].id.toString();
caryclark@google.com752b60e2012-03-22 21:11:17 +00001279 var str = testDivs[i].firstChild.data;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00001280 if (str.split("addRect").length > 1) {
caryclark@google.com0e08a192012-07-13 21:07:52 +00001281 parseRect(str, title);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00001282 } else {
caryclark@google.com0e08a192012-07-13 21:07:52 +00001283 parse(str, title);
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00001284 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00001285 }
1286 drawTop();
1287 window.addEventListener('keypress', doKeyPress, true);
caryclark@google.com534aa5b2012-08-02 20:08:21 +00001288 window.onresize = function() {
1289 drawTop();
1290 }
caryclark@google.com752b60e2012-03-22 21:11:17 +00001291}
1292
1293</script>
1294</head>
1295
1296<body onLoad="start();">
caryclark@google.comfa4a6e92012-07-11 17:52:32 +00001297<canvas id="canvas" width="750" height="500"
caryclark@google.com752b60e2012-03-22 21:11:17 +00001298 onmousemove="handleMouseOver()"
1299 onclick="handleMouseClick()"
1300 ></canvas >
1301</body>
1302</html>