Lines Matching refs:first
637 SkTSpan* first = fHead;
638 if (!first) {
643 int consecutive = this->countConsecutiveSpans(first, &last);
650 this->computePerpendiculars(sect2, first, last);
654 SkTSpan* coinStart = first;
667 } while ((first = next));
673 SkTSpan* first = fHead;
680 bool deleteEmptySpans = this->updateBounded(first, last, oppFirst);
681 deleteEmptySpans |= sect2->updateBounded(oppFirst, oppLast, first);
682 this->removeSpanRange(first, last);
684 first->fStartT = start1s;
685 first->fEndT = start1e;
686 first->resetBounds(fCurve);
687 first->fCoinStart.setPerp(fCurve, start1s, fCurve[0], sect2->fCurve);
688 first->fCoinEnd.setPerp(fCurve, start1e, this->pointLast(), sect2->fCurve);
689 bool oppMatched = first->fCoinStart.perpT() < first->fCoinEnd.perpT();
690 double oppStartT = first->fCoinStart.perpT() == -1 ? 0 : std::max(0., first->fCoinStart.perpT());
691 double oppEndT = first->fCoinEnd.perpT() == -1 ? 1 : std::min(1., first->fCoinEnd.perpT());
699 this->removeCoincident(first, false);
731 SkTSpan* first, SkTSpan* last) {
736 SkTSpan* work = first;
773 int SkTSect::countConsecutiveSpans(SkTSpan* first,
776 SkTSpan* last = first;
825 SkTSpan* first, SkTSpan* last,
827 first = findCoincidentRun(first, &last);
828 if (!first || !last) {
833 double startT = first->fStartT;
836 SkTSpan* prev = first->fPrev;
837 SkASSERT(first->fCoinStart.isMatch());
838 SkTSpan* oppFirst = first->findOppT(first->fCoinStart.perpT());
840 bool oppMatched = first->fCoinStart.perpT() < first->fCoinEnd.perpT();
850 first = this->addSplitAt(prev, coinStart);
851 first->markCoincident();
868 SkDEBUGCODE(coinStart = first->fStartT);
887 SkASSERT(coinStart == first->fStartT);
902 bool deleteEmptySpans = this->updateBounded(first, last, oppFirst);
903 deleteEmptySpans |= sect2->updateBounded(oppFirst, oppLast, first);
904 this->removeSpanRange(first, last);
906 first->fEndT = last->fEndT;
907 first->resetBounds(this->fCurve);
908 first->fCoinStart.setPerp(fCurve, first->fStartT, first->pointFirst(), sect2->fCurve);
909 first->fCoinEnd.setPerp(fCurve, first->fEndT, first->pointLast(), sect2->fCurve);
910 oppStartT = first->fCoinStart.perpT();
911 oppEndT = first->fCoinEnd.perpT();
923 last = first->fNext;
924 if (!this->removeCoincident(first, false)) {
943 SkTSpan* first, SkTSpan** lastPtr) {
944 SkTSpan* work = first;
946 first = nullptr;
947 // find the first fully coincident span
959 if (!first) {
960 first = work;
962 } else if (first && work->fCollapsed) {
964 return first;
967 SkOPASSERT(!first);
970 return first;
980 return first;
1417 void SkTSect::removeSpanRange(SkTSpan* first,
1419 if (first == last) {
1422 SkTSpan* span = first;
1431 final->fPrev = first;
1433 first->fNext = final;
1435 first->validate();
1541 bool SkTSect::updateBounded(SkTSpan* first,
1543 SkTSpan* test = first;
1549 first->fBounded = nullptr;
1550 first->addBounded(oppFirst, &fHeap);