Index: src/pathops/SkIntersectionHelper.h |
diff --git a/src/pathops/SkIntersectionHelper.h b/src/pathops/SkIntersectionHelper.h |
index 3569c934de14a29d17224d2330d8bdfb8ce3676f..c633fd02dfdffbb397a18206bd4fdd83a6b4bc54 100644 |
--- a/src/pathops/SkIntersectionHelper.h |
+++ b/src/pathops/SkIntersectionHelper.h |
@@ -5,6 +5,7 @@ |
* found in the LICENSE file. |
*/ |
#include "SkOpContour.h" |
+#include "SkOpSegment.h" |
#include "SkPath.h" |
#ifdef SK_DEBUG |
@@ -21,42 +22,9 @@ public: |
kCubic_Segment = SkPath::kCubic_Verb, |
}; |
- bool addCoincident(SkIntersectionHelper& other, const SkIntersections& ts, bool swap) { |
- return fContour->addCoincident(fIndex, other.fContour, other.fIndex, ts, swap); |
- } |
- |
- // FIXME: does it make sense to write otherIndex now if we're going to |
- // fix it up later? |
- void addOtherT(int index, double otherT, int otherIndex) { |
- fContour->addOtherT(fIndex, index, otherT, otherIndex); |
- } |
- |
- bool addPartialCoincident(SkIntersectionHelper& other, const SkIntersections& ts, int index, |
- bool swap) { |
- return fContour->addPartialCoincident(fIndex, other.fContour, other.fIndex, ts, index, |
- swap); |
- } |
- |
- // Avoid collapsing t values that are close to the same since |
- // we walk ts to describe consecutive intersections. Since a pair of ts can |
- // be nearly equal, any problems caused by this should be taken care |
- // of later. |
- // On the edge or out of range values are negative; add 2 to get end |
- int addT(const SkIntersectionHelper& other, const SkPoint& pt, double newT) { |
- return fContour->addT(fIndex, other.fContour, other.fIndex, pt, newT); |
- } |
- |
- int addSelfT(const SkPoint& pt, double newT) { |
- return fContour->addSelfT(fIndex, pt, newT); |
- } |
- |
bool advance() { |
- return ++fIndex < fLast; |
- } |
- |
- void alignTPt(SkIntersectionHelper& other, bool swap, int index, |
- SkIntersections* ts, SkPoint* point) { |
- fContour->alignTPt(fIndex, other.fContour, other.fIndex, swap, index, ts, point); |
+ fSegment = fSegment->next(); |
+ return fSegment != NULL; |
} |
SkScalar bottom() const { |
@@ -64,30 +32,15 @@ public: |
} |
const SkPathOpsBounds& bounds() const { |
- return fContour->segments()[fIndex].bounds(); |
+ return fSegment->bounds(); |
} |
- void init(SkOpContour* contour) { |
- fContour = contour; |
- fIndex = 0; |
- fLast = contour->segments().count(); |
- } |
- |
- bool isAdjacent(const SkIntersectionHelper& next) { |
- return fContour == next.fContour && fIndex + 1 == next.fIndex; |
+ SkOpContour* contour() const { |
+ return fSegment->contour(); |
} |
- bool isFirstLast(const SkIntersectionHelper& next) { |
- return fContour == next.fContour && fIndex == 0 |
- && next.fIndex == fLast - 1; |
- } |
- |
- bool isPartial(double t1, double t2, const SkDPoint& pt1, const SkDPoint& pt2) const { |
- const SkOpSegment& segment = fContour->segments()[fIndex]; |
- double mid = (t1 + t2) / 2; |
- SkDPoint midPtByT = segment.dPtAtT(mid); |
- SkDPoint midPtByAvg = SkDPoint::Mid(pt1, pt2); |
- return midPtByT.approximatelyPEqual(midPtByAvg); |
+ void init(SkOpContour* contour) { |
+ fSegment = contour->first(); |
} |
SkScalar left() const { |
@@ -95,41 +48,40 @@ public: |
} |
const SkPoint* pts() const { |
- return fContour->segments()[fIndex].pts(); |
+ return fSegment->pts(); |
} |
SkScalar right() const { |
return bounds().fRight; |
} |
+ SkOpSegment* segment() const { |
+ return fSegment; |
+ } |
+ |
SegmentType segmentType() const { |
- const SkOpSegment& segment = fContour->segments()[fIndex]; |
- SegmentType type = (SegmentType) segment.verb(); |
+ SegmentType type = (SegmentType) fSegment->verb(); |
if (type != kLine_Segment) { |
return type; |
} |
- if (segment.isHorizontal()) { |
+ if (fSegment->isHorizontal()) { |
return kHorizontalLine_Segment; |
} |
- if (segment.isVertical()) { |
+ if (fSegment->isVertical()) { |
return kVerticalLine_Segment; |
} |
return kLine_Segment; |
} |
bool startAfter(const SkIntersectionHelper& after) { |
- fIndex = after.fIndex; |
- return advance(); |
+ fSegment = after.fSegment->next(); |
+ return fSegment != NULL; |
} |
SkScalar top() const { |
return bounds().fTop; |
} |
- SkPath::Verb verb() const { |
- return fContour->segments()[fIndex].verb(); |
- } |
- |
SkScalar x() const { |
return bounds().fLeft; |
} |
@@ -147,10 +99,5 @@ public: |
} |
private: |
- // utility callable by the user from the debugger when the implementation code is linked in |
- void dump() const; |
- |
- SkOpContour* fContour; |
- int fIndex; |
- int fLast; |
+ SkOpSegment* fSegment; |
}; |