| Index: src/pathops/SkOpSpan.h
|
| diff --git a/src/pathops/SkOpSpan.h b/src/pathops/SkOpSpan.h
|
| index 96a97e07320547466d2c12b7f436113ba2055114..7c7bf7c186482f42435f2af727c2bae983d18791 100644
|
| --- a/src/pathops/SkOpSpan.h
|
| +++ b/src/pathops/SkOpSpan.h
|
| @@ -28,6 +28,8 @@ public:
|
| kIsDuplicate = 1
|
| };
|
|
|
| + const SkOpPtT* active() const;
|
| +
|
| // please keep in sync with debugAddOpp()
|
| void addOpp(SkOpPtT* opp, SkOpPtT* oppPrev) {
|
| SkOpPtT* oldNext = this->fNext;
|
| @@ -55,7 +57,7 @@ public:
|
| const SkOpCoincidence* debugCoincidence() const;
|
| bool debugContains(const SkOpPtT* ) const;
|
| const SkOpPtT* debugContains(const SkOpSegment* check) const;
|
| - SkOpContour* debugContour(int id);
|
| + SkOpContour* debugContour(int id) const;
|
| int debugLoopLimit(bool report) const;
|
| bool debugMatchID(int id) const;
|
| const SkOpPtT* debugOppPrev(const SkOpPtT* opp) const;
|
| @@ -98,7 +100,8 @@ public:
|
|
|
| bool onEnd() const;
|
|
|
| - SkOpPtT* oppPrev(SkOpPtT* opp) const {
|
| + // returns nullptr if this is already in the opp ptT loop
|
| + SkOpPtT* oppPrev(const SkOpPtT* opp) const {
|
| // find the fOpp ptr to opp
|
| SkOpPtT* oppPrev = opp->fNext;
|
| if (oppPrev == this) {
|
| @@ -176,7 +179,8 @@ protected:
|
|
|
| class SkOpSpanBase {
|
| public:
|
| - void addOppAndMerge(SkOpSpanBase* );
|
| + SkOpSpanBase* active();
|
| + void addOpp(SkOpSpanBase* opp);
|
|
|
| void bumpSpanAdds() {
|
| ++fSpanAdds;
|
| @@ -192,6 +196,7 @@ public:
|
| return fCoinEnd;
|
| }
|
|
|
| + bool collapsed(double s, double e) const;
|
| bool contains(const SkOpSpanBase* ) const;
|
| const SkOpPtT* contains(const SkOpSegment* ) const;
|
|
|
| @@ -209,11 +214,6 @@ public:
|
| bool containsCoinEnd(const SkOpSegment* ) const;
|
| SkOpContour* contour() const;
|
|
|
| -#if DEBUG_COINCIDENCE_VERBOSE
|
| - void debugAddOppAndMerge(const char* id, SkPathOpsDebug::GlitchLog* , const SkOpSpanBase* ,
|
| - bool* del1, bool* del2) const;
|
| -#endif
|
| -
|
| int debugBumpCount() {
|
| return SkDEBUGRELEASE(++fCount, -1);
|
| }
|
| @@ -222,6 +222,9 @@ public:
|
| return SkDEBUGRELEASE(fID, -1);
|
| }
|
|
|
| +#if DEBUG_COINCIDENCE_VERBOSE
|
| + void debugAddOpp(const char* id, SkPathOpsDebug::GlitchLog* , const SkOpSpanBase* opp) const;
|
| +#endif
|
| bool debugAlignedEnd(double t, const SkPoint& pt) const;
|
| bool debugAlignedInner() const;
|
| const SkOpAngle* debugAngle(int id) const;
|
| @@ -230,20 +233,25 @@ public:
|
| #endif
|
| const SkOpCoincidence* debugCoincidence() const;
|
| bool debugCoinEndLoopCheck() const;
|
| - SkOpContour* debugContour(int id);
|
| + SkOpContour* debugContour(int id) const;
|
| #ifdef SK_DEBUG
|
| - bool debugDeleted() const { return fDeleted; }
|
| + bool debugDeleted() const { return fDebugDeleted; }
|
| #endif
|
| #if DEBUG_COINCIDENCE_VERBOSE
|
| void debugInsertCoinEnd(const char* id, SkPathOpsDebug::GlitchLog* ,
|
| const SkOpSpanBase* ) const;
|
| void debugMergeContained(const char* id, SkPathOpsDebug::GlitchLog* ,
|
| const SkPathOpsBounds& bounds, bool* deleted) const;
|
| + void debugMergeMatches(const char* id, SkPathOpsDebug::GlitchLog* log,
|
| + const SkOpSpanBase* opp) const;
|
| #endif
|
| const SkOpPtT* debugPtT(int id) const;
|
| void debugResetCoinT() const;
|
| const SkOpSegment* debugSegment(int id) const;
|
| void debugSetCoinT(int ) const;
|
| +#ifdef SK_DEBUG
|
| + void debugSetDeleted() { fDebugDeleted = true; }
|
| +#endif
|
| const SkOpSpanBase* debugSpan(int id) const;
|
| const SkOpSpan* debugStarter(SkOpSpanBase const** endPtr) const;
|
| SkOpGlobalState* globalState() const;
|
| @@ -285,6 +293,7 @@ public:
|
|
|
| void merge(SkOpSpan* span);
|
| void mergeContained(const SkPathOpsBounds& bounds);
|
| + void mergeMatches(SkOpSpanBase* opp);
|
|
|
| const SkOpSpan* prev() const {
|
| return fPrev;
|
| @@ -403,7 +412,7 @@ protected: // no direct access to internals to avoid treating a span base as a
|
| bool fChased; // set after span has been added to chase array
|
| SkDEBUGCODE(int fCount); // number of pt/t pairs added
|
| SkDEBUGCODE(int fID);
|
| - SkDEBUGCODE(bool fDeleted); // set when span was merged with another span
|
| + SkDEBUGCODE(bool fDebugDeleted); // set when span was merged with another span
|
| };
|
|
|
| class SkOpSpan : public SkOpSpanBase {
|
| @@ -445,15 +454,14 @@ public:
|
| void debugInsertCoincidence(const char* , SkPathOpsDebug::GlitchLog* ,
|
| const SkOpSegment* , bool flipped) const;
|
| #endif
|
| - void release(const SkOpPtT* );
|
| + void dumpCoin() const;
|
| + bool dumpSpan() const;
|
|
|
| bool done() const {
|
| SkASSERT(!final());
|
| return fDone;
|
| }
|
|
|
| - void dumpCoin() const;
|
| - bool dumpSpan() const;
|
| void init(SkOpSegment* parent, SkOpSpan* prev, double t, const SkPoint& pt);
|
| bool insertCoincidence(const SkOpSegment* , bool flipped);
|
|
|
| @@ -496,6 +504,8 @@ public:
|
| return fOppValue;
|
| }
|
|
|
| + void release(const SkOpPtT* );
|
| +
|
| SkOpPtT* setCoinStart(SkOpSpan* oldCoinStart, SkOpSegment* oppSegment);
|
|
|
| void setDone(bool done) {
|
|
|