Index: src/pathops/SkOpSegment.h |
diff --git a/src/pathops/SkOpSegment.h b/src/pathops/SkOpSegment.h |
index 38de40617aa0fe206d933cdfe836840820360431..6873203b25d0f7a9657a5cd353ef8d086b7f3537 100644 |
--- a/src/pathops/SkOpSegment.h |
+++ b/src/pathops/SkOpSegment.h |
@@ -45,6 +45,13 @@ public: |
bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end); |
bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* sumWinding); |
+ void addAlignIntersection(SkOpPtT& endPtT, SkPoint& oldPt, |
+ SkOpContourHead* contourList, SkChunkAlloc* allocator); |
+ |
+ void addAlignIntersections(SkOpContourHead* contourList, SkChunkAlloc* allocator) { |
+ this->addAlignIntersection(*fHead.ptT(), fOriginal[0], contourList, allocator); |
+ this->addAlignIntersection(*fTail.ptT(), fOriginal[1], contourList, allocator); |
+ } |
SkOpSegment* addConic(SkPoint pts[3], SkScalar weight, SkOpContour* parent) { |
init(pts, weight, parent, SkPath::kConic_Verb); |
@@ -244,7 +251,7 @@ public: |
bool markWinding(SkOpSpan* , int winding); |
bool markWinding(SkOpSpan* , int winding, int oppWinding); |
bool match(const SkOpPtT* span, const SkOpSegment* parent, double t, const SkPoint& pt) const; |
- void missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc* allocator); |
+ bool missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc* allocator); |
void moveMultiples(); |
void moveNearby(); |
@@ -346,6 +353,9 @@ public: |
return &fTail; |
} |
+ bool testForCoincidence(const SkOpPtT* priorPtT, const SkOpPtT* ptT, const SkOpSpanBase* prior, |
+ const SkOpSpanBase* spanBase, const SkOpSegment* opp, SkScalar flatnessLimit) const; |
+ |
void undoneSpan(SkOpSpanBase** start, SkOpSpanBase** end); |
int updateOppWinding(const SkOpSpanBase* start, const SkOpSpanBase* end) const; |
int updateOppWinding(const SkOpAngle* angle) const; |
@@ -386,6 +396,7 @@ private: |
SkOpContour* fContour; |
SkOpSegment* fNext; // forward-only linked list used by contour to walk the segments |
const SkOpSegment* fPrev; |
+ SkPoint fOriginal[2]; // if aligned, the original unaligned points are here |
SkPoint* fPts; // pointer into array of points owned by edge builder that may be tweaked |
SkPathOpsBounds fBounds; // tight bounds |
SkScalar fWeight; |