| Index: src/pathops/SkPathOpsTSect.h
|
| diff --git a/src/pathops/SkPathOpsTSect.h b/src/pathops/SkPathOpsTSect.h
|
| index 9032af83eb6ef71c060fec16db4babf41fea4ddd..db2e865a121fc1c9df61b9a1cba9097d0cf85857 100644
|
| --- a/src/pathops/SkPathOpsTSect.h
|
| +++ b/src/pathops/SkPathOpsTSect.h
|
| @@ -882,6 +882,7 @@ bool SkTSect<TCurve, OppCurve>::binarySearchCoin(SkTSect<OppCurve, TCurve>* sect
|
| SkDPoint last = fCurve.ptAtT(tStart);
|
| SkDPoint oppPt;
|
| bool flip = false;
|
| + bool contained = false;
|
| SkDEBUGCODE(bool down = tStep < 0);
|
| const OppCurve& opp = sect2->fCurve;
|
| do {
|
| @@ -908,6 +909,7 @@ bool SkTSect<TCurve, OppCurve>::binarySearchCoin(SkTSect<OppCurve, TCurve>* sect
|
| if (sect2->fHead->contains(oppTTest)) {
|
| *oppT = oppTTest;
|
| oppPt = work.fCoinStart.perpPt();
|
| + contained = true;
|
| SkASSERT(down ? result > work.fStartT : result < work.fStartT);
|
| result = work.fStartT;
|
| continue;
|
| @@ -916,6 +918,9 @@ bool SkTSect<TCurve, OppCurve>::binarySearchCoin(SkTSect<OppCurve, TCurve>* sect
|
| tStep = -tStep;
|
| flip = true;
|
| } while (true);
|
| + if (!contained) {
|
| + return false;
|
| + }
|
| if (last.approximatelyEqual(fCurve[0])) {
|
| result = 0;
|
| } else if (last.approximatelyEqual(fCurve[TCurve::kPointLast])) {
|
| @@ -1923,10 +1928,10 @@ struct SkClosestRecord {
|
| fClosest = dist;
|
| }
|
|
|
| - bool matesWith(const SkClosestRecord& mate) const {
|
| + bool matesWith(const SkClosestRecord& mate SkDEBUGPARAMS(SkIntersections* i)) const {
|
| SkASSERT(fC1Span == mate.fC1Span || fC1Span->endT() <= mate.fC1Span->startT()
|
| || mate.fC1Span->endT() <= fC1Span->startT());
|
| - SkASSERT(fC2Span == mate.fC2Span || fC2Span->endT() <= mate.fC2Span->startT()
|
| + SkOPOBJASSERT(i, fC2Span == mate.fC2Span || fC2Span->endT() <= mate.fC2Span->startT()
|
| || mate.fC2Span->endT() <= fC2Span->startT());
|
| return fC1Span == mate.fC1Span || fC1Span->endT() == mate.fC1Span->startT()
|
| || fC1Span->startT() == mate.fC1Span->endT()
|
| @@ -1975,7 +1980,8 @@ struct SkClosestSect {
|
| fClosest.push_back().reset();
|
| }
|
|
|
| - bool find(const SkTSpan<TCurve, OppCurve>* span1, const SkTSpan<OppCurve, TCurve>* span2) {
|
| + bool find(const SkTSpan<TCurve, OppCurve>* span1, const SkTSpan<OppCurve, TCurve>* span2
|
| + SkDEBUGPARAMS(SkIntersections* i)) {
|
| SkClosestRecord<TCurve, OppCurve>* record = &fClosest[fUsed];
|
| record->findEnd(span1, span2, 0, 0);
|
| record->findEnd(span1, span2, 0, OppCurve::kPointLast);
|
| @@ -1986,7 +1992,7 @@ struct SkClosestSect {
|
| }
|
| for (int index = 0; index < fUsed; ++index) {
|
| SkClosestRecord<TCurve, OppCurve>* test = &fClosest[index];
|
| - if (test->matesWith(*record)) {
|
| + if (test->matesWith(*record SkDEBUGPARAMS(i))) {
|
| if (test->fClosest > record->fClosest) {
|
| test->merge(*record);
|
| }
|
| @@ -2212,7 +2218,7 @@ void SkTSect<TCurve, OppCurve>::BinarySearch(SkTSect<TCurve, OppCurve>* sect1,
|
| SkTSpan<OppCurve, TCurve>* result2 = sect2->fHead;
|
| bool found = false;
|
| while (result2) {
|
| - found |= closest.find(result1, result2);
|
| + found |= closest.find(result1, result2 SkDEBUGPARAMS(intersections));
|
| result2 = result2->fNext;
|
| }
|
| } while ((result1 = result1->fNext));
|
|
|