Index: src/pathops/SkOpSegment.h |
diff --git a/src/pathops/SkOpSegment.h b/src/pathops/SkOpSegment.h |
index c1c6e696feb436b1847e97d6d38429144b5a0e13..65ed95c6913e8dbbae378876a1f9cb8406f0b986 100644 |
--- a/src/pathops/SkOpSegment.h |
+++ b/src/pathops/SkOpSegment.h |
@@ -13,6 +13,7 @@ |
#include "SkPathOpsBounds.h" |
#include "SkPathOpsCurve.h" |
+struct SkDCurve; |
class SkOpCoincidence; |
class SkOpContour; |
class SkPathWriter; |
@@ -44,9 +45,14 @@ public: |
bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end); |
bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* sumWinding); |
+ void addConic(SkPoint pts[3], SkScalar weight, SkOpContour* parent) { |
+ init(pts, weight, parent, SkPath::kConic_Verb); |
+ fBounds.setConicBounds(pts, weight); |
+ } |
+ |
void addCubic(SkPoint pts[4], SkOpContour* parent) { |
- init(pts, parent, SkPath::kCubic_Verb); |
- fBounds.setCubicBounds(pts); |
+ init(pts, 1, parent, SkPath::kCubic_Verb); |
+ fBounds.setCubicBounds(pts, 1); |
} |
void addCurveTo(const SkOpSpanBase* start, const SkOpSpanBase* end, SkPathWriter* path, |
@@ -60,7 +66,7 @@ public: |
} |
void addLine(SkPoint pts[2], SkOpContour* parent) { |
- init(pts, parent, SkPath::kLine_Verb); |
+ init(pts, 1, parent, SkPath::kLine_Verb); |
fBounds.set(pts, 2); |
} |
@@ -77,8 +83,8 @@ public: |
} |
void addQuad(SkPoint pts[3], SkOpContour* parent) { |
- init(pts, parent, SkPath::kQuad_Verb); |
- fBounds.setQuadBounds(pts); |
+ init(pts, 1, parent, SkPath::kQuad_Verb); |
+ fBounds.setQuadBounds(pts, 1); |
} |
SkOpPtT* addT(double t, AllowAlias , SkChunkAlloc* ); |
@@ -120,7 +126,7 @@ public: |
SkOpContour* debugContour(int id); |
int debugID() const { |
- return PATH_OPS_DEBUG_RELEASE(fID, -1); |
+ return SkDEBUGRELEASE(fID, -1); |
} |
#if DEBUG_SWAP_TOP |
@@ -155,11 +161,11 @@ public: |
} |
SkDPoint dPtAtT(double mid) const { |
- return (*CurveDPointAtT[SkPathOpsVerbToPoints(fVerb)])(fPts, mid); |
+ return (*CurveDPointAtT[fVerb])(fPts, fWeight, mid); |
} |
SkDVector dSlopeAtT(double mid) const { |
- return (*CurveDSlopeAtT[SkPathOpsVerbToPoints(fVerb)])(fPts, mid); |
+ return (*CurveDSlopeAtT[fVerb])(fPts, fWeight, mid); |
} |
void dump() const; |
@@ -186,7 +192,7 @@ public: |
return &fHead; |
} |
- void init(SkPoint pts[], SkOpContour* parent, SkPath::Verb verb); |
+ void init(SkPoint pts[], SkScalar weight, SkOpContour* parent, SkPath::Verb verb); |
void initWinding(SkOpSpanBase* start, SkOpSpanBase* end, |
SkOpAngle::IncludeType angleIncludeType); |
bool initWinding(SkOpSpanBase* start, SkOpSpanBase* end, double tHit, int winding, |
@@ -220,7 +226,7 @@ public: |
} |
bool isVertical(SkOpSpanBase* start, SkOpSpanBase* end) const { |
- return (*CurveIsVertical[SkPathOpsVerbToPoints(fVerb)])(fPts, start->t(), end->t()); |
+ return (*CurveIsVertical[fVerb])(fPts, fWeight, start->t(), end->t()); |
} |
bool isXor() const; |
@@ -266,7 +272,7 @@ public: |
} |
SkPoint ptAtT(double mid) const { |
- return (*CurvePointAtT[SkPathOpsVerbToPoints(fVerb)])(fPts, mid); |
+ return (*CurvePointAtT[fVerb])(fPts, fWeight, mid); |
} |
const SkPoint* pts() const { |
@@ -329,8 +335,8 @@ public: |
return start->t() < end->t() ? start->upCast()->toAngle() : start->fromAngle(); |
} |
- bool subDivide(const SkOpSpanBase* start, const SkOpSpanBase* end, SkPoint edge[4]) const; |
- bool subDivide(const SkOpSpanBase* start, const SkOpSpanBase* end, SkDCubic* result) const; |
+ bool subDivide(const SkOpSpanBase* start, const SkOpSpanBase* end, SkDCurve* result) const; |
+ bool subDivide(const SkOpSpanBase* start, const SkOpSpanBase* end, SkOpCurve* result) const; |
void subDivideBounds(const SkOpSpanBase* start, const SkOpSpanBase* end, |
SkPathOpsBounds* bounds) const; |
@@ -360,6 +366,10 @@ public: |
return fVerb; |
} |
+ SkScalar weight() const { |
+ return fWeight; |
+ } |
+ |
int windingAtT(double tHit, const SkOpSpan* span, bool crossOpp, SkScalar* dx) const; |
int windSum(const SkOpAngle* angle) const; |
@@ -375,11 +385,12 @@ private: |
const SkOpSegment* fPrev; |
SkPoint* fPts; // pointer into array of points owned by edge builder that may be tweaked |
SkPathOpsBounds fBounds; // tight bounds |
+ SkScalar fWeight; |
int fCount; // number of spans (one for a non-intersecting segment) |
int fDoneCount; // number of processed spans (zero initially) |
SkPath::Verb fVerb; |
bool fVisited; // used by missing coincidence check |
- PATH_OPS_DEBUG_CODE(int fID); |
+ SkDEBUGCODE(int fID); |
}; |
#endif |