op.htm revision 0c803d048c826fadfeed51207488867e17e0cc10
1<html> 2<head> 3<div style="height:0"> 4 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} 15</div> 16 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} 27</div> 28 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} 39</div> 40 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} 52</div> 53 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} 67</div> 68 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} 82</div> 83 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; 131 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); 138 path.close(); 139 testSimplify(path, true, out, bitmap); 140 drawAsciiPaths(path, out, true); 141} 142</div> 143 144<div id="testSimplifyQuadratic11"> 145 SkPath path, out; 146 path.moveTo(0, 0); 147 path.quadTo(0, 0, 0, 0); 148 path.lineTo(0, 2); 149 path.close(); 150 path.moveTo(0, 0); 151 path.lineTo(2, 1); 152 path.quadTo(2, 2, 3, 3); 153 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); 163 path.lineTo(0, 0); 164 path.close(); 165 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} 172</div> 173 174<div id="testSimplifyQuadratic13"> 175 SkPath path, out; 176path.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(); 185 testSimplify(path, true, out, bitmap); 186 drawAsciiPaths(path, out, true); 187} 188</div> 189 190<div id="testSimplifyQuadratic14"> 191 SkPath path, out; 192 path.moveTo(0, 0); 193 path.quadTo(0, 0, 0, 0); 194 path.lineTo(1, 1); 195 path.close(); 196 path.moveTo(0, 0); 197 path.lineTo(0, 0); 198 path.quadTo(0, 1, 2, 1); 199 path.close(); 200 testSimplify(path, true, out, bitmap); 201 drawAsciiPaths(path, out, true); 202} 203</div> 204 205<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; 237 path.moveTo(8, 8); 238 path.quadTo(10, 10, 8, -10); 239 path.close(); 240 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); 245 path.close(); 246 testSimplify(path, true, out, bitmap); 247 drawAsciiPaths(path, out, true); 248} 249</div> 250 251<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> 262 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 315<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="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 338<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 351<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 373<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 380<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 387<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 392<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 397<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 429<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 435<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 447<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 453<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 542<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 566<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 578<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 590<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 635<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 698<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 711<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 717</div> 718 719<script type="text/javascript"> 720 721var testDivs = [ 722 testLine74, 723 testLine73, 724 testLine72, 725 testLine71, 726 testLine70, 727 testLine69, 728 testLine68f, 729 testLine68e, 730 testLine68d, 731 testLine68c, 732 testLine68b, 733 testLine68a, 734 testLine67, 735 testLine66, 736 testLine65, 737 testLine64, 738 testLine63, 739 testLine62, 740 testLine61, 741 testLine60, 742 testLine59, 743 testLine58, 744 testLine57, 745 testLine56, 746 testLine55, 747 testLine54, 748 testLine53, 749 testLine52, 750 testLine51, 751 testLine50, 752 testLine49, 753 testLine48, 754 testLine47, 755 testLine46, 756 testLine45, 757 testLine44, 758 testLine43, 759 testLine42, 760 testLine41, 761 testLine40, 762 testLine39, 763 testLine38, 764 testLine37, 765 testLine36, 766 testLine35, 767 testLine34, 768 testLine33, 769 testLine32, 770 testLine31, 771 testLine30, 772 testLine29, 773 testLine28, 774 testLine24, 775 testLine22, 776 testLine19, 777 testLine17, 778 testLine13, 779 testLine12, 780 testLine9, 781 testLine7b, 782 testLine7, 783 testSimplifyQuadratic21, 784 testSimplifyQuadratic20, 785 testSimplifyQuadratic19, 786 testSimplifyQuadratic18, 787 testSimplifyQuadratic17, 788 testSimplifyQuadratic16, 789 testSimplifyQuadratic15, 790 testSimplifyQuadratic14, 791 testSimplifyQuadratic13, 792 testSimplifyQuadratic12, 793 testSimplifyQuadratic11, 794 testSimplifyQuadratic10, 795 testSimplifyQuadratic9, 796 testSimplifyQuadratic8, 797 testSimplifyQuadratic7, 798 testSimplifyQuadratic6, 799 testSimplifyQuadratic5, 800 testSimplifyQuadratic4, 801 testSimplifyQuadratic3, 802 testSimplifyQuadratic2, 803 testSimplifyQuadratic1, 804]; 805 806var scale, columns, rows, xStart, yStart; 807 808var ticks = 0.1; 809var at_x = 13 + 0.5; 810var at_y = 13 + 0.5; 811 812var tests = []; 813var testTitles = []; 814var testIndex = 0; 815 816var ctx; 817 818function parse(test, title) { 819 var contours = []; 820 var contourStrs = test.split("path.close();"); 821 var pattern = /-?\d+\.*\d*/g; 822 for (var c in contourStrs) { 823 var contour = contourStrs[c]; 824 var verbStrs = contour.split("path"); 825 var verbs = []; 826 for (var v in verbStrs) { 827 var verbStr = verbStrs[v]; 828 var points = verbStr.match(pattern); 829 var pts = []; 830 for (var wd in points) { 831 var num = parseFloat(points[wd]); 832 if (isNaN(num)) continue; 833 pts.push(num); 834 } 835 if (pts.length > 0) 836 verbs.push(pts); 837 } 838 if (verbs.length > 0) { 839 var lastIndex = verbs.length - 1; 840 var lastVerb = verbs[lastIndex]; 841 var lastLen = lastVerb.length; 842 if (verbs[0][0] != lastVerb[lastLen - 2] && verbs[0][1] != lastVerb[lastLen - 1]) { 843 var lastPts = []; 844 lastPts.push(verbs[0][0]); 845 lastPts.push(verbs[0][1]); 846 verbs.push(lastPts); 847 } 848 contours.push(verbs); 849 } 850 } 851 if (contours.length > 0) { 852 tests.push(contours); 853 testTitles.push(title); 854 } 855} 856 857function parseRect(test, title) { 858 var contours = []; 859 var rectStrs = test.split("path.addRect"); 860 var pattern = /-?\d+\.*\d*/g; 861 for (var r in rectStrs) { 862 var rect = rectStrs[r]; 863 var sideStrs = rect.match(pattern); 864 var sides = []; 865 for (var wd in sideStrs) { 866 var num = parseFloat(sideStrs[wd]); 867 if (isNaN(num)) continue; 868 sides.push(num); 869 } 870 if (sides.length == 0) 871 continue; 872 var verbs = []; 873 var topLeft = []; 874 topLeft.push(sides[0]); topLeft.push(sides[1]); 875 var topRight = []; 876 topRight.push(sides[2]); topRight.push(sides[1]); 877 var botLeft = []; 878 botLeft.push(sides[0]); botLeft.push(sides[3]); 879 var botRight = []; 880 botRight.push(sides[2]); botRight.push(sides[3]); 881 verbs.push(topLeft); 882 if (sides[4] == 0) { 883 verbs.push(topRight); 884 verbs.push(botRight); 885 verbs.push(botLeft); 886 } else { 887 verbs.push(botLeft); 888 verbs.push(botRight); 889 verbs.push(topRight); 890 } 891 verbs.push(topLeft); 892 contours.push(verbs); 893 } 894 if (contours.length > 0) { 895 tests.push(contours); 896 testTitles.push(title); 897 } 898} 899 900function init(test) { 901 var canvas = document.getElementById('canvas'); 902 if (!canvas.getContext) return; 903 canvas.width = window.innerWidth - at_x; 904 canvas.height = window.innerHeight - at_y; 905 ctx = canvas.getContext('2d'); 906 var xmin = Infinity; 907 var xmax = -Infinity; 908 var ymin = Infinity; 909 var ymax = -Infinity; 910 for (var contours in test) { 911 var contour = test[contours]; 912 for (var verbs in contour) { 913 var verb = contour[verbs]; 914 var last = verb.length; 915 for (var idx = 0; idx < last; idx += 2) { 916 xmin = Math.min(xmin, verb[idx]); 917 xmax = Math.max(xmax, verb[idx]); 918 ymin = Math.min(ymin, verb[idx + 1]); 919 ymax = Math.max(ymax, verb[idx + 1]); 920 } 921 } 922 } 923 var subscale = 1; 924 while ((xmax - xmin) * subscale < 0.1 && (ymax - ymin) * subscale < 0.1) { 925 subscale *= 10; 926 } 927 columns = Math.ceil(xmax) - Math.floor(xmin) + 1; 928 rows = Math.ceil(ymax) - Math.floor(ymin) + 1; 929 xStart = Math.floor(xmin); 930 yStart = Math.floor(ymin); 931 var hscale = ctx.canvas.width / columns / ticks; 932 var vscale = ctx.canvas.height / rows / ticks; 933 scale = Math.floor(Math.min(hscale, vscale)) * subscale; 934} 935 936function drawPoint(px, py, xoffset, yoffset, unit) { 937 var label = px.toFixed(3) + ", " + py.toFixed(3); 938 var _px = px * unit + xoffset; 939 var _py = py * unit + yoffset; 940 ctx.beginPath(); 941 ctx.arc(_px, _py, 3, 0, Math.PI*2, true); 942 ctx.closePath(); 943 ctx.fill(); 944 ctx.fillText(label, _px + 5, _py); 945} 946 947function draw(test, title, _at_x, _at_y, scale) { 948 ctx.fillStyle = "rgba(0,0,0, 0.1)"; 949 ctx.font = "normal 50px Arial"; 950 ctx.fillText(title, 50, 50); 951 ctx.font = "normal 10px Arial"; 952 953 var unit = scale * ticks; 954 ctx.lineWidth = 1; 955 var i; 956 for (i = 0; i <= rows * ticks; ++i) { 957 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black"; 958 ctx.beginPath(); 959 ctx.moveTo(_at_x + 0, _at_y + i * scale); 960 ctx.lineTo(_at_x + unit * columns, _at_y + i * scale); 961 ctx.stroke(); 962 } 963 for (i = 0; i <= columns * ticks; ++i) { 964 ctx.strokeStyle = (i % ticks) != 0 ? "rgb(160,160,160)" : "black"; 965 ctx.beginPath(); 966 ctx.moveTo(_at_x + i * scale, _at_y + 0); 967 ctx.lineTo(_at_x + i * scale, _at_y + unit * rows); 968 ctx.stroke(); 969 } 970 971 var xoffset = xStart * -unit + _at_x; 972 var yoffset = yStart * -unit + _at_y; 973 974 ctx.fillStyle = "rgb(40,80,60)" 975 for (i = 0; i <= columns; i += (1 / ticks)) 976 { 977 num = (xoffset - _at_x) / -unit + i; 978 ctx.fillText(num.toFixed(0), i * unit + _at_y - 5, 10); 979 } 980 for (i = 0; i <= rows; i += (1 / ticks)) 981 { 982 num = (yoffset - _at_x) / -unit + i; 983 ctx.fillText(num.toFixed(0), 0, i * unit + _at_y + 0); 984 } 985 ctx.strokeStyle = "red"; 986 var contours, verbs, pts; 987 ctx.beginPath(); 988 for (contours in test) { 989 var contour = test[contours]; 990 if (contours == 2) ctx.strokeStyle = "blue"; 991 var first = true; 992 for (verbs in contour) { 993 var verb = contour[verbs]; 994 switch (verb.length) { 995 case 2: 996 if (first) { 997 ctx.moveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit); 998 first = false; 999 } else 1000 ctx.lineTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit); 1001 break; 1002 case 4: 1003 ctx.quadraticCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit, 1004 xoffset + verb[2] * unit, yoffset + verb[3] * unit); 1005 break; 1006 case 6: 1007 ctx.bezierCurveTo(xoffset + verb[0] * unit, yoffset + verb[1] * unit, 1008 xoffset + verb[2] * unit, yoffset + verb[3] * unit, 1009 xoffset + verb[4] * unit, yoffset + verb[5] * unit); 1010 break; 1011 } 1012 } 1013 ctx.closePath(); 1014 } 1015 ctx.stroke(); 1016 ctx.fillStyle="rgba(192,192,255, 0.3)"; 1017 ctx.fill(); 1018 1019 ctx.fillStyle="blue"; 1020 for (contours in test) { 1021 var contour = test[contours]; 1022 for (verbs in contour) { 1023 var verb = contour[verbs]; 1024 for (i = 0; i < verb.length; i += 2) { 1025 x = verb[i]; 1026 y = verb[i + 1]; 1027 drawPoint(x, y, xoffset, yoffset, unit); 1028 } 1029 } 1030 } 1031} 1032 1033var mouseX = Infinity, mouseY; 1034 1035function calcXY() { 1036 var e = window.event; 1037 var tgt = e.target || e.srcElement; 1038 var left = tgt.offsetLeft; 1039 var top = tgt.offsetTop; 1040 var unit = scale * ticks; 1041 mouseX = (e.clientX - left - Math.ceil(at_x) + 1) / unit + xStart; 1042 mouseY = (e.clientY - top - Math.ceil(at_y)) / unit + yStart; 1043} 1044 1045function handleMouseOver() { 1046 calcXY(); 1047 var num = mouseX.toFixed(3) + ", " + mouseY.toFixed(3); 1048 ctx.beginPath(); 1049 ctx.rect(300,100,200,10); 1050 ctx.fillStyle="white"; 1051 ctx.fill(); 1052 ctx.fillStyle="black"; 1053 ctx.fillText(num, 300, 108); 1054} 1055 1056function handleMouseClick() { 1057 calcXY(); 1058// drawInset(); 1059} 1060 1061function drawTop() { 1062 init(tests[testIndex]); 1063 redraw(); 1064} 1065 1066function redraw() { 1067 ctx.beginPath(); 1068 ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height); 1069 ctx.fillStyle="white"; 1070 ctx.fill(); 1071 draw(tests[testIndex], testTitles[testIndex], at_x, at_y, scale); 1072// if (insetScale != scale && mouseX != Infinity) 1073// drawInset(); 1074} 1075 1076function doKeyPress(evt) { 1077 var char = String.fromCharCode(evt.charCode); 1078 switch (char) { 1079 case 'N': 1080 testIndex += 9; 1081 case 'n': 1082 if (++testIndex >= tests.length) 1083 testIndex = 0; 1084 mouseX = Infinity; 1085 drawTop(); 1086 break; 1087 case 'P': 1088 testIndex -= 9; 1089 case 'p': 1090 if (--testIndex < 0) 1091 testIndex = tests.length - 1; 1092 mouseX = Infinity; 1093 drawTop(); 1094 break; 1095 case 'T': 1096 case 't': 1097 break; 1098 case '-': 1099 drawTop(); 1100 break; 1101 case '=': 1102 case '+': 1103 drawTop(); 1104 break; 1105 } 1106} 1107 1108function doResize(evt) { 1109 drawTop(); 1110} 1111 1112function start() { 1113 for (i = 0; i < testDivs.length; ++i) { 1114 var title = testDivs[i].id.toString(); 1115 var str = testDivs[i].firstChild.data; 1116 if (str.split("addRect").length > 1) { 1117 parseRect(str, title); 1118 } else { 1119 parse(str, title); 1120 } 1121 } 1122 drawTop(); 1123 window.addEventListener('keypress', doKeyPress, true); 1124 window.onresize = function() { 1125 drawTop(); 1126 } 1127} 1128 1129</script> 1130</head> 1131 1132<body onLoad="start();"> 1133<canvas id="canvas" width="750" height="500" 1134 onmousemove="handleMouseOver()" 1135 onclick="handleMouseClick()" 1136 ></canvas > 1137</body> 1138</html> 1139