| Index: src/pathops/SkOpContour.h
|
| diff --git a/src/pathops/SkOpContour.h b/src/pathops/SkOpContour.h
|
| index f8143cf5550a30a20364824d3114015dd9cacf29..1225416eaa6c6e2378ab928861eba563d18aaa47 100644
|
| --- a/src/pathops/SkOpContour.h
|
| +++ b/src/pathops/SkOpContour.h
|
| @@ -34,6 +34,14 @@ public:
|
| : fBounds.fTop < rh.fBounds.fTop;
|
| }
|
|
|
| + void addAlignIntersections(SkOpContourHead* contourList, SkChunkAlloc* allocator) {
|
| + SkASSERT(fCount > 0);
|
| + SkOpSegment* segment = &fHead;
|
| + do {
|
| + segment->addAlignIntersections(contourList, allocator);
|
| + } while ((segment = segment->next()));
|
| + }
|
| +
|
| void addConic(SkPoint pts[3], SkScalar weight, SkChunkAlloc* allocator) {
|
| appendSegment(allocator).addConic(pts, weight, this);
|
| }
|
| @@ -222,16 +230,23 @@ public:
|
| } while ((segment = segment->next()));
|
| }
|
|
|
| - void missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc* allocator) {
|
| + bool missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc* allocator) {
|
| SkASSERT(fCount > 0);
|
| SkOpSegment* segment = &fHead;
|
| + bool result = false;
|
| do {
|
| if (fState->angleCoincidence()) {
|
| segment->checkAngleCoin(coincidences, allocator);
|
| - } else {
|
| - segment->missingCoincidence(coincidences, allocator);
|
| + } else if (segment->missingCoincidence(coincidences, allocator)) {
|
| + result = true;
|
| + // FIXME: trying again loops forever in issue3651_6
|
| + // The continue below is speculative -- once there's an actual case that requires it,
|
| + // add the plumbing necessary to look for another missing coincidence in the same segment
|
| + // continue; // try again in case another missing coincidence is further along
|
| }
|
| - } while ((segment = segment->next()));
|
| + segment = segment->next();
|
| + } while (segment);
|
| + return result;
|
| }
|
|
|
| bool moveMultiples() {
|
|
|