blob: 04005617af7287dc98a96258581601b605914ef4 [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.com8dcf1142012-07-02 20:27:02 +0000341<div id="testLine17">
342 SkPath path, simple;
343 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
344 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
345 testSimplifyx(path);
346</div>
347
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000348<div id="testLine28">
349 SkPath path, simple;
350 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
351 path.addRect(0, 0, 9, 9, (SkPath::Direction) 0);
352 testSimplifyx(path);
353</div>
354
355<div id="testLine29">
356 SkPath path, simple;
357 path.addRect(0, 18, 12, 12, (SkPath::Direction) 0);
358 path.addRect(12, 12, 21, 21, (SkPath::Direction) 0);
359 testSimplifyx(path);
360</div>
361
362<div id="testLine30">
363 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
364 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
365 path.addRect(4, 4, 13, 13, (SkPath::Direction) 0);
366</div>
367
368<div id="testLine31">
369 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
370 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
371 path.addRect(0, 4, 9, 9, (SkPath::Direction) 0);
372</div>
373
374<div id="testLine32">
375 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
376 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
377 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
378</div>
379
caryclark@google.com9764cc62012-07-12 19:29:45 +0000380<div id="testLine33">
381 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
382 path.addRect(0, 0, 12, 12, (SkPath::Direction) 0);
383 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
384</div>
385
caryclark@google.com210acaf2012-07-12 21:05:13 +0000386<div id="testLine34">
387 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
388 path.addRect(0, 6, 12, 12, (SkPath::Direction) 0);
389 path.addRect(4, 12, 13, 13, (SkPath::Direction) 0);
390</div>
391
392<div id="testLine35">
393 path.addRect(0, 0, 20, 20, (SkPath::Direction) 0);
394 path.addRect(6, 0, 18, 18, (SkPath::Direction) 0);
395 path.addRect(4, 16, 13, 13, (SkPath::Direction) 0);
396</div>
397
caryclark@google.com752b60e2012-03-22 21:11:17 +0000398</div>
399
400<script type="text/javascript">
401
402var testDivs = [
caryclark@google.com210acaf2012-07-12 21:05:13 +0000403 testLine35,
404 testLine34,
caryclark@google.com9764cc62012-07-12 19:29:45 +0000405 testLine33,
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000406 testLine9,
407 testLine7,
408 testLine30,
409 testLine32,
410 testLine31,
411 testLine29,
412 testLine28,
413 testLine17,
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000414 testSimplifyQuadratic21,
415 testSimplifyQuadratic20,
416 testSimplifyQuadratic19,
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000417 testSimplifyQuadratic18,
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000418 testSimplifyQuadratic17,
419 testSimplifyQuadratic16,
420 testSimplifyQuadratic15,
421 testSimplifyQuadratic14,
422 testSimplifyQuadratic13,
423 testSimplifyQuadratic12,
424 testSimplifyQuadratic11,
425 testSimplifyQuadratic10,
426 testSimplifyQuadratic9,
427 testSimplifyQuadratic8,
428 testSimplifyQuadratic7,
429 testSimplifyQuadratic6,
430 testSimplifyQuadratic5,
431 testSimplifyQuadratic4,
432 testSimplifyQuadratic3,
433 testSimplifyQuadratic2,
434 testSimplifyQuadratic1,
caryclark@google.com752b60e2012-03-22 21:11:17 +0000435];
436
437var scale, columns, rows, xStart, yStart;
438
439var ticks = 0.1;
440var at_x = 13 + 0.5;
441var at_y = 13 + 0.5;
442
443var tests = [];
444var testIndex = 0;
445
446var ctx;
447
448function parse(test) {
449 var contours = [];
450 var contourStrs = test.split("path.close();");
caryclark@google.comd88e0892012-03-27 13:23:51 +0000451 var pattern = /-?\d+\.*\d*/g;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000452 for (var c in contourStrs) {
caryclark@google.comfb173422012-04-10 18:28:55 +0000453 var contour = contourStrs[c];
454 var verbStrs = contour.split("path");
455 var verbs = [];
456 for (var v in verbStrs) {
457 var verbStr = verbStrs[v];
458 var points = verbStr.match(pattern);
459 var pts = [];
460 for (var wd in points) {
461 var num = parseFloat(points[wd]);
462 if (isNaN(num)) continue;
463 pts.push(num);
464 }
465 if (pts.length > 0)
466 verbs.push(pts);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000467 }
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000468 if (verbs.length > 0) {
469 var lastIndex = verbs.length - 1;
470 var lastVerb = verbs[lastIndex];
471 var lastLen = lastVerb.length;
472 if (verbs[0][0] != lastVerb[lastLen - 2] && verbs[0][1] != lastVerb[lastLen - 1]) {
473 var lastPts = [];
474 lastPts.push(verbs[0][0]);
475 lastPts.push(verbs[0][1]);
476 verbs.push(lastPts);
477 }
caryclark@google.comfb173422012-04-10 18:28:55 +0000478 contours.push(verbs);
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000479 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000480 }
caryclark@google.comfb173422012-04-10 18:28:55 +0000481 if (contours.length > 0)
482 tests.push(contours);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000483}
484
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000485function parseRect(test) {
486 var contours = [];
487 var rectStrs = test.split("path.addRect");
488 var pattern = /-?\d+\.*\d*/g;
489 for (var r in rectStrs) {
490 var rect = rectStrs[r];
491 var sideStrs = rect.match(pattern);
492 var sides = [];
493 for (var wd in sideStrs) {
494 var num = parseFloat(sideStrs[wd]);
495 if (isNaN(num)) continue;
496 sides.push(num);
497 }
498 if (sides.length == 0)
499 continue;
500 var verbs = [];
501 var topLeft = [];
502 topLeft.push(sides[0]); topLeft.push(sides[1]);
503 var topRight = [];
504 topRight.push(sides[2]); topRight.push(sides[1]);
505 var botLeft = [];
506 botLeft.push(sides[0]); botLeft.push(sides[3]);
507 var botRight = [];
508 botRight.push(sides[2]); botRight.push(sides[3]);
509 verbs.push(topLeft);
510 if (sides[4] == 0) {
511 verbs.push(topRight);
512 verbs.push(botRight);
513 verbs.push(botLeft);
514 } else {
515 verbs.push(botLeft);
516 verbs.push(botRight);
517 verbs.push(topRight);
518 }
519 verbs.push(topLeft);
520 contours.push(verbs);
521 }
522 if (contours.length > 0)
523 tests.push(contours);
524}
525
caryclark@google.com752b60e2012-03-22 21:11:17 +0000526function init(test) {
527 var canvas = document.getElementById('canvas');
528 if (!canvas.getContext) return;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000529 canvas.width = document.width;
530 canvas.height = document.height;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000531 ctx = canvas.getContext('2d');
532 var xmin = Infinity;
533 var xmax = -Infinity;
534 var ymin = Infinity;
535 var ymax = -Infinity;
caryclark@google.comfb173422012-04-10 18:28:55 +0000536 for (var contours in test) {
537 var contour = test[contours];
538 for (var verbs in contour) {
539 var verb = contour[verbs];
540 var last = verb.length;
caryclark@google.comb45a1b42012-05-18 20:50:33 +0000541 for (var idx = 0; idx < last; idx += 2) {
542 xmin = Math.min(xmin, verb[idx]);
543 xmax = Math.max(xmax, verb[idx]);
544 ymin = Math.min(ymin, verb[idx + 1]);
545 ymax = Math.max(ymax, verb[idx + 1]);
546 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000547 }
548 }
549 var subscale = 1;
550 while ((xmax - xmin) * subscale < 0.1 && (ymax - ymin) * subscale < 0.1) {
551 subscale *= 10;
552 }
553 columns = Math.ceil(xmax) - Math.floor(xmin) + 1;
554 rows = Math.ceil(ymax) - Math.floor(ymin) + 1;
555 xStart = Math.floor(xmin);
556 yStart = Math.floor(ymin);
557 var hscale = ctx.canvas.width / columns / ticks;
558 var vscale = ctx.canvas.height / rows / ticks;
559 scale = Math.floor(Math.min(hscale, vscale)) * subscale;
560}
561
562function drawPoint(px, py, xoffset, yoffset, unit) {
caryclark@google.comd88e0892012-03-27 13:23:51 +0000563 var label = px.toFixed(3) + ", " + py.toFixed(3);
caryclark@google.com752b60e2012-03-22 21:11:17 +0000564 var _px = px * unit + xoffset;
565 var _py = py * unit + yoffset;
566 ctx.beginPath();
567 ctx.arc(_px, _py, 3, 0, Math.PI*2, true);
568 ctx.closePath();
569 ctx.fill();
570 ctx.fillText(label, _px + 5, _py);
571}
572
573function draw(test, _at_x, _at_y, scale) {
574 var unit = scale * ticks;
575 ctx.lineWidth = 1;
576 var i;
577 for (i = 0; i <= rows * ticks; ++i) {
578 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
579 ctx.beginPath();
580 ctx.moveTo(_at_x + 0, _at_y + i * scale);
581 ctx.lineTo(_at_x + unit * columns, _at_y + i * scale);
582 ctx.stroke();
583 }
584 for (i = 0; i <= columns * ticks; ++i) {
585 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black";
586 ctx.beginPath();
587 ctx.moveTo(_at_x + i * scale, _at_y + 0);
588 ctx.lineTo(_at_x + i * scale, _at_y + unit * rows);
589 ctx.stroke();
590 }
591
592 var xoffset = xStart * -unit + _at_x;
593 var yoffset = yStart * -unit + _at_y;
594
595 ctx.fillStyle = "rgb(40,80,60)"
596 for (i = 0; i <= columns; i += (1 / ticks))
597 {
598 num = (xoffset - _at_x) / -unit + i;
599 ctx.fillText(num.toFixed(0), i * unit + _at_y - 5, 10);
600 }
601 for (i = 0; i <= rows; i += (1 / ticks))
602 {
603 num = (yoffset - _at_x) / -unit + i;
604 ctx.fillText(num.toFixed(0), 0, i * unit + _at_y + 0);
605 }
606 ctx.strokeStyle = "red";
caryclark@google.comfb173422012-04-10 18:28:55 +0000607 var contours, verbs, pts;
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000608 ctx.beginPath();
caryclark@google.comfb173422012-04-10 18:28:55 +0000609 for (contours in test) {
610 var contour = test[contours];
611 if (contours == 2) ctx.strokeStyle = "blue";
caryclark@google.comfb173422012-04-10 18:28:55 +0000612 var first = true;
613 for (verbs in contour) {
614 var verb = contour[verbs];
615 switch (verb.length) {
616 case 2:
617 if (first) {
618 ctx.moveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
619 first = false;
620 } else
621 ctx.lineTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit);
622 break;
623 case 4:
624 ctx.quadraticCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
625 xoffset + verb[2] * unit, yoffset + verb[3] * unit);
626 break;
627 case 6:
628 ctx.bezierCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit,
629 xoffset + verb[2] * unit, yoffset + verb[3] * unit,
630 xoffset + verb[4] * unit, yoffset + verb[5] * unit);
631 break;
632 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000633 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000634 ctx.closePath();
caryclark@google.com752b60e2012-03-22 21:11:17 +0000635 }
caryclark@google.com8dcf1142012-07-02 20:27:02 +0000636 ctx.stroke();
637 ctx.fillStyle="rgba(192,192,255, 0.3)";
638 ctx.fill();
caryclark@google.com752b60e2012-03-22 21:11:17 +0000639
640 ctx.fillStyle="blue";
caryclark@google.comfb173422012-04-10 18:28:55 +0000641 for (contours in test) {
642 var contour = test[contours];
643 for (verbs in contour) {
644 var verb = contour[verbs];
645 for (i = 0; i < verb.length; i += 2) {
646 x = verb[i];
647 y = verb[i + 1];
648 drawPoint(x, y, xoffset, yoffset, unit);
649 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000650 }
651 }
652}
653
654var mouseX = Infinity, mouseY;
655
656function calcXY() {
657 var e = window.event;
658 var tgt = e.target || e.srcElement;
659 var left = tgt.offsetLeft;
660 var top = tgt.offsetTop;
661 var unit = scale * ticks;
662 mouseX = (e.clientX - left - Math.ceil(at_x) + 1) / unit + xStart;
663 mouseY = (e.clientY - top - Math.ceil(at_y)) / unit + yStart;
664}
665
666function handleMouseOver() {
667 calcXY();
668 var num = mouseX.toFixed(3) + ", " + mouseY.toFixed(3);
669 ctx.beginPath();
670 ctx.rect(300,100,200,10);
671 ctx.fillStyle="white";
672 ctx.fill();
673 ctx.fillStyle="black";
674 ctx.fillText(num, 300, 108);
675}
676
677function handleMouseClick() {
678 calcXY();
679// drawInset();
680}
681
682function drawTop() {
683 init(tests[testIndex]);
684 redraw();
685}
686
687function redraw() {
688 ctx.beginPath();
689 ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
690 ctx.fillStyle="white";
691 ctx.fill();
692 draw(tests[testIndex], at_x, at_y, scale);
693// if (insetScale != scale && mouseX != Infinity)
694// drawInset();
695}
696
697function doKeyPress(evt) {
698 var char = String.fromCharCode(evt.charCode);
699 switch (char) {
700 case 'N':
701 case 'n':
702 if (++testIndex >= tests.length)
703 testIndex = 0;
caryclark@google.comfa0588f2012-04-26 21:01:06 +0000704 mouseX = Infinity;
705 drawTop();
706 break;
707 case 'P':
708 case 'p':
709 if (--testIndex < 0)
710 testIndex = tests.length - 1;
caryclark@google.com752b60e2012-03-22 21:11:17 +0000711 mouseX = Infinity;
712 drawTop();
713 break;
714 case 'T':
715 case 't':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000716 break;
717 case '-':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000718 redraw();
719 break;
720 case '=':
721 case '+':
caryclark@google.com752b60e2012-03-22 21:11:17 +0000722 redraw();
723 break;
724 }
725}
726
727function start() {
728 for (i = 0; i < testDivs.length; ++i) {
729 var str = testDivs[i].firstChild.data;
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000730 if (str.split("addRect").length > 1) {
731 parseRect(str);
732 } else {
733 parse(str);
734 }
caryclark@google.com752b60e2012-03-22 21:11:17 +0000735 }
736 drawTop();
737 window.addEventListener('keypress', doKeyPress, true);
738}
739
740</script>
741</head>
742
743<body onLoad="start();">
caryclark@google.comfa4a6e92012-07-11 17:52:32 +0000744<canvas id="canvas" width="750" height="500"
caryclark@google.com752b60e2012-03-22 21:11:17 +0000745 onmousemove="handleMouseOver()"
746 onclick="handleMouseClick()"
747 ></canvas >
748</body>
749</html>