Lines Matching refs:span
48 void SkTSpan::addBounded(SkTSpan* span, SkArenaAlloc* heap) {
50 bounded->fBounded = span;
78 void SkTSect::addForPerp(SkTSpan* span, double t) {
79 if (!span->hasOppT(t)) {
91 SkDebugf("%s addBounded span=%d opp=%d\n", __FUNCTION__, priorSpan ?
94 opp->addBounded(span, &fHeap);
95 span->addBounded(opp, &fHeap);
99 span->validatePerpT(t);
127 bool SkTSpan::debugIsBefore(const SkTSpan* span) const {
130 if (span == work) {
196 // OPTIMIZE Once at_most_end_pts_in_common detects linear, mark span so all future splits are linear
242 bool SkTSpan::linearsIntersect(SkTSpan* span) {
243 int result = this->linearIntersects(*span->fPart);
247 SkASSERT(span->fIsLinear);
248 result = span->linearIntersects(*fPart);
612 // OPTIMIZE ? keep a sorted list of sizes in the form of a doubly-linked list in quad span
792 bool SkTSect::hasBounded(const SkTSpan* span) const {
798 if (test->findOppSpan(span)) {
947 // find the first fully coincident span
983 int SkTSect::intersects(SkTSpan* span,
987 int hullResult = span->hullsIntersect(oppSpan, &spanStart, &oppStart);
990 if (!span->fBounded || !span->fBounded->fNext) {
991 SkASSERT(!span->fBounded || span->fBounded->fBounded == oppSpan);
993 span->fEndT = span->fStartT;
995 span->fStartT = span->fEndT;
1001 if (oppSpan->fBounded && oppSpan->fBounded->fBounded != span) {
1018 if (span->fIsLine && oppSpan->fIsLine) {
1020 int sects = this->linesIntersect(span, opp, oppSpan, &i);
1027 this->removedEndCheck(span);
1028 span->fStartT = span->fEndT = i[0][0];
1033 if (span->fIsLinear || oppSpan->fIsLinear) {
1034 return *oppResult = (int) span->linearsIntersect(oppSpan);
1068 int SkTSect::linesIntersect(SkTSpan* span,
1071 SkIntersections thisRayI SkDEBUGCODE((span->fDebugGlobalState));
1072 SkIntersections oppRayI SkDEBUGCODE((span->fDebugGlobalState));
1073 SkDLine thisLine = {{ span->pointFirst(), span->pointLast() }};
1112 if (!roughly_between(span->fStartT, oppRayI[0][index], span->fEndT)) {
1132 if (between(span->fStartT, oppRayI[0][closeIndex], span->fEndT)
1167 tStart = std::max(tStart, span->fStartT);
1168 tEnd = std::min(tEnd, span->fEndT);
1173 if (tStart == span->fStartT) {
1175 coinS.setPerp(fCurve, span->fStartT, span->pointFirst(), opp->fCurve);
1176 perpS = span->pointFirst() - coinS.perpPt();
1182 if (tEnd == span->fEndT) {
1184 coinE.setPerp(fCurve, span->fEndT, span->pointLast(), opp->fCurve);
1185 perpE = span->pointLast() - coinE.perpPt();
1227 bool SkTSect::markSpanGone(SkTSpan* span) {
1231 span->fNext = fDeleted;
1232 fDeleted = span;
1233 SkOPASSERT(!span->fDeleted);
1234 span->fDeleted = true;
1258 // find the smallest unprocessed span
1277 // find next larger span
1315 SkTSpan* span) const {
1318 while (span != test) {
1343 SkTSpan* span, SkTSect* opp) {
1344 const SkTSpanBounded* testBounded = span->fBounded;
1350 SkAssertResult(SkDEBUGCODE(!) span->removeBounded(bounded));
1351 if (bounded->removeBounded(span)) {
1357 SkASSERT(!span->fDeleted);
1358 SkASSERT(span->findOppSpan(keep));
1359 SkASSERT(keep->findOppSpan(span));
1386 bool SkTSect::removeCoincident(SkTSpan* span, bool isBetween) {
1387 if (!this->unlinkSpan(span)) {
1390 if (isBetween || between(0, span->fCoinStart.perpT(), 1)) {
1392 span->fNext = fCoincident;
1393 fCoincident = span;
1395 this->markSpanGone(span);
1400 void SkTSect::removedEndCheck(SkTSpan* span) {
1401 if (!span->fStartT) {
1404 if (1 == span->fEndT) {
1409 bool SkTSect::removeSpan(SkTSpan* span) {\
1410 this->removedEndCheck(span);
1411 if (!this->unlinkSpan(span)) {
1414 return this->markSpanGone(span);
1422 SkTSpan* span = first;
1423 SkASSERT(span);
1425 SkTSpan* next = span->fNext;
1426 while ((span = next) && span != final) {
1427 next = span->fNext;
1428 this->markSpanGone(span);
1438 bool SkTSect::removeSpans(SkTSpan* span,
1440 SkTSpanBounded* bounded = span->fBounded;
1444 if (span->removeBounded(spanBounded)) { // shuffles last into position 0
1445 this->removeSpan(span);
1447 if (spanBounded->removeBounded(span)) {
1450 if (span->fDeleted && opp->hasBounded(span)) {
1485 /* Each span has a range of opposite spans it intersects. After the span is split in two,
1488 bool SkTSect::trim(SkTSpan* span,
1490 FAIL_IF(!span->initBounds(fCurve));
1491 const SkTSpanBounded* testBounded = span->fBounded;
1495 int oppSects, sects = this->intersects(span, opp, test, &oppSects);
1499 opp->removeAllBut(span, test, this);
1502 span->initBounds(fCurve);
1503 this->removeAllBut(test, span, opp);
1507 if (span->removeBounded(test)) {
1508 this->removeSpan(span);
1510 if (test->removeBounded(span)) {
1519 bool SkTSect::unlinkSpan(SkTSpan* span) {
1520 SkTSpan* prev = span->fPrev;
1521 SkTSpan* next = span->fNext;
1551 // cannot call validate until remove span range is called
1560 const SkTSpan* span = fHead;
1561 SkASSERT(!span->fPrev);
1564 span->validate();
1565 SkASSERT(span->fStartT >= last);
1566 last = span->fEndT;
1568 next = span->fNext;
1569 SkASSERT(next != span);
1570 } while ((span = next) != nullptr);
1596 const SkTSpan* span = fHead;
1598 span->validateBounded();
1599 } while ((span = span->fNext) != nullptr);
1921 // if there is more than one coincident span, check loosely to see if they should be joined