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 27 matching lines...) Expand all Loading... |
38 SkOpSpanBase** endPtr, bool* done); | 38 SkOpSpanBase** endPtr, bool* done); |
39 SkOpAngle* activeAngleOther(SkOpSpanBase* start, SkOpSpanBase** startPtr, | 39 SkOpAngle* activeAngleOther(SkOpSpanBase* start, SkOpSpanBase** startPtr, |
40 SkOpSpanBase** endPtr, bool* done); | 40 SkOpSpanBase** endPtr, bool* done); |
41 bool activeOp(SkOpSpanBase* start, SkOpSpanBase* end, int xorMiMask, int xor
SuMask, | 41 bool activeOp(SkOpSpanBase* start, SkOpSpanBase* end, int xorMiMask, int xor
SuMask, |
42 SkPathOp op); | 42 SkPathOp op); |
43 bool activeOp(int xorMiMask, int xorSuMask, SkOpSpanBase* start, SkOpSpanBas
e* end, SkPathOp op, | 43 bool activeOp(int xorMiMask, int xorSuMask, SkOpSpanBase* start, SkOpSpanBas
e* end, SkPathOp op, |
44 int* sumMiWinding, int* sumSuWinding); | 44 int* sumMiWinding, int* sumSuWinding); |
45 | 45 |
46 bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end); | 46 bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end); |
47 bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* sumWinding); | 47 bool activeWinding(SkOpSpanBase* start, SkOpSpanBase* end, int* sumWinding); |
| 48 void addAlignIntersection(SkOpPtT& endPtT, SkPoint& oldPt, |
| 49 SkOpContourHead* contourList, SkChunkAlloc* allocator); |
| 50 |
| 51 void addAlignIntersections(SkOpContourHead* contourList, SkChunkAlloc* alloc
ator) { |
| 52 this->addAlignIntersection(*fHead.ptT(), fOriginal[0], contourList, allo
cator); |
| 53 this->addAlignIntersection(*fTail.ptT(), fOriginal[1], contourList, allo
cator); |
| 54 } |
48 | 55 |
49 SkOpSegment* addConic(SkPoint pts[3], SkScalar weight, SkOpContour* parent)
{ | 56 SkOpSegment* addConic(SkPoint pts[3], SkScalar weight, SkOpContour* parent)
{ |
50 init(pts, weight, parent, SkPath::kConic_Verb); | 57 init(pts, weight, parent, SkPath::kConic_Verb); |
51 SkDCurve curve; | 58 SkDCurve curve; |
52 curve.fConic.set(pts, weight); | 59 curve.fConic.set(pts, weight); |
53 curve.setConicBounds(pts, weight, 0, 1, &fBounds); | 60 curve.setConicBounds(pts, weight, 0, 1, &fBounds); |
54 return this; | 61 return this; |
55 } | 62 } |
56 | 63 |
57 SkOpSegment* addCubic(SkPoint pts[4], SkOpContour* parent) { | 64 SkOpSegment* addCubic(SkPoint pts[4], SkOpContour* parent) { |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 SkOpSpanBase** lastPtr); | 244 SkOpSpanBase** lastPtr); |
238 bool markAndChaseWinding(SkOpSpanBase* start, SkOpSpanBase* end, int winding
, | 245 bool markAndChaseWinding(SkOpSpanBase* start, SkOpSpanBase* end, int winding
, |
239 int oppWinding, SkOpSpanBase** lastPtr); | 246 int oppWinding, SkOpSpanBase** lastPtr); |
240 SkOpSpanBase* markAngle(int maxWinding, int sumWinding, const SkOpAngle* ang
le); | 247 SkOpSpanBase* markAngle(int maxWinding, int sumWinding, const SkOpAngle* ang
le); |
241 SkOpSpanBase* markAngle(int maxWinding, int sumWinding, int oppMaxWinding, i
nt oppSumWinding, | 248 SkOpSpanBase* markAngle(int maxWinding, int sumWinding, int oppMaxWinding, i
nt oppSumWinding, |
242 const SkOpAngle* angle); | 249 const SkOpAngle* angle); |
243 void markDone(SkOpSpan* ); | 250 void markDone(SkOpSpan* ); |
244 bool markWinding(SkOpSpan* , int winding); | 251 bool markWinding(SkOpSpan* , int winding); |
245 bool markWinding(SkOpSpan* , int winding, int oppWinding); | 252 bool markWinding(SkOpSpan* , int winding, int oppWinding); |
246 bool match(const SkOpPtT* span, const SkOpSegment* parent, double t, const S
kPoint& pt) const; | 253 bool match(const SkOpPtT* span, const SkOpSegment* parent, double t, const S
kPoint& pt) const; |
247 void missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc* allocat
or); | 254 bool missingCoincidence(SkOpCoincidence* coincidences, SkChunkAlloc* allocat
or); |
248 void moveMultiples(); | 255 void moveMultiples(); |
249 void moveNearby(); | 256 void moveNearby(); |
250 | 257 |
251 SkOpSegment* next() const { | 258 SkOpSegment* next() const { |
252 return fNext; | 259 return fNext; |
253 } | 260 } |
254 | 261 |
255 SkOpSegment* nextChase(SkOpSpanBase** , int* step, SkOpSpan** , SkOpSpanBase
** last) const; | 262 SkOpSegment* nextChase(SkOpSpanBase** , int* step, SkOpSpan** , SkOpSpanBase
** last) const; |
256 bool operand() const; | 263 bool operand() const; |
257 | 264 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 bool subDivide(const SkOpSpanBase* start, const SkOpSpanBase* end, SkOpCurve
* result) const; | 346 bool subDivide(const SkOpSpanBase* start, const SkOpSpanBase* end, SkOpCurve
* result) const; |
340 | 347 |
341 const SkOpSpanBase* tail() const { | 348 const SkOpSpanBase* tail() const { |
342 return &fTail; | 349 return &fTail; |
343 } | 350 } |
344 | 351 |
345 SkOpSpanBase* tail() { | 352 SkOpSpanBase* tail() { |
346 return &fTail; | 353 return &fTail; |
347 } | 354 } |
348 | 355 |
| 356 bool testForCoincidence(const SkOpPtT* priorPtT, const SkOpPtT* ptT, const S
kOpSpanBase* prior, |
| 357 const SkOpSpanBase* spanBase, const SkOpSegment* opp, SkScalar flatn
essLimit) const; |
| 358 |
349 void undoneSpan(SkOpSpanBase** start, SkOpSpanBase** end); | 359 void undoneSpan(SkOpSpanBase** start, SkOpSpanBase** end); |
350 int updateOppWinding(const SkOpSpanBase* start, const SkOpSpanBase* end) con
st; | 360 int updateOppWinding(const SkOpSpanBase* start, const SkOpSpanBase* end) con
st; |
351 int updateOppWinding(const SkOpAngle* angle) const; | 361 int updateOppWinding(const SkOpAngle* angle) const; |
352 int updateOppWindingReverse(const SkOpAngle* angle) const; | 362 int updateOppWindingReverse(const SkOpAngle* angle) const; |
353 int updateWinding(SkOpSpanBase* start, SkOpSpanBase* end); | 363 int updateWinding(SkOpSpanBase* start, SkOpSpanBase* end); |
354 int updateWinding(SkOpAngle* angle); | 364 int updateWinding(SkOpAngle* angle); |
355 int updateWindingReverse(const SkOpAngle* angle); | 365 int updateWindingReverse(const SkOpAngle* angle); |
356 | 366 |
357 static bool UseInnerWinding(int outerWinding, int innerWinding); | 367 static bool UseInnerWinding(int outerWinding, int innerWinding); |
358 | 368 |
(...skipping 20 matching lines...) Expand all Loading... |
379 SkPoint* writablePt(bool end) { | 389 SkPoint* writablePt(bool end) { |
380 return &fPts[end ? SkPathOpsVerbToPoints(fVerb) : 0]; | 390 return &fPts[end ? SkPathOpsVerbToPoints(fVerb) : 0]; |
381 } | 391 } |
382 | 392 |
383 private: | 393 private: |
384 SkOpSpan fHead; // the head span always has its t set to zero | 394 SkOpSpan fHead; // the head span always has its t set to zero |
385 SkOpSpanBase fTail; // the tail span always has its t set to one | 395 SkOpSpanBase fTail; // the tail span always has its t set to one |
386 SkOpContour* fContour; | 396 SkOpContour* fContour; |
387 SkOpSegment* fNext; // forward-only linked list used by contour to walk the
segments | 397 SkOpSegment* fNext; // forward-only linked list used by contour to walk the
segments |
388 const SkOpSegment* fPrev; | 398 const SkOpSegment* fPrev; |
| 399 SkPoint fOriginal[2]; // if aligned, the original unaligned points are here |
389 SkPoint* fPts; // pointer into array of points owned by edge builder that m
ay be tweaked | 400 SkPoint* fPts; // pointer into array of points owned by edge builder that m
ay be tweaked |
390 SkPathOpsBounds fBounds; // tight bounds | 401 SkPathOpsBounds fBounds; // tight bounds |
391 SkScalar fWeight; | 402 SkScalar fWeight; |
392 int fCount; // number of spans (one for a non-intersecting segment) | 403 int fCount; // number of spans (one for a non-intersecting segment) |
393 int fDoneCount; // number of processed spans (zero initially) | 404 int fDoneCount; // number of processed spans (zero initially) |
394 SkPath::Verb fVerb; | 405 SkPath::Verb fVerb; |
395 SkDCubic::CubicType fCubicType; | 406 SkDCubic::CubicType fCubicType; |
396 bool fTopsFound; | 407 bool fTopsFound; |
397 bool fVisited; // used by missing coincidence check | 408 bool fVisited; // used by missing coincidence check |
398 SkDEBUGCODE(int fID); | 409 SkDEBUGCODE(int fID); |
399 }; | 410 }; |
400 | 411 |
401 #endif | 412 #endif |
OLD | NEW |