OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "PathOpsTSectDebug.h" | 8 #include "PathOpsTSectDebug.h" |
9 #include "SkOpCoincidence.h" | 9 #include "SkOpCoincidence.h" |
10 #include "SkOpContour.h" | 10 #include "SkOpContour.h" |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 | 178 |
179 void SkPathOpsDebug::WindingPrintf(int wind) { | 179 void SkPathOpsDebug::WindingPrintf(int wind) { |
180 if (wind == SK_MinS32) { | 180 if (wind == SK_MinS32) { |
181 SkDebugf("?"); | 181 SkDebugf("?"); |
182 } else { | 182 } else { |
183 SkDebugf("%d", wind); | 183 SkDebugf("%d", wind); |
184 } | 184 } |
185 } | 185 } |
186 #endif | 186 #endif |
187 | 187 |
| 188 void SkDConic::dump() const { |
| 189 dumpInner(); |
| 190 SkDebugf("},\n"); |
| 191 } |
| 192 |
| 193 void SkDConic::dumpID(int id) const { |
| 194 dumpInner(); |
| 195 SkDebugf("} id=%d\n", id); |
| 196 } |
| 197 |
| 198 void SkDConic::dumpInner() const { |
| 199 SkDebugf("{{"); |
| 200 int index = 0; |
| 201 do { |
| 202 fPts[index].dump(); |
| 203 SkDebugf(", "); |
| 204 } while (++index < 2); |
| 205 fPts[index].dump(); |
| 206 SkDebugf("}, %1.9g", fWeight); |
| 207 } |
| 208 |
188 void SkDCubic::dump() const { | 209 void SkDCubic::dump() const { |
189 dumpInner(); | 210 this->dumpInner(); |
190 SkDebugf("}},\n"); | 211 SkDebugf("}},\n"); |
191 } | 212 } |
192 | 213 |
193 void SkDCubic::dumpID(int id) const { | 214 void SkDCubic::dumpID(int id) const { |
194 dumpInner(); | 215 this->dumpInner(); |
195 SkDebugf("}} id=%d\n", id); | 216 SkDebugf("}} id=%d\n", id); |
196 } | 217 } |
197 | 218 |
198 static inline bool double_is_NaN(double x) { return x != x; } | 219 static inline bool double_is_NaN(double x) { return x != x; } |
199 | 220 |
200 void SkDCubic::dumpInner() const { | 221 void SkDCubic::dumpInner() const { |
201 SkDebugf("{{"); | 222 SkDebugf("{{"); |
202 int index = 0; | 223 int index = 0; |
203 do { | 224 do { |
204 if (index != 0) { | 225 if (index != 0) { |
205 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY))
{ | 226 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY))
{ |
206 return; | 227 return; |
207 } | 228 } |
208 SkDebugf(", "); | 229 SkDebugf(", "); |
209 } | 230 } |
210 fPts[index].dump(); | 231 fPts[index].dump(); |
211 } while (++index < 3); | 232 } while (++index < 3); |
212 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) { | 233 if (double_is_NaN(fPts[index].fX) && double_is_NaN(fPts[index].fY)) { |
213 return; | 234 return; |
214 } | 235 } |
215 SkDebugf(", "); | 236 SkDebugf(", "); |
216 fPts[index].dump(); | 237 fPts[index].dump(); |
217 } | 238 } |
218 | 239 |
| 240 void SkDCurve::dumpID(int id) const { |
| 241 #ifndef SK_RELEASE |
| 242 switch(fVerb) { |
| 243 case SkPath::kLine_Verb: |
| 244 fLine.dumpID(id); |
| 245 break; |
| 246 case SkPath::kQuad_Verb: |
| 247 fQuad.dumpID(id); |
| 248 break; |
| 249 case SkPath::kConic_Verb: |
| 250 fConic.dumpID(id); |
| 251 break; |
| 252 case SkPath::kCubic_Verb: |
| 253 fCubic.dumpID(id); |
| 254 break; |
| 255 default: |
| 256 SkASSERT(0); |
| 257 } |
| 258 #else |
| 259 fCubic.dumpID(id); |
| 260 #endif |
| 261 } |
| 262 |
219 void SkDLine::dump() const { | 263 void SkDLine::dump() const { |
| 264 this->dumpInner(); |
| 265 SkDebugf("}},\n"); |
| 266 } |
| 267 |
| 268 void SkDLine::dumpID(int id) const { |
| 269 this->dumpInner(); |
| 270 SkDebugf("}} id=%d\n", id); |
| 271 } |
| 272 |
| 273 void SkDLine::dumpInner() const { |
220 SkDebugf("{{"); | 274 SkDebugf("{{"); |
221 fPts[0].dump(); | 275 fPts[0].dump(); |
222 SkDebugf(", "); | 276 SkDebugf(", "); |
223 fPts[1].dump(); | 277 fPts[1].dump(); |
224 SkDebugf("}},\n"); | |
225 } | 278 } |
226 | 279 |
227 void SkDPoint::dump() const { | 280 void SkDPoint::dump() const { |
228 SkDebugf("{"); | 281 SkDebugf("{"); |
229 DebugDumpDouble(fX); | 282 DebugDumpDouble(fX); |
230 SkDebugf(", "); | 283 SkDebugf(", "); |
231 DebugDumpDouble(fY); | 284 DebugDumpDouble(fY); |
232 SkDebugf("}"); | 285 SkDebugf("}"); |
233 } | 286 } |
234 | 287 |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 } | 484 } |
432 } | 485 } |
433 | 486 |
434 void SkPathOpsDebug::DumpContoursSpans(const SkTDArray<SkOpContour* >* contours)
{ | 487 void SkPathOpsDebug::DumpContoursSpans(const SkTDArray<SkOpContour* >* contours)
{ |
435 int count = contours->count(); | 488 int count = contours->count(); |
436 for (int index = 0; index < count; ++index) { | 489 for (int index = 0; index < count; ++index) { |
437 (*contours)[index]->dumpSpans(); | 490 (*contours)[index]->dumpSpans(); |
438 } | 491 } |
439 } | 492 } |
440 | 493 |
441 const SkTSpan<SkDCubic>* DebugSpan(const SkTSect<SkDCubic>* sect, int id) { | 494 template <typename TCurve, typename OppCurve> |
| 495 const SkTSpan<TCurve, OppCurve>* DebugSpan(const SkTSect<TCurve, OppCurve>* sect
, int id) { |
442 return sect->debugSpan(id); | 496 return sect->debugSpan(id); |
443 } | 497 } |
444 | 498 |
445 const SkTSpan<SkDQuad>* DebugSpan(const SkTSect<SkDQuad>* sect, int id) { | 499 void DontCallDebugSpan(int id); |
446 return sect->debugSpan(id); | 500 void DontCallDebugSpan(int id) { // exists to instantiate the templates |
447 } | 501 SkDQuad quad; |
448 | 502 SkDConic conic; |
449 const SkTSpan<SkDCubic>* DebugT(const SkTSect<SkDCubic>* sect, double t) { | 503 SkDCubic cubic; |
| 504 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 505 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 506 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 507 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 508 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 509 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 510 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 511 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 512 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 513 DebugSpan(&q1q2, id); |
| 514 DebugSpan(&q1k2, id); |
| 515 DebugSpan(&q1c2, id); |
| 516 DebugSpan(&k1q2, id); |
| 517 DebugSpan(&k1k2, id); |
| 518 DebugSpan(&k1c2, id); |
| 519 DebugSpan(&c1q2, id); |
| 520 DebugSpan(&c1k2, id); |
| 521 DebugSpan(&c1c2, id); |
| 522 } |
| 523 |
| 524 template <typename TCurve, typename OppCurve> |
| 525 const SkTSpan<TCurve, OppCurve>* DebugT(const SkTSect<TCurve, OppCurve>* sect, d
ouble t) { |
450 return sect->debugT(t); | 526 return sect->debugT(t); |
451 } | 527 } |
452 | 528 |
453 const SkTSpan<SkDQuad>* DebugT(const SkTSect<SkDQuad>* sect, double t) { | 529 void DontCallDebugT(double t); |
454 return sect->debugT(t); | 530 void DontCallDebugT(double t) { // exists to instantiate the templates |
455 } | 531 SkDQuad quad; |
456 | 532 SkDConic conic; |
457 const SkTSpan<SkDCubic>* DebugSpan(const SkTSpan<SkDCubic>* span, int id) { | 533 SkDCubic cubic; |
458 return span->debugSpan(id); | 534 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
459 } | 535 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
460 | 536 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
461 const SkTSpan<SkDQuad>* DebugSpan(const SkTSpan<SkDQuad>* span, int id) { | 537 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
462 return span->debugSpan(id); | 538 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
463 } | 539 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
464 | 540 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
465 const SkTSpan<SkDCubic>* DebugT(const SkTSpan<SkDCubic>* span, double t) { | 541 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
466 return span->debugT(t); | 542 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
467 } | 543 DebugT(&q1q2, t); |
468 | 544 DebugT(&q1k2, t); |
469 const SkTSpan<SkDQuad>* DebugT(const SkTSpan<SkDQuad>* span, double t) { | 545 DebugT(&q1c2, t); |
470 return span->debugT(t); | 546 DebugT(&k1q2, t); |
471 } | 547 DebugT(&k1k2, t); |
472 | 548 DebugT(&k1c2, t); |
473 void Dump(const SkTSect<SkDCubic>* sect) { | 549 DebugT(&c1q2, t); |
| 550 DebugT(&c1k2, t); |
| 551 DebugT(&c1c2, t); |
| 552 } |
| 553 |
| 554 template <typename TCurve, typename OppCurve> |
| 555 void Dump(const SkTSect<TCurve, OppCurve>* sect) { |
474 sect->dump(); | 556 sect->dump(); |
475 } | 557 } |
476 | 558 |
477 void Dump(const SkTSect<SkDQuad>* sect) { | 559 void DontCallDumpTSect(); |
478 sect->dump(); | 560 void DontCallDumpTSect() { // exists to instantiate the templates |
479 } | 561 SkDQuad quad; |
480 | 562 SkDConic conic; |
481 void Dump(const SkTSpan<SkDCubic>* span) { | 563 SkDCubic cubic; |
| 564 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 565 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 566 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 567 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 568 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 569 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 570 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 571 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 572 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 573 Dump(&q1q2); |
| 574 Dump(&q1k2); |
| 575 Dump(&q1c2); |
| 576 Dump(&k1q2); |
| 577 Dump(&k1k2); |
| 578 Dump(&k1c2); |
| 579 Dump(&c1q2); |
| 580 Dump(&c1k2); |
| 581 Dump(&c1c2); |
| 582 } |
| 583 |
| 584 template <typename TCurve, typename OppCurve> |
| 585 void Dump(const SkTSpan<TCurve, OppCurve>* span) { |
482 span->dump(); | 586 span->dump(); |
483 } | 587 } |
484 | 588 |
485 void Dump(const SkTSpan<SkDQuad>* span) { | 589 void DontCallDumpTSpan(); |
486 span->dump(); | 590 void DontCallDumpTSpan() { // exists to instantiate the templates |
487 } | 591 SkTSpan<SkDQuad, SkDQuad> q1q2; |
488 | 592 SkTSpan<SkDQuad, SkDConic> q1k2; |
489 void DumpBoth(SkTSect<SkDCubic>* sect1, SkTSect<SkDCubic>* sect2) { | 593 SkTSpan<SkDQuad, SkDCubic> q1c2; |
| 594 SkTSpan<SkDConic, SkDQuad> k1q2; |
| 595 SkTSpan<SkDConic, SkDConic> k1k2; |
| 596 SkTSpan<SkDConic, SkDCubic> k1c2; |
| 597 SkTSpan<SkDCubic, SkDQuad> c1q2; |
| 598 SkTSpan<SkDCubic, SkDConic> c1k2; |
| 599 SkTSpan<SkDCubic, SkDCubic> c1c2; |
| 600 Dump(&q1q2); |
| 601 Dump(&q1k2); |
| 602 Dump(&q1c2); |
| 603 Dump(&k1q2); |
| 604 Dump(&k1k2); |
| 605 Dump(&k1c2); |
| 606 Dump(&c1q2); |
| 607 Dump(&c1k2); |
| 608 Dump(&c1c2); |
| 609 } |
| 610 |
| 611 template <typename TCurve, typename OppCurve> |
| 612 void DumpBoth(SkTSect<TCurve, OppCurve>* sect1, SkTSect<OppCurve, TCurve>* sect2
) { |
490 sect1->dumpBoth(sect2); | 613 sect1->dumpBoth(sect2); |
491 } | 614 } |
492 | 615 |
493 void DumpBoth(SkTSect<SkDQuad>* sect1, SkTSect<SkDQuad>* sect2) { | 616 void DontCallDumpBoth(); |
494 sect1->dumpBoth(sect2); | 617 void DontCallDumpBoth() { // exists to instantiate the templates |
495 } | 618 SkDQuad quad; |
496 | 619 SkDConic conic; |
497 void DumpCoin(SkTSect<SkDCubic>* sect1) { | 620 SkDCubic cubic; |
| 621 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 622 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 623 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 624 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 625 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 626 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 627 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 628 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 629 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 630 DumpBoth(&q1q2, &q1q2); |
| 631 DumpBoth(&q1k2, &k1q2); |
| 632 DumpBoth(&q1c2, &c1q2); |
| 633 DumpBoth(&k1q2, &q1k2); |
| 634 DumpBoth(&k1k2, &k1k2); |
| 635 DumpBoth(&k1c2, &c1k2); |
| 636 DumpBoth(&c1q2, &q1c2); |
| 637 DumpBoth(&c1k2, &k1c2); |
| 638 DumpBoth(&c1c2, &c1c2); |
| 639 } |
| 640 |
| 641 template <typename TCurve, typename OppCurve> |
| 642 void DumpBounds(SkTSect<TCurve, OppCurve>* sect1, int id) { |
| 643 sect1->dumpBounds(id); |
| 644 } |
| 645 |
| 646 void DontCallDumpBounds(); |
| 647 void DontCallDumpBounds() { |
| 648 SkDQuad quad; |
| 649 SkDConic conic; |
| 650 SkDCubic cubic; |
| 651 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 652 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 653 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 654 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 655 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 656 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 657 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 658 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 659 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 660 DumpBounds(&q1q2, 0); |
| 661 DumpBounds(&q1k2, 0); |
| 662 DumpBounds(&q1c2, 0); |
| 663 DumpBounds(&k1q2, 0); |
| 664 DumpBounds(&k1k2, 0); |
| 665 DumpBounds(&k1c2, 0); |
| 666 DumpBounds(&c1q2, 0); |
| 667 DumpBounds(&c1k2, 0); |
| 668 DumpBounds(&c1c2, 0); |
| 669 } |
| 670 |
| 671 template <typename TCurve, typename OppCurve> |
| 672 void DumpCoin(SkTSect<TCurve, OppCurve>* sect1) { |
498 sect1->dumpCoin(); | 673 sect1->dumpCoin(); |
499 } | 674 } |
500 | 675 |
501 void DumpCoin(SkTSect<SkDQuad>* sect1) { | 676 void DontCallDumpCoin(); |
502 sect1->dumpCoin(); | 677 void DontCallDumpCoin() { // exists to instantiate the templates |
503 } | 678 SkDQuad quad; |
504 | 679 SkDConic conic; |
505 void DumpCoinCurves(SkTSect<SkDCubic>* sect1) { | 680 SkDCubic cubic; |
| 681 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 682 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 683 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 684 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 685 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 686 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 687 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 688 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 689 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 690 DumpCoin(&q1q2); |
| 691 DumpCoin(&q1k2); |
| 692 DumpCoin(&q1c2); |
| 693 DumpCoin(&k1q2); |
| 694 DumpCoin(&k1k2); |
| 695 DumpCoin(&k1c2); |
| 696 DumpCoin(&c1q2); |
| 697 DumpCoin(&c1k2); |
| 698 DumpCoin(&c1c2); |
| 699 } |
| 700 |
| 701 template <typename TCurve, typename OppCurve> |
| 702 void DumpCoinCurves(SkTSect<TCurve, OppCurve>* sect1) { |
506 sect1->dumpCoinCurves(); | 703 sect1->dumpCoinCurves(); |
507 } | 704 } |
508 | 705 |
509 void DumpCoinCurves(SkTSect<SkDQuad>* sect1) { | 706 void DontCallDumpCoinCurves(); |
510 sect1->dumpCoinCurves(); | 707 void DontCallDumpCoinCurves() { // exists to instantiate the templates |
511 } | 708 SkDQuad quad; |
512 | 709 SkDConic conic; |
513 void DumpCurves(const SkTSect<SkDQuad>* sect) { | 710 SkDCubic cubic; |
| 711 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 712 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 713 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 714 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 715 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 716 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 717 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 718 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 719 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 720 DumpCoinCurves(&q1q2); |
| 721 DumpCoinCurves(&q1k2); |
| 722 DumpCoinCurves(&q1c2); |
| 723 DumpCoinCurves(&k1q2); |
| 724 DumpCoinCurves(&k1k2); |
| 725 DumpCoinCurves(&k1c2); |
| 726 DumpCoinCurves(&c1q2); |
| 727 DumpCoinCurves(&c1k2); |
| 728 DumpCoinCurves(&c1c2); |
| 729 } |
| 730 |
| 731 template <typename TCurve, typename OppCurve> |
| 732 void DumpCurves(const SkTSect<TCurve, OppCurve>* sect) { |
514 sect->dumpCurves(); | 733 sect->dumpCurves(); |
515 } | 734 } |
516 | 735 |
517 void DumpCurves(const SkTSect<SkDCubic>* sect) { | 736 void DontCallDumpCurves(); |
518 sect->dumpCurves(); | 737 void DontCallDumpCurves() { // exists to instantiate the templates |
| 738 SkDQuad quad; |
| 739 SkDConic conic; |
| 740 SkDCubic cubic; |
| 741 SkTSect<SkDQuad, SkDQuad> q1q2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 742 SkTSect<SkDQuad, SkDConic> q1k2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 743 SkTSect<SkDQuad, SkDCubic> q1c2(quad PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 744 SkTSect<SkDConic, SkDQuad> k1q2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 745 SkTSect<SkDConic, SkDConic> k1k2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 746 SkTSect<SkDConic, SkDCubic> k1c2(conic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 747 SkTSect<SkDCubic, SkDQuad> c1q2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 748 SkTSect<SkDCubic, SkDConic> c1k2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 749 SkTSect<SkDCubic, SkDCubic> c1c2(cubic PATH_OPS_DEBUG_T_SECT_PARAMS(1)); |
| 750 DumpCurves(&q1q2); |
| 751 DumpCurves(&q1k2); |
| 752 DumpCurves(&q1c2); |
| 753 DumpCurves(&k1q2); |
| 754 DumpCurves(&k1k2); |
| 755 DumpCurves(&k1c2); |
| 756 DumpCurves(&c1q2); |
| 757 DumpCurves(&c1k2); |
| 758 DumpCurves(&c1c2); |
519 } | 759 } |
520 | 760 |
521 static void dumpTestCase(const SkDQuad& quad1, const SkDQuad& quad2, int testNo)
{ | 761 static void dumpTestCase(const SkDQuad& quad1, const SkDQuad& quad2, int testNo)
{ |
522 SkDebugf("\n<div id=\"quad%d\">\n", testNo); | 762 SkDebugf("\n<div id=\"quad%d\">\n", testNo); |
523 quad1.dumpInner(); | 763 quad1.dumpInner(); |
524 SkDebugf("}}, "); | 764 SkDebugf("}}, "); |
525 quad2.dump(); | 765 quad2.dump(); |
526 SkDebugf("</div>\n\n"); | 766 SkDebugf("</div>\n\n"); |
527 } | 767 } |
528 | 768 |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
896 void SkOpSegment::dumpCoin() const { | 1136 void SkOpSegment::dumpCoin() const { |
897 const SkOpSpan* span = &fHead; | 1137 const SkOpSpan* span = &fHead; |
898 do { | 1138 do { |
899 span->dumpCoin(); | 1139 span->dumpCoin(); |
900 } while ((span = span->next()->upCastable())); | 1140 } while ((span = span->next()->upCastable())); |
901 } | 1141 } |
902 | 1142 |
903 void SkOpSegment::dumpPts() const { | 1143 void SkOpSegment::dumpPts() const { |
904 int last = SkPathOpsVerbToPoints(fVerb); | 1144 int last = SkPathOpsVerbToPoints(fVerb); |
905 SkDebugf("seg=%d {{", this->debugID()); | 1145 SkDebugf("seg=%d {{", this->debugID()); |
| 1146 if (fVerb == SkPath::kConic_Verb) { |
| 1147 SkDebugf("{"); |
| 1148 } |
906 int index = 0; | 1149 int index = 0; |
907 do { | 1150 do { |
908 SkDPoint::Dump(fPts[index]); | 1151 SkDPoint::Dump(fPts[index]); |
909 SkDebugf(", "); | 1152 SkDebugf(", "); |
910 } while (++index < last); | 1153 } while (++index < last); |
911 SkDPoint::Dump(fPts[index]); | 1154 SkDPoint::Dump(fPts[index]); |
912 SkDebugf("}}\n"); | 1155 SkDebugf("}}"); |
| 1156 if (fVerb == SkPath::kConic_Verb) { |
| 1157 SkDebugf(", %1.9gf}", fWeight); |
| 1158 } |
| 1159 SkDebugf("\n"); |
913 } | 1160 } |
914 | 1161 |
915 void SkCoincidentSpans::dump() const { | 1162 void SkCoincidentSpans::dump() const { |
916 SkDebugf("- seg=%d span=%d ptT=%d ", fCoinPtTStart->segment()->debugID(), | 1163 SkDebugf("- seg=%d span=%d ptT=%d ", fCoinPtTStart->segment()->debugID(), |
917 fCoinPtTStart->span()->debugID(), fCoinPtTStart->debugID()); | 1164 fCoinPtTStart->span()->debugID(), fCoinPtTStart->debugID()); |
918 fCoinPtTStart->dumpBase(); | 1165 fCoinPtTStart->dumpBase(); |
919 SkDebugf(" span=%d ptT=%d ", fCoinPtTEnd->span()->debugID(), fCoinPtTEnd->de
bugID()); | 1166 SkDebugf(" span=%d ptT=%d ", fCoinPtTEnd->span()->debugID(), fCoinPtTEnd->de
bugID()); |
920 fCoinPtTEnd->dumpBase(); | 1167 fCoinPtTEnd->dumpBase(); |
921 if (fCoinPtTStart->segment()->operand()) { | 1168 if (fCoinPtTStart->segment()->operand()) { |
922 SkDebugf(" operand"); | 1169 SkDebugf(" operand"); |
(...skipping 23 matching lines...) Expand all Loading... |
946 span = span->fNext; | 1193 span = span->fNext; |
947 } | 1194 } |
948 } | 1195 } |
949 | 1196 |
950 void SkOpContour::dump() { | 1197 void SkOpContour::dump() { |
951 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount); | 1198 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount); |
952 if (!fCount) { | 1199 if (!fCount) { |
953 return; | 1200 return; |
954 } | 1201 } |
955 const SkOpSegment* segment = &fHead; | 1202 const SkOpSegment* segment = &fHead; |
956 PATH_OPS_DEBUG_CODE(fIndent = 0); | 1203 SkDEBUGCODE(fIndent = 0); |
957 indentDump(); | 1204 indentDump(); |
958 do { | 1205 do { |
959 segment->dump(); | 1206 segment->dump(); |
960 } while ((segment = segment->next())); | 1207 } while ((segment = segment->next())); |
961 outdentDump(); | 1208 outdentDump(); |
962 } | 1209 } |
963 | 1210 |
964 void SkOpContour::dumpAll() { | 1211 void SkOpContour::dumpAll() { |
965 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount); | 1212 SkDebugf("contour=%d count=%d\n", this->debugID(), fCount); |
966 if (!fCount) { | 1213 if (!fCount) { |
967 return; | 1214 return; |
968 } | 1215 } |
969 const SkOpSegment* segment = &fHead; | 1216 const SkOpSegment* segment = &fHead; |
970 PATH_OPS_DEBUG_CODE(fIndent = 0); | 1217 SkDEBUGCODE(fIndent = 0); |
971 indentDump(); | 1218 indentDump(); |
972 do { | 1219 do { |
973 segment->dumpAll(); | 1220 segment->dumpAll(); |
974 } while ((segment = segment->next())); | 1221 } while ((segment = segment->next())); |
975 outdentDump(); | 1222 outdentDump(); |
976 } | 1223 } |
977 | 1224 |
978 | 1225 |
979 void SkOpContour::dumpAngles() const { | 1226 void SkOpContour::dumpAngles() const { |
980 SkDebugf("contour=%d\n", this->debugID()); | 1227 SkDebugf("contour=%d\n", this->debugID()); |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1190 SkPathOpsDebug::DumpContoursPt(contours, segmentID); | 1437 SkPathOpsDebug::DumpContoursPt(contours, segmentID); |
1191 } | 1438 } |
1192 | 1439 |
1193 void DumpPts(const SkTDArray<SkOpContour* >* contours) { | 1440 void DumpPts(const SkTDArray<SkOpContour* >* contours) { |
1194 SkPathOpsDebug::DumpContoursPts(contours); | 1441 SkPathOpsDebug::DumpContoursPts(contours); |
1195 } | 1442 } |
1196 | 1443 |
1197 #if DEBUG_T_SECT_DUMP > 1 | 1444 #if DEBUG_T_SECT_DUMP > 1 |
1198 int gDumpTSectNum; | 1445 int gDumpTSectNum; |
1199 #endif | 1446 #endif |
OLD | NEW |