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 SkOpSpan_DEFINED | 7 #ifndef SkOpSpan_DEFINED |
8 #define SkOpSpan_DEFINED | 8 #define SkOpSpan_DEFINED |
9 | 9 |
10 #include "SkPathOpsDebug.h" | 10 #include "SkPathOpsDebug.h" |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 SkOpSpan* fPrev; // previous intersection point | 365 SkOpSpan* fPrev; // previous intersection point |
366 int fSpanAdds; // number of times intersections have been added to span | 366 int fSpanAdds; // number of times intersections have been added to span |
367 bool fAligned; | 367 bool fAligned; |
368 bool fChased; // set after span has been added to chase array | 368 bool fChased; // set after span has been added to chase array |
369 SkDEBUGCODE(int fCount); // number of pt/t pairs added | 369 SkDEBUGCODE(int fCount); // number of pt/t pairs added |
370 SkDEBUGCODE(int fID); | 370 SkDEBUGCODE(int fID); |
371 }; | 371 }; |
372 | 372 |
373 class SkOpSpan : public SkOpSpanBase { | 373 class SkOpSpan : public SkOpSpanBase { |
374 public: | 374 public: |
| 375 bool alreadyAdded() const { |
| 376 if (fAlreadyAdded) { |
| 377 return true; |
| 378 } |
| 379 fAlreadyAdded = true; |
| 380 return false; |
| 381 } |
| 382 |
375 bool clearCoincident() { | 383 bool clearCoincident() { |
376 SkASSERT(!final()); | 384 SkASSERT(!final()); |
377 if (fCoincident == this) { | 385 if (fCoincident == this) { |
378 return false; | 386 return false; |
379 } | 387 } |
380 fCoincident = this; | 388 fCoincident = this; |
381 return true; | 389 return true; |
382 } | 390 } |
383 | 391 |
384 int computeWindSum(); | 392 int computeWindSum(); |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 private: // no direct access to internals to avoid treating a span base as a sp
an | 507 private: // no direct access to internals to avoid treating a span base as a sp
an |
500 SkOpSpan* fCoincident; // linked list of spans coincident with this one (ma
y point to itself) | 508 SkOpSpan* fCoincident; // linked list of spans coincident with this one (ma
y point to itself) |
501 SkOpAngle* fToAngle; // points to next angle from span start to end | 509 SkOpAngle* fToAngle; // points to next angle from span start to end |
502 SkOpSpanBase* fNext; // next intersection point | 510 SkOpSpanBase* fNext; // next intersection point |
503 int fWindSum; // accumulated from contours surrounding this one. | 511 int fWindSum; // accumulated from contours surrounding this one. |
504 int fOppSum; // for binary operators: the opposite winding sum | 512 int fOppSum; // for binary operators: the opposite winding sum |
505 int fWindValue; // 0 == canceled; 1 == normal; >1 == coincident | 513 int fWindValue; // 0 == canceled; 1 == normal; >1 == coincident |
506 int fOppValue; // normally 0 -- when binary coincident edges combine, opp v
alue goes here | 514 int fOppValue; // normally 0 -- when binary coincident edges combine, opp v
alue goes here |
507 int fTopTTry; // specifies direction and t value to try next | 515 int fTopTTry; // specifies direction and t value to try next |
508 bool fDone; // if set, this span to next higher T has been processed | 516 bool fDone; // if set, this span to next higher T has been processed |
| 517 mutable bool fAlreadyAdded; |
509 }; | 518 }; |
510 | 519 |
511 #endif | 520 #endif |
OLD | NEW |