OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 #include "SkOpCoincidence.h" | 7 #include "SkOpCoincidence.h" |
8 #include "SkOpSegment.h" | 8 #include "SkOpSegment.h" |
9 #include "SkPathOpsTSect.h" | 9 #include "SkPathOpsTSect.h" |
10 | 10 |
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 double oPriorT = oStartPtT->fT; | 454 double oPriorT = oStartPtT->fT; |
455 FAIL_IF(!startPtT->contains(oStartPtT)); | 455 FAIL_IF(!startPtT->contains(oStartPtT)); |
456 SkOPASSERT(coin->coinPtTEnd()->contains(coin->oppPtTEnd())); | 456 SkOPASSERT(coin->coinPtTEnd()->contains(coin->oppPtTEnd())); |
457 const SkOpSpanBase* start = startPtT->span(); | 457 const SkOpSpanBase* start = startPtT->span(); |
458 const SkOpSpanBase* oStart = oStartPtT->span(); | 458 const SkOpSpanBase* oStart = oStartPtT->span(); |
459 const SkOpSpanBase* end = coin->coinPtTEnd()->span(); | 459 const SkOpSpanBase* end = coin->coinPtTEnd()->span(); |
460 const SkOpSpanBase* oEnd = coin->oppPtTEnd()->span(); | 460 const SkOpSpanBase* oEnd = coin->oppPtTEnd()->span(); |
461 FAIL_IF(oEnd->deleted()); | 461 FAIL_IF(oEnd->deleted()); |
462 FAIL_IF(!start->upCastable()); | 462 FAIL_IF(!start->upCastable()); |
463 const SkOpSpanBase* test = start->upCast()->next(); | 463 const SkOpSpanBase* test = start->upCast()->next(); |
| 464 FAIL_IF(!coin->flipped() && !oStart->upCastable()); |
464 const SkOpSpanBase* oTest = coin->flipped() ? oStart->prev() : oStart->u
pCast()->next(); | 465 const SkOpSpanBase* oTest = coin->flipped() ? oStart->prev() : oStart->u
pCast()->next(); |
465 FAIL_IF(!oTest); | 466 FAIL_IF(!oTest); |
466 SkOpSegment* seg = start->segment(); | 467 SkOpSegment* seg = start->segment(); |
467 SkOpSegment* oSeg = oStart->segment(); | 468 SkOpSegment* oSeg = oStart->segment(); |
468 while (test != end || oTest != oEnd) { | 469 while (test != end || oTest != oEnd) { |
469 const SkOpPtT* containedOpp = test->ptT()->contains(oSeg); | 470 const SkOpPtT* containedOpp = test->ptT()->contains(oSeg); |
470 const SkOpPtT* containedThis = oTest->ptT()->contains(seg); | 471 const SkOpPtT* containedThis = oTest->ptT()->contains(seg); |
471 if (!containedOpp || !containedThis) { | 472 if (!containedOpp || !containedThis) { |
472 // choose the ends, or the first common pt-t list shared by both | 473 // choose the ends, or the first common pt-t list shared by both |
473 double nextT, oNextT; | 474 double nextT, oNextT; |
(...skipping 1129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1603 this->release(fHead, coin); | 1604 this->release(fHead, coin); |
1604 } | 1605 } |
1605 } while ((coin = coin->next())); | 1606 } while ((coin = coin->next())); |
1606 } | 1607 } |
1607 | 1608 |
1608 bool SkOpCoincidence::testForCoincidence(const SkCoincidentSpans* outer, const S
kOpPtT* testS, | 1609 bool SkOpCoincidence::testForCoincidence(const SkCoincidentSpans* outer, const S
kOpPtT* testS, |
1609 const SkOpPtT* testE) const { | 1610 const SkOpPtT* testE) const { |
1610 return testS->segment()->testForCoincidence(testS, testE, testS->span(), | 1611 return testS->segment()->testForCoincidence(testS, testE, testS->span(), |
1611 testE->span(), outer->coinPtTStart()->segment()); | 1612 testE->span(), outer->coinPtTStart()->segment()); |
1612 } | 1613 } |
OLD | NEW |