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 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 void alignSpanState(int start, int end); | 295 void alignSpanState(int start, int end); |
296 bool betweenTs(int lesser, double testT, int greater) const; | 296 bool betweenTs(int lesser, double testT, int greater) const; |
297 void blindCancel(const SkCoincidence& coincidence, SkOpSegment* other); | 297 void blindCancel(const SkCoincidence& coincidence, SkOpSegment* other); |
298 void blindCoincident(const SkCoincidence& coincidence, SkOpSegment* other); | 298 void blindCoincident(const SkCoincidence& coincidence, SkOpSegment* other); |
299 bool calcAngles(); | 299 bool calcAngles(); |
300 double calcMissingTEnd(const SkOpSegment* ref, double loEnd, double min, dou
ble max, | 300 double calcMissingTEnd(const SkOpSegment* ref, double loEnd, double min, dou
ble max, |
301 double hiEnd, const SkOpSegment* other, int thisEnd); | 301 double hiEnd, const SkOpSegment* other, int thisEnd); |
302 double calcMissingTStart(const SkOpSegment* ref, double loEnd, double min, d
ouble max, | 302 double calcMissingTStart(const SkOpSegment* ref, double loEnd, double min, d
ouble max, |
303 double hiEnd, const SkOpSegment* other, int thisEnd
); | 303 double hiEnd, const SkOpSegment* other, int thisEnd
); |
304 void checkDuplicates(); | 304 void checkDuplicates(); |
305 void checkEnds(); | 305 bool checkEnds(); |
306 void checkMultiples(); | 306 void checkMultiples(); |
307 void checkSmall(); | 307 void checkSmall(); |
308 bool checkSmall(int index) const; | 308 bool checkSmall(int index) const; |
309 void checkTiny(); | 309 void checkTiny(); |
310 int computeSum(int startIndex, int endIndex, SkOpAngle::IncludeType includeT
ype); | 310 int computeSum(int startIndex, int endIndex, SkOpAngle::IncludeType includeT
ype); |
311 bool containsPt(const SkPoint& , int index, int endIndex) const; | 311 bool containsPt(const SkPoint& , int index, int endIndex) const; |
312 int crossedSpanY(const SkPoint& basePt, SkScalar* bestY, double* hitT, bool*
hitSomething, | 312 int crossedSpanY(const SkPoint& basePt, SkScalar* bestY, double* hitT, bool*
hitSomething, |
313 double mid, bool opp, bool current) const; | 313 double mid, bool opp, bool current) const; |
314 bool findCoincidentMatch(const SkOpSpan* span, const SkOpSegment* other, int
oStart, int oEnd, | 314 bool findCoincidentMatch(const SkOpSpan* span, const SkOpSegment* other, int
oStart, int oEnd, |
315 int step, SkPoint* startPt, SkPoint* endPt, double*
endT) const; | 315 int step, SkPoint* startPt, SkPoint* endPt, double*
endT) const; |
316 SkOpSegment* findNextOp(SkTDArray<SkOpSpan*>* chase, int* nextStart, int* ne
xtEnd, | 316 SkOpSegment* findNextOp(SkTDArray<SkOpSpan*>* chase, int* nextStart, int* ne
xtEnd, |
317 bool* unsortable, SkPathOp op, int xorMiMask, int xo
rSuMask); | 317 bool* unsortable, SkPathOp op, int xorMiMask, int xo
rSuMask); |
318 SkOpSegment* findNextWinding(SkTDArray<SkOpSpan*>* chase, int* nextStart, in
t* nextEnd, | 318 SkOpSegment* findNextWinding(SkTDArray<SkOpSpan*>* chase, int* nextStart, in
t* nextEnd, |
319 bool* unsortable); | 319 bool* unsortable); |
320 SkOpSegment* findNextXor(int* nextStart, int* nextEnd, bool* unsortable); | 320 SkOpSegment* findNextXor(int* nextStart, int* nextEnd, bool* unsortable); |
321 int findExactT(double t, const SkOpSegment* ) const; | 321 int findExactT(double t, const SkOpSegment* ) const; |
322 int findOtherT(double t, const SkOpSegment* ) const; | 322 int findOtherT(double t, const SkOpSegment* ) const; |
323 int findT(double t, const SkPoint& , const SkOpSegment* ) const; | 323 int findT(double t, const SkPoint& , const SkOpSegment* ) const; |
324 SkOpSegment* findTop(int* tIndex, int* endIndex, bool* unsortable, bool firs
tPass); | 324 SkOpSegment* findTop(int* tIndex, int* endIndex, bool* unsortable, bool firs
tPass); |
325 void fixOtherTIndex(); | 325 void fixOtherTIndex(); |
| 326 bool inconsistentAngle(int maxWinding, int sumWinding, int oppMaxWinding, in
t oppSumWinding, |
| 327 const SkOpAngle* angle) const; |
326 void initWinding(int start, int end, SkOpAngle::IncludeType angleIncludeType
); | 328 void initWinding(int start, int end, SkOpAngle::IncludeType angleIncludeType
); |
327 void initWinding(int start, int end, double tHit, int winding, SkScalar hitD
x, int oppWind, | 329 bool initWinding(int start, int end, double tHit, int winding, SkScalar hitD
x, int oppWind, |
328 SkScalar hitOppDx); | 330 SkScalar hitOppDx); |
329 bool isMissing(double startT, const SkPoint& pt) const; | 331 bool isMissing(double startT, const SkPoint& pt) const; |
330 bool isTiny(const SkOpAngle* angle) const; | 332 bool isTiny(const SkOpAngle* angle) const; |
331 bool joinCoincidence(SkOpSegment* other, double otherT, const SkPoint& other
Pt, int step, | 333 bool joinCoincidence(SkOpSegment* other, double otherT, const SkPoint& other
Pt, int step, |
332 bool cancel); | 334 bool cancel); |
333 SkOpSpan* markAndChaseDoneBinary(int index, int endIndex); | 335 SkOpSpan* markAndChaseDoneBinary(int index, int endIndex); |
334 SkOpSpan* markAndChaseDoneUnary(int index, int endIndex); | 336 SkOpSpan* markAndChaseDoneUnary(int index, int endIndex); |
335 SkOpSpan* markAndChaseWinding(const SkOpAngle* angle, int winding, int oppWi
nding); | 337 bool markAndChaseWinding(const SkOpAngle* angle, int winding, int oppWinding
, |
| 338 SkOpSpan** lastPtr); |
336 SkOpSpan* markAngle(int maxWinding, int sumWinding, int oppMaxWinding, int o
ppSumWinding, | 339 SkOpSpan* markAngle(int maxWinding, int sumWinding, int oppMaxWinding, int o
ppSumWinding, |
337 const SkOpAngle* angle); | 340 const SkOpAngle* angle); |
338 void markDone(int index, int winding); | 341 void markDone(int index, int winding); |
339 void markDoneBinary(int index); | 342 void markDoneBinary(int index); |
| 343 void markDoneFinal(int index); |
340 void markDoneUnary(int index); | 344 void markDoneUnary(int index); |
341 bool nextCandidate(int* start, int* end) const; | 345 bool nextCandidate(int* start, int* end) const; |
342 int nextSpan(int from, int step) const; | 346 int nextSpan(int from, int step) const; |
343 void pinT(const SkPoint& pt, double* t); | 347 void pinT(const SkPoint& pt, double* t); |
344 void setUpWindings(int index, int endIndex, int* sumMiWinding, int* sumSuWin
ding, | 348 void setUpWindings(int index, int endIndex, int* sumMiWinding, int* sumSuWin
ding, |
345 int* maxWinding, int* sumWinding, int* oppMaxWinding, int* oppSumWin
ding); | 349 int* maxWinding, int* sumWinding, int* oppMaxWinding, int* oppSumWin
ding); |
346 void sortAngles(); | 350 void sortAngles(); |
347 bool subDivide(int start, int end, SkPoint edge[4]) const; | 351 bool subDivide(int start, int end, SkPoint edge[4]) const; |
348 bool subDivide(int start, int end, SkDCubic* result) const; | 352 bool subDivide(int start, int end, SkDCubic* result) const; |
349 void undoneSpan(int* start, int* end); | 353 void undoneSpan(int* start, int* end); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 const SkOpAngle* activeAngleOther(int index, int* start, int* end, bool* don
e, | 400 const SkOpAngle* activeAngleOther(int index, int* start, int* end, bool* don
e, |
397 bool* sortable) const; | 401 bool* sortable) const; |
398 bool activeOp(int xorMiMask, int xorSuMask, int index, int endIndex, SkPathO
p op, | 402 bool activeOp(int xorMiMask, int xorSuMask, int index, int endIndex, SkPathO
p op, |
399 int* sumMiWinding, int* sumSuWinding); | 403 int* sumMiWinding, int* sumSuWinding); |
400 bool activeWinding(int index, int endIndex, int* sumWinding); | 404 bool activeWinding(int index, int endIndex, int* sumWinding); |
401 void addCancelOutsides(const SkPoint& startPt, const SkPoint& endPt, SkOpSeg
ment* other); | 405 void addCancelOutsides(const SkPoint& startPt, const SkPoint& endPt, SkOpSeg
ment* other); |
402 void addCoinOutsides(const SkPoint& startPt, const SkPoint& endPt, SkOpSegme
nt* other); | 406 void addCoinOutsides(const SkPoint& startPt, const SkPoint& endPt, SkOpSegme
nt* other); |
403 SkOpAngle* addSingletonAngleDown(SkOpSegment** otherPtr, SkOpAngle** ); | 407 SkOpAngle* addSingletonAngleDown(SkOpSegment** otherPtr, SkOpAngle** ); |
404 SkOpAngle* addSingletonAngleUp(SkOpSegment** otherPtr, SkOpAngle** ); | 408 SkOpAngle* addSingletonAngleUp(SkOpSegment** otherPtr, SkOpAngle** ); |
405 SkOpAngle* addSingletonAngles(int step); | 409 SkOpAngle* addSingletonAngles(int step); |
| 410 void alignRange(int lower, int upper, const SkOpSegment* other, int oLower,
int oUpper); |
406 void alignSpan(const SkPoint& newPt, double newT, const SkOpSegment* other,
double otherT, | 411 void alignSpan(const SkPoint& newPt, double newT, const SkOpSegment* other,
double otherT, |
407 const SkOpSegment* other2, SkOpSpan* oSpan, SkTDArray<Aligned
Span>* ); | 412 const SkOpSegment* other2, SkOpSpan* oSpan, SkTDArray<Aligned
Span>* ); |
408 bool betweenPoints(double midT, const SkPoint& pt1, const SkPoint& pt2) cons
t; | 413 bool betweenPoints(double midT, const SkPoint& pt1, const SkPoint& pt2) cons
t; |
409 void bumpCoincidentBlind(bool binary, int index, int last); | 414 void bumpCoincidentBlind(bool binary, int index, int last); |
410 bool bumpCoincidentThis(const SkOpSpan& oTest, bool binary, int* index, | 415 bool bumpCoincidentThis(const SkOpSpan& oTest, bool binary, int* index, |
411 SkTArray<SkPoint, true>* outsideTs); | 416 SkTArray<SkPoint, true>* outsideTs); |
412 void bumpCoincidentOBlind(int index, int last); | 417 void bumpCoincidentOBlind(int index, int last); |
413 void bumpCoincidentOther(const SkOpSpan& oTest, int* index, | 418 bool bumpCoincidentOther(const SkOpSpan& oTest, int* index, |
414 SkTArray<SkPoint, true>* outsideTs); | 419 SkTArray<SkPoint, true>* outsideTs, const SkPoint&
endPt); |
415 bool bumpSpan(SkOpSpan* span, int windDelta, int oppDelta); | 420 bool bumpSpan(SkOpSpan* span, int windDelta, int oppDelta); |
416 bool calcLoopSpanCount(const SkOpSpan& thisSpan, int* smallCounts); | 421 bool calcLoopSpanCount(const SkOpSpan& thisSpan, int* smallCounts); |
417 bool checkForSmall(const SkOpSpan* span, const SkPoint& pt, double newT, | 422 bool checkForSmall(const SkOpSpan* span, const SkPoint& pt, double newT, |
418 int* less, int* more) const; | 423 int* less, int* more) const; |
419 void checkLinks(const SkOpSpan* , | 424 void checkLinks(const SkOpSpan* , |
420 SkTArray<MissingSpan, true>* missingSpans) const; | 425 SkTArray<MissingSpan, true>* missingSpans) const; |
421 static void CheckOneLink(const SkOpSpan* test, const SkOpSpan* oSpan, | 426 static void CheckOneLink(const SkOpSpan* test, const SkOpSpan* oSpan, |
422 const SkOpSpan* oFirst, const SkOpSpan* oLast, | 427 const SkOpSpan* oFirst, const SkOpSpan* oLast, |
423 const SkOpSpan** missingPtr, | 428 const SkOpSpan** missingPtr, |
424 SkTArray<MissingSpan, true>* missingSpans); | 429 SkTArray<MissingSpan, true>* missingSpans); |
425 int checkSetAngle(int tIndex) const; | 430 int checkSetAngle(int tIndex) const; |
426 void checkSmallCoincidence(const SkOpSpan& span, SkTArray<MissingSpan, true>
* ); | 431 void checkSmallCoincidence(const SkOpSpan& span, SkTArray<MissingSpan, true>
* ); |
427 bool coincidentSmall(const SkPoint& pt, double t, const SkOpSegment* other)
const; | 432 bool coincidentSmall(const SkPoint& pt, double t, const SkOpSegment* other)
const; |
428 bool clockwise(int tStart, int tEnd, bool* swap) const; | 433 bool clockwise(int tStart, int tEnd, bool* swap) const; |
429 static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle, | 434 static void ComputeOneSum(const SkOpAngle* baseAngle, SkOpAngle* nextAngle, |
430 SkOpAngle::IncludeType ); | 435 SkOpAngle::IncludeType ); |
431 static void ComputeOneSumReverse(const SkOpAngle* baseAngle, SkOpAngle* next
Angle, | 436 static void ComputeOneSumReverse(const SkOpAngle* baseAngle, SkOpAngle* next
Angle, |
432 SkOpAngle::IncludeType ); | 437 SkOpAngle::IncludeType ); |
433 bool containsT(double t, const SkOpSegment* other, double otherT) const; | 438 bool containsT(double t, const SkOpSegment* other, double otherT) const; |
434 bool decrementSpan(SkOpSpan* span); | 439 bool decrementSpan(SkOpSpan* span); |
435 int findEndSpan(int endIndex) const; | 440 int findEndSpan(int endIndex) const; |
436 int findStartSpan(int startIndex) const; | 441 int findStartSpan(int startIndex) const; |
437 int firstActive(int tIndex) const; | 442 int firstActive(int tIndex) const; |
438 const SkOpSpan& firstSpan(const SkOpSpan& thisSpan) const; | 443 const SkOpSpan& firstSpan(const SkOpSpan& thisSpan) const; |
439 void init(const SkPoint pts[], SkPath::Verb verb, bool operand, bool evenOdd
); | 444 void init(const SkPoint pts[], SkPath::Verb verb, bool operand, bool evenOdd
); |
440 bool inCoincidentSpan(double t, const SkOpSegment* other) const; | 445 bool inCoincidentSpan(double t, const SkOpSegment* other) const; |
| 446 bool inconsistentWinding(const SkOpAngle* , int maxWinding, int oppMaxWindin
g) const; |
| 447 bool inconsistentWinding(int min, int maxWinding, int oppMaxWinding) const; |
| 448 bool inconsistentWinding(const char* funName, int tIndex, int winding, int o
ppWinding) const; |
441 bool inLoop(const SkOpAngle* baseAngle, int spanCount, int* indexPtr) const; | 449 bool inLoop(const SkOpAngle* baseAngle, int spanCount, int* indexPtr) const; |
442 #if OLD_CHASE | 450 #if OLD_CHASE |
443 bool isSimple(int end) const; | 451 bool isSimple(int end) const; |
444 #else | 452 #else |
445 SkOpSegment* isSimple(int* end, int* step); | 453 SkOpSegment* isSimple(int* end, int* step); |
446 #endif | 454 #endif |
447 bool isTiny(int index) const; | 455 bool isTiny(int index) const; |
448 const SkOpSpan& lastSpan(const SkOpSpan& thisSpan) const; | 456 const SkOpSpan& lastSpan(const SkOpSpan& thisSpan) const; |
449 void matchWindingValue(int tIndex, double t, bool borrowWind); | 457 void matchWindingValue(int tIndex, double t, bool borrowWind); |
450 SkOpSpan* markAndChaseDone(int index, int endIndex, int winding); | 458 SkOpSpan* markAndChaseDone(int index, int endIndex, int winding); |
451 SkOpSpan* markAndChaseDoneBinary(const SkOpAngle* angle, int winding, int op
pWinding); | 459 SkOpSpan* markAndChaseDoneBinary(const SkOpAngle* angle, int winding, int op
pWinding); |
452 SkOpSpan* markAndChaseWinding(const SkOpAngle* angle, int winding); | 460 bool markAndChaseWinding(const SkOpAngle* angle, int winding, SkOpSpan** las
tPtr); |
453 SkOpSpan* markAndChaseWinding(int index, int endIndex, int winding); | 461 bool markAndChaseWinding(int index, int endIndex, int winding, SkOpSpan** la
stPtr); |
454 SkOpSpan* markAndChaseWinding(int index, int endIndex, int winding, int oppW
inding); | 462 bool markAndChaseWinding(int index, int endIndex, int winding, int oppWindin
g, |
| 463 SkOpSpan** lastPtr); |
455 SkOpSpan* markAngle(int maxWinding, int sumWinding, const SkOpAngle* angle); | 464 SkOpSpan* markAngle(int maxWinding, int sumWinding, const SkOpAngle* angle); |
456 void markDoneBinary(int index, int winding, int oppWinding); | 465 void markDoneBinary(int index, int winding, int oppWinding); |
457 SkOpSpan* markAndChaseDoneUnary(const SkOpAngle* angle, int winding); | 466 SkOpSpan* markAndChaseDoneUnary(const SkOpAngle* angle, int winding); |
458 void markOneDone(const char* funName, int tIndex, int winding); | 467 void markOneDone(const char* funName, int tIndex, int winding); |
459 void markOneDoneBinary(const char* funName, int tIndex); | 468 void markOneDoneBinary(const char* funName, int tIndex); |
460 void markOneDoneBinary(const char* funName, int tIndex, int winding, int opp
Winding); | 469 void markOneDoneBinary(const char* funName, int tIndex, int winding, int opp
Winding); |
| 470 void markOneDoneFinal(const char* funName, int tIndex); |
461 void markOneDoneUnary(const char* funName, int tIndex); | 471 void markOneDoneUnary(const char* funName, int tIndex); |
462 SkOpSpan* markOneWinding(const char* funName, int tIndex, int winding); | 472 bool markOneWinding(const char* funName, int tIndex, int winding, SkOpSpan**
lastPtr); |
463 SkOpSpan* markOneWinding(const char* funName, int tIndex, int winding, int o
ppWinding); | 473 bool markOneWinding(const char* funName, int tIndex, int winding, int oppWin
ding, |
464 void markWinding(int index, int winding); | 474 SkOpSpan** lastPtr); |
465 void markWinding(int index, int winding, int oppWinding); | 475 bool markWinding(int index, int winding); |
| 476 bool markWinding(int index, int winding, int oppWinding); |
466 bool monotonicInY(int tStart, int tEnd) const; | 477 bool monotonicInY(int tStart, int tEnd) const; |
467 | 478 |
468 bool multipleEnds() const { return fTs[count() - 2].fT == 1; } | 479 bool multipleEnds() const { return fTs[count() - 2].fT == 1; } |
469 bool multipleStarts() const { return fTs[1].fT == 0; } | 480 bool multipleStarts() const { return fTs[1].fT == 0; } |
470 | 481 |
471 SkOpSegment* nextChase(int* index, int* step, int* min, SkOpSpan** last); | 482 SkOpSegment* nextChase(int* index, int* step, int* min, SkOpSpan** last) con
st; |
472 int nextExactSpan(int from, int step) const; | 483 int nextExactSpan(int from, int step) const; |
| 484 void resetSpanFlags(); |
473 bool serpentine(int tStart, int tEnd) const; | 485 bool serpentine(int tStart, int tEnd) const; |
474 void setCoincidentRange(const SkPoint& startPt, const SkPoint& endPt, SkOpS
egment* other); | 486 void setCoincidentRange(const SkPoint& startPt, const SkPoint& endPt, SkOpS
egment* other); |
475 void setFromAngle(int endIndex, SkOpAngle* ); | 487 void setFromAngle(int endIndex, SkOpAngle* ); |
| 488 void setSpanFlags(const SkPoint& pt, double newT, SkOpSpan* span); |
476 void setToAngle(int endIndex, SkOpAngle* ); | 489 void setToAngle(int endIndex, SkOpAngle* ); |
477 void setUpWindings(int index, int endIndex, int* sumMiWinding, | 490 void setUpWindings(int index, int endIndex, int* sumMiWinding, |
478 int* maxWinding, int* sumWinding); | 491 int* maxWinding, int* sumWinding); |
479 void subDivideBounds(int start, int end, SkPathOpsBounds* bounds) const; | 492 void subDivideBounds(int start, int end, SkPathOpsBounds* bounds) const; |
480 static void TrackOutsidePair(SkTArray<SkPoint, true>* outsideTs, const SkPoi
nt& endPt, | 493 static void TrackOutsidePair(SkTArray<SkPoint, true>* outsideTs, const SkPoi
nt& endPt, |
481 const SkPoint& startPt); | 494 const SkPoint& startPt); |
482 static void TrackOutside(SkTArray<SkPoint, true>* outsideTs, const SkPoint&
startPt); | 495 static void TrackOutside(SkTArray<SkPoint, true>* outsideTs, const SkPoint&
startPt); |
483 int updateOppWinding(int index, int endIndex) const; | 496 int updateOppWinding(int index, int endIndex) const; |
484 int updateOppWinding(const SkOpAngle* angle) const; | 497 int updateOppWinding(const SkOpAngle* angle) const; |
485 int updateWinding(int index, int endIndex) const; | 498 int updateWinding(int index, int endIndex) const; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 return value < 0 ? '?' : value <= 9 ? '0' + value : '+'; | 533 return value < 0 ? '?' : value <= 9 ? '0' + value : '+'; |
521 } | 534 } |
522 #endif | 535 #endif |
523 // available to testing only | 536 // available to testing only |
524 void debugConstruct(); | 537 void debugConstruct(); |
525 void debugConstructCubic(SkPoint shortQuad[4]); | 538 void debugConstructCubic(SkPoint shortQuad[4]); |
526 void debugConstructLine(SkPoint shortQuad[2]); | 539 void debugConstructLine(SkPoint shortQuad[2]); |
527 void debugConstructQuad(SkPoint shortQuad[3]); | 540 void debugConstructQuad(SkPoint shortQuad[3]); |
528 void debugReset(); | 541 void debugReset(); |
529 void dumpDPts() const; | 542 void dumpDPts() const; |
| 543 void dumpHexPts() const; |
530 void dumpSpan(int index) const; | 544 void dumpSpan(int index) const; |
531 | 545 |
532 const SkPoint* fPts; | 546 const SkPoint* fPts; |
533 SkPathOpsBounds fBounds; | 547 SkPathOpsBounds fBounds; |
534 // FIXME: can't convert to SkTArray because it uses insert | 548 // FIXME: can't convert to SkTArray because it uses insert |
535 SkTDArray<SkOpSpan> fTs; // 2+ (always includes t=0 t=1) -- at least (numbe
r of spans) + 1 | 549 SkTDArray<SkOpSpan> fTs; // 2+ (always includes t=0 t=1) -- at least (numbe
r of spans) + 1 |
536 SkOpAngleSet fAngles; // empty or 2+ -- (number of non-zero spans) * 2 | 550 SkOpAngleSet fAngles; // empty or 2+ -- (number of non-zero spans) * 2 |
537 // OPTIMIZATION: could pack donespans, verb, operand, xor into 1 int-sized v
alue | 551 // OPTIMIZATION: could pack donespans, verb, operand, xor into 1 int-sized v
alue |
538 int fDoneSpans; // quick check that segment is finished | 552 int fDoneSpans; // quick check that segment is finished |
539 // OPTIMIZATION: force the following to be byte-sized | 553 // OPTIMIZATION: force the following to be byte-sized |
540 SkPath::Verb fVerb; | 554 SkPath::Verb fVerb; |
541 bool fLoop; // set if cubic intersects itself | 555 bool fLoop; // set if cubic intersects itself |
542 bool fMultiples; // set if curve intersects multiple other curves at one in
terior point | 556 bool fMultiples; // set if curve intersects multiple other curves at one in
terior point |
543 bool fOperand; | 557 bool fOperand; |
544 bool fXor; // set if original contour had even-odd fill | 558 bool fXor; // set if original contour had even-odd fill |
545 bool fOppXor; // set if opposite operand had even-odd fill | 559 bool fOppXor; // set if opposite operand had even-odd fill |
546 bool fSmall; // set if some span is small | 560 bool fSmall; // set if some span is small |
547 bool fTiny; // set if some span is tiny | 561 bool fTiny; // set if some span is tiny |
548 #if defined(SK_DEBUG) || !FORCE_RELEASE | 562 #if defined(SK_DEBUG) || !FORCE_RELEASE |
549 int fID; | 563 int fID; |
550 #endif | 564 #endif |
551 | 565 |
552 friend class PathOpsSegmentTester; | 566 friend class PathOpsSegmentTester; |
553 }; | 567 }; |
554 | 568 |
555 #endif | 569 #endif |
OLD | NEW |