| 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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 return false; | 188 return false; |
| 189 } | 189 } |
| 190 | 190 |
| 191 // walk span sets in parallel, moving winding from one to the other | 191 // walk span sets in parallel, moving winding from one to the other |
| 192 bool SkOpCoincidence::apply() { | 192 bool SkOpCoincidence::apply() { |
| 193 SkCoincidentSpans* coin = fHead; | 193 SkCoincidentSpans* coin = fHead; |
| 194 if (!coin) { | 194 if (!coin) { |
| 195 return true; | 195 return true; |
| 196 } | 196 } |
| 197 do { | 197 do { |
| 198 SkOpSpan* start = coin->fCoinPtTStart->span()->upCast(); |
| 199 if (start->deleted()) { |
| 200 continue; |
| 201 } |
| 198 SkOpSpanBase* end = coin->fCoinPtTEnd->span(); | 202 SkOpSpanBase* end = coin->fCoinPtTEnd->span(); |
| 199 SkOpSpan* start = coin->fCoinPtTStart->span()->upCast(); | |
| 200 SkASSERT(start == start->starter(end)); | 203 SkASSERT(start == start->starter(end)); |
| 201 bool flipped = coin->fFlipped; | 204 bool flipped = coin->fFlipped; |
| 205 SkOpSpan* oStart = (flipped ? coin->fOppPtTEnd : coin->fOppPtTStart)->sp
an()->upCast(); |
| 206 if (oStart->deleted()) { |
| 207 continue; |
| 208 } |
| 202 SkOpSpanBase* oEnd = (flipped ? coin->fOppPtTStart : coin->fOppPtTEnd)->
span(); | 209 SkOpSpanBase* oEnd = (flipped ? coin->fOppPtTStart : coin->fOppPtTEnd)->
span(); |
| 203 SkOpSpan* oStart = (flipped ? coin->fOppPtTEnd : coin->fOppPtTStart)->sp
an()->upCast(); | |
| 204 SkASSERT(oStart == oStart->starter(oEnd)); | 210 SkASSERT(oStart == oStart->starter(oEnd)); |
| 205 SkOpSegment* segment = start->segment(); | 211 SkOpSegment* segment = start->segment(); |
| 206 SkOpSegment* oSegment = oStart->segment(); | 212 SkOpSegment* oSegment = oStart->segment(); |
| 207 bool operandSwap = segment->operand() != oSegment->operand(); | 213 bool operandSwap = segment->operand() != oSegment->operand(); |
| 208 if (flipped) { | 214 if (flipped) { |
| 209 do { | 215 do { |
| 210 SkOpSpanBase* oNext = oStart->next(); | 216 SkOpSpanBase* oNext = oStart->next(); |
| 211 if (oNext == oEnd) { | 217 if (oNext == oEnd) { |
| 212 break; | 218 break; |
| 213 } | 219 } |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 | 419 |
| 414 bool SkOpCoincidence::overlap(const SkOpPtT* coin1s, const SkOpPtT* coin1e, | 420 bool SkOpCoincidence::overlap(const SkOpPtT* coin1s, const SkOpPtT* coin1e, |
| 415 const SkOpPtT* coin2s, const SkOpPtT* coin2e, double* overS, double* ove
rE) const { | 421 const SkOpPtT* coin2s, const SkOpPtT* coin2e, double* overS, double* ove
rE) const { |
| 416 if (coin1s->segment() != coin2s->segment()) { | 422 if (coin1s->segment() != coin2s->segment()) { |
| 417 return false; | 423 return false; |
| 418 } | 424 } |
| 419 *overS = SkTMax(SkTMin(coin1s->fT, coin1e->fT), SkTMin(coin2s->fT, coin2e->f
T)); | 425 *overS = SkTMax(SkTMin(coin1s->fT, coin1e->fT), SkTMin(coin2s->fT, coin2e->f
T)); |
| 420 *overE = SkTMin(SkTMax(coin1s->fT, coin1e->fT), SkTMax(coin2s->fT, coin2e->f
T)); | 426 *overE = SkTMin(SkTMax(coin1s->fT, coin1e->fT), SkTMax(coin2s->fT, coin2e->f
T)); |
| 421 return *overS < *overE; | 427 return *overS < *overE; |
| 422 } | 428 } |
| OLD | NEW |