Index: src/pathops/SkOpSpan.h |
diff --git a/src/pathops/SkOpSpan.h b/src/pathops/SkOpSpan.h |
index 9b44247341d903f15cf2c14f3406abcff43692b4..ec62246c313dc0c1f1c30237dd83dfb619c06519 100644 |
--- a/src/pathops/SkOpSpan.h |
+++ b/src/pathops/SkOpSpan.h |
@@ -8,6 +8,7 @@ |
#define SkOpSpan_DEFINED |
#include "SkPathOpsDebug.h" |
+#include "SkPathOpsTypes.h" |
#include "SkPoint.h" |
class SkChunkAlloc; |
@@ -47,6 +48,8 @@ public: |
} |
bool alias() const; |
+ bool contains(const SkOpPtT* ) const; |
+ SkOpPtT* contains(const SkOpSegment* ); |
SkOpContour* contour() const; |
int debugID() const { |
@@ -67,6 +70,8 @@ public: |
return fDeleted; |
} |
+ SkOpPtT* doppelganger(); |
+ |
bool duplicate() const { |
return fDuplicatePt; |
} |
@@ -75,6 +80,7 @@ public: |
void dumpAll() const; |
void dumpBase() const; |
+ SkOpPtT* find(SkOpSegment* ); |
void init(SkOpSpanBase* , double t, const SkPoint& , bool dup); |
void insert(SkOpPtT* span) { |
@@ -92,6 +98,25 @@ public: |
} |
bool onEnd() const; |
+ |
+ static bool Overlaps(SkOpPtT* s1, SkOpPtT* e1, SkOpPtT* s2, SkOpPtT* e2, |
+ SkOpPtT** sOut, SkOpPtT** eOut) { |
+ SkOpPtT* start1 = s1->fT < e1->fT ? s1 : e1; |
+ SkOpPtT* start2 = s2->fT < e2->fT ? s2 : e2; |
+ *sOut = between(s1->fT, start2->fT, e1->fT) ? start2 |
+ : between(s2->fT, start1->fT, e2->fT) ? start1 : NULL; |
+ SkOpPtT* end1 = s1->fT < e1->fT ? e1 : s1; |
+ SkOpPtT* end2 = s2->fT < e2->fT ? e2 : s2; |
+ *eOut = between(s1->fT, end2->fT, e1->fT) ? end2 |
+ : between(s2->fT, end1->fT, e2->fT) ? end1 : NULL; |
+ if (*sOut == *eOut) { |
+ SkASSERT(start1->fT >= end2->fT || start2->fT >= end1->fT); |
+ return false; |
+ } |
+ SkASSERT(!*sOut || *sOut != *eOut); |
+ return *sOut && *eOut; |
+ } |
+ |
SkOpPtT* prev(); |
SkOpPtT* remove(); |
void removeNext(SkOpPtT* kept); |
@@ -112,6 +137,10 @@ public: |
return fSpan; |
} |
+ const SkOpPtT* starter(const SkOpPtT* end) const { |
+ return fT < end->fT ? this : end; |
+ } |
+ |
double fT; |
SkPoint fPt; // cache of point value at this t |
protected: |