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, |