Index: src/pathops/SkOpContour.h |
diff --git a/src/pathops/SkOpContour.h b/src/pathops/SkOpContour.h |
index dd5dbb40ca638bfab0af2e642ba76d56febcbcf3..f8143cf5550a30a20364824d3114015dd9cacf29 100644 |
--- a/src/pathops/SkOpContour.h |
+++ b/src/pathops/SkOpContour.h |
@@ -207,10 +207,21 @@ public: |
SkDEBUGCODE(fID = globalState->nextContourID()); |
} |
+ int isCcw() const { |
+ return fCcw; |
+ } |
+ |
bool isXor() const { |
return fXor; |
} |
+ void markDone() { |
+ SkOpSegment* segment = &fHead; |
+ do { |
+ segment->markAllDone(); |
+ } while ((segment = segment->next())); |
+ } |
+ |
void missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc* allocator) { |
SkASSERT(fCount > 0); |
SkOpSegment* segment = &fHead; |
@@ -289,6 +300,18 @@ public: |
SkDEBUGCODE(fDebugIndent = 0); |
} |
+ void resetReverse() { |
+ SkOpContour* next = this; |
+ do { |
+ next->fCcw = -1; |
+ next->fReverse = false; |
+ } while ((next = next->next())); |
+ } |
+ |
+ bool reversed() const { |
+ return fReverse; |
+ } |
+ |
void setBounds() { |
SkASSERT(fCount > 0); |
const SkOpSegment* segment = &fHead; |
@@ -298,6 +321,10 @@ public: |
} |
} |
+ void setCcw(int ccw) { |
+ fCcw = ccw; |
+ } |
+ |
void setGlobalState(SkOpGlobalState* state) { |
fState = state; |
} |
@@ -315,6 +342,10 @@ public: |
fOppXor = isOppXor; |
} |
+ void setReverse() { |
+ fReverse = true; |
+ } |
+ |
void setXor(bool isXor) { |
fXor = isXor; |
} |
@@ -347,6 +378,7 @@ public: |
} while ((segment = segment->next())); |
} |
+ void toReversePath(SkPathWriter* path) const; |
void toPath(SkPathWriter* path) const; |
SkOpSegment* undoneSegment(SkOpSpanBase** startPtr, SkOpSpanBase** endPtr); |
@@ -356,11 +388,13 @@ private: |
SkOpSegment* fTail; |
SkOpContour* fNext; |
SkPathOpsBounds fBounds; |
+ int fCcw; |
int fCount; |
int fFirstSorted; |
bool fDone; // set by find top segment |
bool fTopsFound; |
bool fOperand; // true for the second argument to a binary operator |
+ bool fReverse; // true if contour should be reverse written to path (used only by fix winding) |
bool fXor; // set if original path had even-odd fill |
bool fOppXor; // set if opposite path had even-odd fill |
SkDEBUGCODE(int fID); |