Index: src/pathops/SkIntersections.h |
diff --git a/src/pathops/SkIntersections.h b/src/pathops/SkIntersections.h |
index 26a1d1a559e56c132418ba71da9e5eeb6c2c2604..389098d84e67136dff4160f9d2635879e7fc4c71 100644 |
--- a/src/pathops/SkIntersections.h |
+++ b/src/pathops/SkIntersections.h |
@@ -23,6 +23,7 @@ public: |
sk_bzero(fPt, sizeof(fPt)); |
sk_bzero(fT, sizeof(fT)); |
sk_bzero(fIsCoincident, sizeof(fIsCoincident)); |
+ sk_bzero(&fIsNear, sizeof(fIsNear)); |
reset(); |
} |
@@ -40,6 +41,7 @@ public: |
memcpy(fPt, i.fPt, sizeof(fPt)); |
memcpy(fT, i.fT, sizeof(fT)); |
memcpy(fIsCoincident, i.fIsCoincident, sizeof(fIsCoincident)); |
+ memcpy(&fIsNear, &i.fIsNear, sizeof(fIsNear)); |
fUsed = i.fUsed; |
fSwap = i.fSwap; |
SkDEBUGCODE(fDepth = i.fDepth); |
@@ -109,6 +111,10 @@ public: |
return (fIsCoincident[0] & 1 << index) != 0; |
} |
+ bool isNear(int index) { |
+ return (fIsNear & 1 << index) != 0; |
+ } |
+ |
int lineHorizontal(const SkPoint a[2], SkScalar left, SkScalar right, SkScalar y, |
bool flipped) { |
SkDLine line; |
@@ -206,6 +212,7 @@ public: |
int horizontal(const SkDCubic&, double left, double right, double y, double tRange[3]); |
// FIXME : does not respect swap |
int insert(double one, double two, const SkDPoint& pt); |
+ void insertNear(double one, double two, const SkDPoint& pt); |
// start if index == 0 : end if index == 1 |
void insertCoincident(double one, double two, const SkDPoint& pt); |
int intersect(const SkDLine&, const SkDLine&); |
@@ -243,9 +250,10 @@ private: |
// used by addCoincident to remove ordinary intersections in range |
// void remove(double one, double two, const SkDPoint& startPt, const SkDPoint& endPt); |
- SkDPoint fPt[9]; |
+ SkDPoint fPt[9]; // FIXME: since scans store points as SkPoint, this should also |
double fT[2][9]; |
- uint16_t fIsCoincident[2]; // bit arrays, one bit set for each coincident T |
+ uint16_t fIsCoincident[2]; // bit set for each curve's coincident T |
+ uint16_t fIsNear; // bit set for each T if 2nd curve's point is near but not equal to 1st |
unsigned char fUsed; |
bool fAllowNear; |
bool fSwap; |