25 bool unsortable =
false;
38 if (!unsortable && current->
done()) {
50 SkDebugf(
"%s current id=%d from=(%1.9g,%1.9g) to=(%1.9g,%1.9g)\n", __FUNCTION__,
52 end->pt().fX,
end->pt().fY);
60 }
while (!writer->
isClosed() && (!unsortable || !
start->starter(
end)->done()));
63 if (!spanStart->
done()) {
76 if (last && !last->
chased()) {
101 bool unsortable =
false;
102 int safetyNet = 1000000;
112 if (--safetyNet < 0) {
115 if (!unsortable && current->
done()) {
127 SkDebugf(
"%s current id=%d from=(%1.9g,%1.9g) to=(%1.9g,%1.9g)\n", __FUNCTION__,
129 end->pt().fX,
end->pt().fY);
137 }
while (!writer->
isClosed() && (!unsortable || !
start->starter(
end)->done()));
140 if (!spanStart->
done()) {
160 void moveTo(
const SkPoint& currPt) {
164 bool addTrivialContourPoint(
const SkPoint& currPt) {
165 if (currPt == prevPt) {
186 if (!triv.addTrivialContourPoint(
points[3])) {
return false; }
190 if (!triv.addTrivialContourPoint(
points[2])) {
return false; }
193 if (!triv.addTrivialContourPoint(
points[1])) {
return false; }
194 if (!triv.addTrivialContourPoint(
points[0])) {
return false; }
211 if (
path.isConvex()) {
218 result->setFillType(fillType);
232 if (SkPathOpsDebug::gDumpOp) {
237 SkPathOpsDebug::gSortCount = SkPathOpsDebug::gSortCountDefault;
243#if DEBUG_DUMP_SEGMENTS
248 result->setFillType(fillType);
257 }
while ((current = current->
next()));
263 globalState.debugAddToGlobalCoinDicts();
268#if DEBUG_DUMP_ALIGNMENT
269 contour.dumpSegments(
"aligned");
273 result->setFillType(fillType);
285 if (SkPathOpsDebug::gVerifyOp) {
287 ReportSimplifyFail(
path);
static const int points[]
static float next(float f)
bool AddIntersectTs(SkOpContour *test, SkOpContour *next, SkOpCoincidence *coincidence)
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
bool SortContourList(SkOpContourHead **contourList, bool evenOdd, bool oppEvenOdd)
SkOpSegment * FindChase(SkTDArray< SkOpSpanBase * > *chase, SkOpSpanBase **startPtr, SkOpSpanBase **endPtr)
SkOpSpan * FindUndone(SkOpContourHead *contourHead)
bool HandleCoincidence(SkOpContourHead *contourList, SkOpCoincidence *coincidence)
SkOpSpan * FindSortableTop(SkOpContourHead *)
#define SkDEBUGPARAMS(...)
static bool bridgeWinding(SkOpContourHead *contourList, SkPathWriter *writer)
static bool bridgeXor(SkOpContourHead *contourList, SkPathWriter *writer)
static bool path_is_trivial(const SkPath &path)
bool Simplify(const SkPath &path, SkPath *result)
bool SimplifyDebug(const SkPath &path, SkPath *result SkDEBUGPARAMS(bool skipAssert) SkDEBUGPARAMS(const char *testName))
void setPhase(SkOpPhase phase)
bool activeWinding(SkOpSpanBase *start, SkOpSpanBase *end)
bool markAndChaseDone(SkOpSpanBase *start, SkOpSpanBase *end, SkOpSpanBase **found)
bool addCurveTo(const SkOpSpanBase *start, const SkOpSpanBase *end, SkPathWriter *path) const
SkOpSegment * findNextWinding(SkTDArray< SkOpSpanBase * > *chase, SkOpSpanBase **nextStart, SkOpSpanBase **nextEnd, bool *unsortable)
void markDone(SkOpSpan *)
SkOpSegment * findNextXor(SkOpSpanBase **nextStart, SkOpSpanBase **nextEnd, bool *unsortable)
void setChased(bool chased)
SkOpSegment * segment() const
SkOpSpanBase * next() const
static void ShowActiveSpans(SkOpContourHead *contourList)
static bool ChaseContains(const SkTDArray< SkOpSpanBase * > &, const SkOpSpanBase *)
Verb next(SkPoint pts[4])
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
static float CrossProduct(const SkVector &a, const SkVector &b)