Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(813)

Unified Diff: src/pathops/SkIntersectionHelper.h

Issue 1037573004: cumulative pathops patch (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix pathopsinverse gm Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/pathops/SkDQuadLineIntersection.cpp ('k') | src/pathops/SkIntersections.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
};
« no previous file with comments | « src/pathops/SkDQuadLineIntersection.cpp ('k') | src/pathops/SkIntersections.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698