| Index: src/pathops/SkOpSpan.cpp
|
| diff --git a/src/pathops/SkOpSpan.cpp b/src/pathops/SkOpSpan.cpp
|
| index b75a692f7440cb5dea5bdd30879522d389d356ae..9c9e07f985a144f9b232504b116fd9e93c5ad758 100755
|
| --- a/src/pathops/SkOpSpan.cpp
|
| +++ b/src/pathops/SkOpSpan.cpp
|
| @@ -86,65 +86,6 @@ SkOpSegment* SkOpPtT::segment() {
|
| return span()->segment();
|
| }
|
|
|
| -// find the starting or ending span with an existing loop of angles
|
| -// OPTIMIZE? remove the spans pointing to windValue==0 here or earlier?
|
| -// FIXME? assert that only one other span has a valid windValue or oppValue
|
| -bool SkOpSpanBase::addSimpleAngle(bool checkFrom, SkChunkAlloc* allocator) {
|
| - SkOpAngle* angle;
|
| - if (checkFrom) {
|
| - if (!this->final()) {
|
| - return false;
|
| - }
|
| - if (this->fromAngle()) {
|
| - SkASSERT(this->fromAngle()->loopCount() == 2);
|
| - return true;
|
| - }
|
| - angle = this->segment()->addEndSpan(allocator);
|
| - } else {
|
| - SkASSERT(this->t() == 0);
|
| - SkOpSpan* span = this->upCast();
|
| - if (span->toAngle()) {
|
| - SkASSERT(span->toAngle()->loopCount() == 2);
|
| - SkASSERT(!span->fromAngle());
|
| - span->setFromAngle(span->toAngle()->next());
|
| - return true;
|
| - }
|
| - angle = this->segment()->addStartSpan(allocator);
|
| - }
|
| - SkOpPtT* ptT = this->ptT();
|
| - SkOpSpanBase* oSpanBase;
|
| - SkOpSpan* oSpan;
|
| - SkOpSegment* other;
|
| - do {
|
| - ptT = ptT->next();
|
| - oSpanBase = ptT->span();
|
| - oSpan = oSpanBase->upCastable();
|
| - other = oSpanBase->segment();
|
| - if (oSpan && oSpan->windValue()) {
|
| - break;
|
| - }
|
| - if (oSpanBase->t() == 0) {
|
| - continue;
|
| - }
|
| - SkOpSpan* oFromSpan = oSpanBase->prev();
|
| - SkASSERT(oFromSpan->t() < 1);
|
| - if (oFromSpan->windValue()) {
|
| - break;
|
| - }
|
| - } while (ptT != this->ptT());
|
| - SkOpAngle* oAngle;
|
| - if (checkFrom) {
|
| - oAngle = other->addStartSpan(allocator);
|
| - SkASSERT(oSpan && !oSpan->final());
|
| - SkASSERT(oAngle == oSpan->toAngle());
|
| - } else {
|
| - oAngle = other->addEndSpan(allocator);
|
| - SkASSERT(oAngle == oSpanBase->fromAngle());
|
| - }
|
| - angle->insert(oAngle);
|
| - return true;
|
| -}
|
| -
|
| void SkOpSpanBase::align() {
|
| if (this->fAligned) {
|
| return;
|
| @@ -308,11 +249,6 @@ tryNextRemainder:
|
| fSpanAdds += span->fSpanAdds;
|
| }
|
|
|
| -void SkOpSpan::applyCoincidence(SkOpSpan* opp) {
|
| - SkASSERT(!final());
|
| - SkASSERT(0); // incomplete
|
| -}
|
| -
|
| bool SkOpSpan::containsCoincidence(const SkOpSegment* segment) const {
|
| SkASSERT(this->segment() != segment);
|
| const SkOpSpan* next = fCoincident;
|
| @@ -345,6 +281,7 @@ void SkOpSpan::init(SkOpSegment* segment, SkOpSpan* prev, double t, const SkPoin
|
| fWindSum = fOppSum = SK_MinS32;
|
| fWindValue = 1;
|
| fOppValue = 0;
|
| + fTopTTry = 0;
|
| fChased = fDone = false;
|
| segment->bumpCount();
|
| }
|
| @@ -358,3 +295,13 @@ void SkOpSpan::setOppSum(int oppSum) {
|
| SkASSERT(!DEBUG_LIMIT_WIND_SUM || abs(oppSum) <= DEBUG_LIMIT_WIND_SUM);
|
| fOppSum = oppSum;
|
| }
|
| +
|
| +void SkOpSpan::setWindSum(int windSum) {
|
| + SkASSERT(!final());
|
| + if (fWindSum != SK_MinS32 && fWindSum != windSum) {
|
| + this->globalState()->setWindingFailed();
|
| + return;
|
| + }
|
| + SkASSERT(!DEBUG_LIMIT_WIND_SUM || abs(windSum) <= DEBUG_LIMIT_WIND_SUM);
|
| + fWindSum = windSum;
|
| +}
|
|
|