| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 #ifndef SkOpSegment_DEFINE | 7 #ifndef SkOpSegment_DEFINE |
| 8 #define SkOpSegment_DEFINE | 8 #define SkOpSegment_DEFINE |
| 9 | 9 |
| 10 #include "SkOpAngle.h" | 10 #include "SkOpAngle.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 | 108 |
| 109 const SkPathOpsBounds& bounds() const { | 109 const SkPathOpsBounds& bounds() const { |
| 110 return fBounds; | 110 return fBounds; |
| 111 } | 111 } |
| 112 | 112 |
| 113 void bumpCount() { | 113 void bumpCount() { |
| 114 ++fCount; | 114 ++fCount; |
| 115 } | 115 } |
| 116 | 116 |
| 117 void calcAngles(SkChunkAlloc*); | 117 void calcAngles(SkChunkAlloc*); |
| 118 void checkAngleCoin(SkOpCoincidence* coincidences, SkChunkAlloc* allocator); | |
| 119 void checkNearCoincidence(SkOpAngle* ); | |
| 120 bool collapsed() const; | 118 bool collapsed() const; |
| 121 static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle, | 119 static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle, |
| 122 SkOpAngle::IncludeType ); | 120 SkOpAngle::IncludeType ); |
| 123 static void ComputeOneSumReverse(SkOpAngle* baseAngle, SkOpAngle* nextAngle, | 121 static void ComputeOneSumReverse(SkOpAngle* baseAngle, SkOpAngle* nextAngle, |
| 124 SkOpAngle::IncludeType ); | 122 SkOpAngle::IncludeType ); |
| 125 int computeSum(SkOpSpanBase* start, SkOpSpanBase* end, SkOpAngle::IncludeTyp
e includeType); | 123 int computeSum(SkOpSpanBase* start, SkOpSpanBase* end, SkOpAngle::IncludeTyp
e includeType); |
| 126 | 124 |
| 127 SkOpContour* contour() const { | 125 SkOpContour* contour() const { |
| 128 return fContour; | 126 return fContour; |
| 129 } | 127 } |
| 130 | 128 |
| 131 int count() const { | 129 int count() const { |
| 132 return fCount; | 130 return fCount; |
| 133 } | 131 } |
| 134 | 132 |
| 135 void debugAddAngle(double startT, double endT, SkChunkAlloc*); | 133 void debugAddAngle(double startT, double endT, SkChunkAlloc*); |
| 134 void debugAddAlignIntersection(const char* id, SkPathOpsDebug::GlitchLog* gl
itches, |
| 135 const SkOpPtT& endPtT, const SkPoint& oldPt, |
| 136 const SkOpContourHead* ) const; |
| 137 |
| 138 void debugAddAlignIntersections(const char* id, SkPathOpsDebug::GlitchLog* g
litches, |
| 139 SkOpContourHead* contourList) const { |
| 140 this->debugAddAlignIntersection(id, glitches, *fHead.ptT(), fOriginal[0]
, contourList); |
| 141 this->debugAddAlignIntersection(id, glitches, *fTail.ptT(), fOriginal[1]
, contourList); |
| 142 } |
| 143 |
| 144 bool debugAddMissing(double t, const SkOpSegment* opp) const; |
| 145 void debugAlign(const char* id, SkPathOpsDebug::GlitchLog* glitches) const; |
| 136 const SkOpAngle* debugAngle(int id) const; | 146 const SkOpAngle* debugAngle(int id) const; |
| 147 #if DEBUG_ANGLE |
| 148 void debugCheckAngleCoin() const; |
| 149 #endif |
| 150 void debugCheckHealth(const char* id, SkPathOpsDebug::GlitchLog* ) const; |
| 137 SkOpContour* debugContour(int id); | 151 SkOpContour* debugContour(int id); |
| 152 void debugFindCollapsed(const char* id, SkPathOpsDebug::GlitchLog* glitches)
const; |
| 138 | 153 |
| 139 int debugID() const { | 154 int debugID() const { |
| 140 return SkDEBUGRELEASE(fID, -1); | 155 return SkDEBUGRELEASE(fID, -1); |
| 141 } | 156 } |
| 142 | 157 |
| 143 SkOpAngle* debugLastAngle(); | 158 SkOpAngle* debugLastAngle(); |
| 159 void debugMissingCoincidence(const char* id, SkPathOpsDebug::GlitchLog* glit
ches, |
| 160 const SkOpCoincidence* coincidences) const; |
| 161 void debugMoveMultiples(const char* id, SkPathOpsDebug::GlitchLog* glitches)
const; |
| 162 void debugMoveNearby(const char* id, SkPathOpsDebug::GlitchLog* glitches) co
nst; |
| 144 const SkOpPtT* debugPtT(int id) const; | 163 const SkOpPtT* debugPtT(int id) const; |
| 145 void debugReset(); | 164 void debugReset(); |
| 146 const SkOpSegment* debugSegment(int id) const; | 165 const SkOpSegment* debugSegment(int id) const; |
| 147 | 166 |
| 148 #if DEBUG_ACTIVE_SPANS | 167 #if DEBUG_ACTIVE_SPANS |
| 149 void debugShowActiveSpans() const; | 168 void debugShowActiveSpans() const; |
| 150 #endif | 169 #endif |
| 151 #if DEBUG_MARK_DONE | 170 #if DEBUG_MARK_DONE |
| 152 void debugShowNewWinding(const char* fun, const SkOpSpan* span, int winding)
; | 171 void debugShowNewWinding(const char* fun, const SkOpSpan* span, int winding)
; |
| 153 void debugShowNewWinding(const char* fun, const SkOpSpan* span, int winding,
int oppWinding); | 172 void debugShowNewWinding(const char* fun, const SkOpSpan* span, int winding,
int oppWinding); |
| 154 #endif | 173 #endif |
| 155 | 174 |
| 156 const SkOpSpanBase* debugSpan(int id) const; | 175 const SkOpSpanBase* debugSpan(int id) const; |
| 157 void debugValidate() const; | 176 void debugValidate() const; |
| 158 void detach(const SkOpSpan* ); | 177 void detach(const SkOpSpan* ); |
| 159 double distSq(double t, SkOpAngle* opp); | 178 double distSq(double t, const SkOpAngle* opp) const; |
| 160 | 179 |
| 161 bool done() const { | 180 bool done() const { |
| 162 SkASSERT(fDoneCount <= fCount); | 181 SkASSERT(fDoneCount <= fCount); |
| 163 return fDoneCount == fCount; | 182 return fDoneCount == fCount; |
| 164 } | 183 } |
| 165 | 184 |
| 166 bool done(const SkOpAngle* angle) const { | 185 bool done(const SkOpAngle* angle) const { |
| 167 return angle->start()->starter(angle->end())->done(); | 186 return angle->start()->starter(angle->end())->done(); |
| 168 } | 187 } |
| 169 | 188 |
| 170 SkDPoint dPtAtT(double mid) const { | 189 SkDPoint dPtAtT(double mid) const { |
| 171 return (*CurveDPointAtT[fVerb])(fPts, fWeight, mid); | 190 return (*CurveDPointAtT[fVerb])(fPts, fWeight, mid); |
| 172 } | 191 } |
| 173 | 192 |
| 174 SkDVector dSlopeAtT(double mid) const { | 193 SkDVector dSlopeAtT(double mid) const { |
| 175 return (*CurveDSlopeAtT[fVerb])(fPts, fWeight, mid); | 194 return (*CurveDSlopeAtT[fVerb])(fPts, fWeight, mid); |
| 176 } | 195 } |
| 177 | 196 |
| 178 void dump() const; | 197 void dump() const; |
| 179 void dumpAll() const; | 198 void dumpAll() const; |
| 180 void dumpAngles() const; | 199 void dumpAngles() const; |
| 181 void dumpCoin() const; | 200 void dumpCoin() const; |
| 182 void dumpPts() const; | 201 void dumpPts(const char* prefix = "seg") const; |
| 183 void dumpPtsInner() const; | 202 void dumpPtsInner(const char* prefix = "seg") const; |
| 184 | 203 |
| 185 void findCollapsed(); | 204 void findCollapsed(); |
| 186 SkOpSegment* findNextOp(SkTDArray<SkOpSpanBase*>* chase, SkOpSpanBase** next
Start, | 205 SkOpSegment* findNextOp(SkTDArray<SkOpSpanBase*>* chase, SkOpSpanBase** next
Start, |
| 187 SkOpSpanBase** nextEnd, bool* unsortable, SkPathOp
op, | 206 SkOpSpanBase** nextEnd, bool* unsortable, SkPathOp
op, |
| 188 int xorMiMask, int xorSuMask); | 207 int xorMiMask, int xorSuMask); |
| 189 SkOpSegment* findNextWinding(SkTDArray<SkOpSpanBase*>* chase, SkOpSpanBase**
nextStart, | 208 SkOpSegment* findNextWinding(SkTDArray<SkOpSpanBase*>* chase, SkOpSpanBase**
nextStart, |
| 190 SkOpSpanBase** nextEnd, bool* unsortable); | 209 SkOpSpanBase** nextEnd, bool* unsortable); |
| 191 SkOpSegment* findNextXor(SkOpSpanBase** nextStart, SkOpSpanBase** nextEnd, b
ool* unsortable); | 210 SkOpSegment* findNextXor(SkOpSpanBase** nextStart, SkOpSpanBase** nextEnd, b
ool* unsortable); |
| 192 SkOpSpan* findSortableTop(SkOpContour* ); | 211 SkOpSpan* findSortableTop(SkOpContour* ); |
| 193 SkOpGlobalState* globalState() const; | 212 SkOpGlobalState* globalState() const; |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 SkPathOpsBounds fBounds; // tight bounds | 417 SkPathOpsBounds fBounds; // tight bounds |
| 399 SkScalar fWeight; | 418 SkScalar fWeight; |
| 400 int fCount; // number of spans (one for a non-intersecting segment) | 419 int fCount; // number of spans (one for a non-intersecting segment) |
| 401 int fDoneCount; // number of processed spans (zero initially) | 420 int fDoneCount; // number of processed spans (zero initially) |
| 402 SkPath::Verb fVerb; | 421 SkPath::Verb fVerb; |
| 403 bool fVisited; // used by missing coincidence check | 422 bool fVisited; // used by missing coincidence check |
| 404 SkDEBUGCODE(int fID); | 423 SkDEBUGCODE(int fID); |
| 405 }; | 424 }; |
| 406 | 425 |
| 407 #endif | 426 #endif |
| OLD | NEW |