| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "SkIntersections.h" | 7 #include "SkIntersections.h" |
| 8 #include "SkOpContour.h" | 8 #include "SkOpContour.h" |
| 9 #include "SkPathWriter.h" | 9 #include "SkPathWriter.h" |
| 10 #include "SkTSort.h" | 10 #include "SkTSort.h" |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 SkTSwap<double>(startT, endT); | 205 SkTSwap<double>(startT, endT); |
| 206 SkTSwap<double>(oStartT, oEndT); | 206 SkTSwap<double>(oStartT, oEndT); |
| 207 } | 207 } |
| 208 bool cancel = swapOther != swapStart; | 208 bool cancel = swapOther != swapStart; |
| 209 int step = swapStart ? -1 : 1; | 209 int step = swapStart ? -1 : 1; |
| 210 int oStep = swapOther ? -1 : 1; | 210 int oStep = swapOther ? -1 : 1; |
| 211 double oMatchStart = cancel ? oEndT : oStartT; | 211 double oMatchStart = cancel ? oEndT : oStartT; |
| 212 if (partial ? startT != 0 || oMatchStart != 0 : (startT == 0) != (oMatch
Start == 0)) { | 212 if (partial ? startT != 0 || oMatchStart != 0 : (startT == 0) != (oMatch
Start == 0)) { |
| 213 bool added = false; | 213 bool added = false; |
| 214 if (oMatchStart != 0) { | 214 if (oMatchStart != 0) { |
| 215 added = thisOne.joinCoincidence(false, &other, oMatchStart, oSte
p, cancel); | 215 added = thisOne.joinCoincidence(&other, oMatchStart, oStep, canc
el); |
| 216 } | 216 } |
| 217 if (startT != 0 && !added) { | 217 if (!cancel && startT != 0 && !added) { |
| 218 (void) other.joinCoincidence(cancel, &thisOne, startT, step, can
cel); | 218 (void) other.joinCoincidence(&thisOne, startT, step, cancel); |
| 219 } | 219 } |
| 220 } | 220 } |
| 221 double oMatchEnd = cancel ? oStartT : oEndT; | 221 double oMatchEnd = cancel ? oStartT : oEndT; |
| 222 if (partial ? endT != 1 || oMatchEnd != 1 : (endT == 1) != (oMatchEnd ==
1)) { | 222 if (partial ? endT != 1 || oMatchEnd != 1 : (endT == 1) != (oMatchEnd ==
1)) { |
| 223 bool added = false; | 223 bool added = false; |
| 224 if (oMatchEnd != 1) { | 224 if (cancel && endT != 1 && !added) { |
| 225 added = thisOne.joinCoincidence(true, &other, oMatchEnd, -oStep,
cancel); | 225 (void) other.joinCoincidence(&thisOne, endT, -step, cancel); |
| 226 } | |
| 227 if (endT != 1 && !added) { | |
| 228 (void) other.joinCoincidence(!cancel, &thisOne, endT, -step, can
cel); | |
| 229 } | 226 } |
| 230 } | 227 } |
| 231 } | 228 } |
| 232 } | 229 } |
| 233 | 230 |
| 234 void SkOpContour::calcCommonCoincidentWinding(const SkCoincidence& coincidence)
{ | 231 void SkOpContour::calcCommonCoincidentWinding(const SkCoincidence& coincidence)
{ |
| 235 int thisIndex = coincidence.fSegments[0]; | 232 int thisIndex = coincidence.fSegments[0]; |
| 236 SkOpSegment& thisOne = fSegments[thisIndex]; | 233 SkOpSegment& thisOne = fSegments[thisIndex]; |
| 237 if (thisOne.done()) { | 234 if (thisOne.done()) { |
| 238 return; | 235 return; |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 SkDebugf("%s empty contour\n", __FUNCTION__); | 379 SkDebugf("%s empty contour\n", __FUNCTION__); |
| 383 SkASSERT(0); | 380 SkASSERT(0); |
| 384 // FIXME: delete empty contour? | 381 // FIXME: delete empty contour? |
| 385 return; | 382 return; |
| 386 } | 383 } |
| 387 fBounds = fSegments.front().bounds(); | 384 fBounds = fSegments.front().bounds(); |
| 388 for (int index = 1; index < count; ++index) { | 385 for (int index = 1; index < count; ++index) { |
| 389 fBounds.add(fSegments[index].bounds()); | 386 fBounds.add(fSegments[index].bounds()); |
| 390 } | 387 } |
| 391 } | 388 } |
| OLD | NEW |