| Index: src/pathops/SkOpSegment.cpp
|
| ===================================================================
|
| --- src/pathops/SkOpSegment.cpp (revision 9111)
|
| +++ src/pathops/SkOpSegment.cpp (working copy)
|
| @@ -210,8 +210,8 @@
|
| #if DEBUG_ANGLE
|
| SkTDArray<SkOpAngle>& angles = *anglesPtr;
|
| if (angles.count() > 1 && !fTs[start].fTiny) {
|
| - SkPoint angle0Pt = (*CurvePointAtT[angles[0].verb()])(angles[0].pts(),
|
| - (*angles[0].spans())[angles[0].start()].fT);
|
| + const SkOpSegment* aSeg = angles[0].segment();
|
| + const SkPoint& angle0Pt = aSeg->xyAtT(angles[0].start());
|
| SkPoint newPt = (*CurvePointAtT[fVerb])(fPts, fTs[start].fT);
|
| bool match = AlmostEqualUlps(angle0Pt.fX, newPt.fX);
|
| match &= AlmostEqualUlps(angle0Pt.fY, newPt.fY);
|
| @@ -1177,12 +1177,12 @@
|
| if (activeAngle) {
|
| ++activeCount;
|
| if (!foundAngle || (foundDone && activeCount & 1)) {
|
| - if (nextSegment->tiny(nextAngle)) {
|
| + if (nextSegment->isTiny(nextAngle)) {
|
| *unsortable = true;
|
| return NULL;
|
| }
|
| foundAngle = nextAngle;
|
| - foundDone = nextSegment->done(nextAngle) && !nextSegment->tiny(nextAngle);
|
| + foundDone = nextSegment->done(nextAngle) && !nextSegment->isTiny(nextAngle);
|
| }
|
| }
|
| if (nextSegment->done()) {
|
| @@ -1294,7 +1294,7 @@
|
| if (activeAngle) {
|
| ++activeCount;
|
| if (!foundAngle || (foundDone && activeCount & 1)) {
|
| - if (nextSegment->tiny(nextAngle)) {
|
| + if (nextSegment->isTiny(nextAngle)) {
|
| *unsortable = true;
|
| return NULL;
|
| }
|
| @@ -1416,7 +1416,7 @@
|
| nextSegment = nextAngle->segment();
|
| ++activeCount;
|
| if (!foundAngle || (foundDone && activeCount & 1)) {
|
| - if (nextSegment->tiny(nextAngle)) {
|
| + if (nextSegment->isTiny(nextAngle)) {
|
| *unsortable = true;
|
| return NULL;
|
| }
|
| @@ -2379,13 +2379,25 @@
|
| }
|
| }
|
|
|
| +void SkOpSegment::subDivide(int start, int end, SkDCubic* result) const {
|
| + (*result)[0].set(fTs[start].fPt);
|
| + (*result)[fVerb].set(fTs[end].fPt);
|
| + if (fVerb == SkPath::kQuad_Verb) {
|
| + (*result)[1] = SkDQuad::SubDivide(fPts, (*result)[0], (*result)[2], fTs[start].fT,
|
| + fTs[end].fT);
|
| + } else if (fVerb == SkPath::kCubic_Verb) {
|
| + SkDCubic::SubDivide(fPts, (*result)[0], (*result)[3], fTs[start].fT, fTs[end].fT,
|
| + &(*result)[1]);
|
| + }
|
| +}
|
| +
|
| void SkOpSegment::subDivideBounds(int start, int end, SkPathOpsBounds* bounds) const {
|
| SkPoint edge[4];
|
| subDivide(start, end, edge);
|
| (bounds->*SetCurveBounds[fVerb])(edge);
|
| }
|
|
|
| -bool SkOpSegment::tiny(const SkOpAngle* angle) const {
|
| +bool SkOpSegment::isTiny(const SkOpAngle* angle) const {
|
| int start = angle->start();
|
| int end = angle->end();
|
| const SkOpSpan& mSpan = fTs[SkMin32(start, end)];
|
| @@ -2735,7 +2747,7 @@
|
| }
|
| SkDebugf("%s [%d] %s", __FUNCTION__, index,
|
| angle.unsortable() ? "*** UNSORTABLE *** " : "");
|
| - #if COMPACT_DEBUG_SORT
|
| + #if DEBUG_SORT_COMPACT
|
| SkDebugf("id=%d %s start=%d (%1.9g,%,1.9g) end=%d (%1.9g,%,1.9g)",
|
| segment.fID, kLVerbStr[segment.fVerb],
|
| start, segment.xAtT(&sSpan), segment.yAtT(&sSpan), end,
|
|
|