| Index: src/pathops/SkOpSegment.h
|
| diff --git a/src/pathops/SkOpSegment.h b/src/pathops/SkOpSegment.h
|
| index b26bad14a630535a7d03ba356a077b6ee5cb0292..94efcb53fe5531a783dde8f6e261f315cfb647b8 100644
|
| --- a/src/pathops/SkOpSegment.h
|
| +++ b/src/pathops/SkOpSegment.h
|
| @@ -11,6 +11,7 @@
|
| #include "SkOpSpan.h"
|
| #include "SkPathOpsBounds.h"
|
| #include "SkPathOpsCurve.h"
|
| +#include "SkTArray.h"
|
| #include "SkTDArray.h"
|
|
|
| class SkPathWriter;
|
| @@ -230,7 +231,7 @@ public:
|
| return xyAtT(span).fY;
|
| }
|
|
|
| - bool activeAngle(int index, int* done, SkTDArray<SkOpAngle>* angles);
|
| + bool activeAngle(int index, int* done, SkTArray<SkOpAngle, true>* angles);
|
| SkPoint activeLeftTop(bool onlySortable, int* firstT) const;
|
| bool activeOp(int index, int endIndex, int xorMiMask, int xorSuMask, SkPathOp op);
|
| bool activeOp(int xorMiMask, int xorSuMask, int index, int endIndex, SkPathOp op,
|
| @@ -294,7 +295,8 @@ public:
|
| kMustBeOrdered_SortAngleKind, // required for winding calc
|
| kMayBeUnordered_SortAngleKind // ok for find top
|
| };
|
| - static bool SortAngles(const SkTDArray<SkOpAngle>& angles, SkTDArray<SkOpAngle*>* angleList,
|
| + static bool SortAngles(const SkTArray<SkOpAngle, true>& angles,
|
| + SkTArray<SkOpAngle*, true>* angleList,
|
| SortAngleKind );
|
| bool subDivide(int start, int end, SkPoint edge[4]) const;
|
| bool subDivide(int start, int end, SkDCubic* result) const;
|
| @@ -315,9 +317,9 @@ public:
|
| void debugShowActiveSpans() const;
|
| #endif
|
| #if DEBUG_SORT || DEBUG_SWAP_TOP
|
| - void debugShowSort(const char* fun, const SkTDArray<SkOpAngle*>& angles, int first,
|
| + void debugShowSort(const char* fun, const SkTArray<SkOpAngle*, true>& angles, int first,
|
| const int contourWinding, const int oppContourWinding) const;
|
| - void debugShowSort(const char* fun, const SkTDArray<SkOpAngle*>& angles, int first);
|
| + void debugShowSort(const char* fun, const SkTArray<SkOpAngle*, true>& angles, int first);
|
| #endif
|
| #if DEBUG_CONCIDENT
|
| void debugShowTs() const;
|
| @@ -327,25 +329,25 @@ public:
|
| #endif
|
|
|
| private:
|
| - bool activeAngleOther(int index, int* done, SkTDArray<SkOpAngle>* angles);
|
| - bool activeAngleInner(int index, int* done, SkTDArray<SkOpAngle>* angles);
|
| - void addAngle(SkTDArray<SkOpAngle>* angles, int start, int end) const;
|
| + bool activeAngleOther(int index, int* done, SkTArray<SkOpAngle, true>* angles);
|
| + bool activeAngleInner(int index, int* done, SkTArray<SkOpAngle, true>* angles);
|
| + void addAngle(SkTArray<SkOpAngle, true>* angles, int start, int end) const;
|
| void addCancelOutsides(double tStart, double oStart, SkOpSegment* other, double oEnd);
|
| - void addCoinOutsides(const SkTDArray<double>& outsideTs, SkOpSegment* other, double oEnd);
|
| - void addTwoAngles(int start, int end, SkTDArray<SkOpAngle>* angles) const;
|
| + void addCoinOutsides(const SkTArray<double, true>& outsideTs, SkOpSegment* other, double oEnd);
|
| + void addTwoAngles(int start, int end, SkTArray<SkOpAngle, true>* angles) const;
|
| int advanceCoincidentOther(const SkOpSpan* test, double oEndT, int oIndex);
|
| int advanceCoincidentThis(const SkOpSpan* oTest, bool opp, int index);
|
| - void buildAngles(int index, SkTDArray<SkOpAngle>* angles, bool includeOpp) const;
|
| - void buildAnglesInner(int index, SkTDArray<SkOpAngle>* angles) const;
|
| + void buildAngles(int index, SkTArray<SkOpAngle, true>* angles, bool includeOpp) const;
|
| + void buildAnglesInner(int index, SkTArray<SkOpAngle, true>* angles) const;
|
| int bumpCoincidentThis(const SkOpSpan& oTest, bool opp, int index,
|
| - SkTDArray<double>* outsideTs);
|
| + SkTArray<double, true>* outsideTs);
|
| int bumpCoincidentOther(const SkOpSpan& test, double oEndT, int& oIndex,
|
| - SkTDArray<double>* oOutsideTs);
|
| + SkTArray<double, true>* oOutsideTs);
|
| bool bumpSpan(SkOpSpan* span, int windDelta, int oppDelta);
|
| bool clockwise(int tStart, int tEnd) const;
|
| void decrementSpan(SkOpSpan* span);
|
| bool equalPoints(int greaterTIndex, int lesserTIndex);
|
| - int findStartingEdge(const SkTDArray<SkOpAngle*>& sorted, int start, int end);
|
| + int findStartingEdge(const SkTArray<SkOpAngle*, true>& sorted, int start, int end);
|
| void init(const SkPoint pts[], SkPath::Verb verb, bool operand, bool evenOdd);
|
| void matchWindingValue(int tIndex, double t, bool borrowWind);
|
| SkOpSpan* markAndChaseDone(int index, int endIndex, int winding);
|
| @@ -365,7 +367,7 @@ private:
|
| SkOpSegment* nextChase(int* index, const int step, int* min, SkOpSpan** last);
|
| bool serpentine(int tStart, int tEnd) const;
|
| void subDivideBounds(int start, int end, SkPathOpsBounds* bounds) const;
|
| - static void TrackOutside(SkTDArray<double>* outsideTs, double end, double start);
|
| + static void TrackOutside(SkTArray<double, true>* outsideTs, double end, double start);
|
| int updateOppWinding(int index, int endIndex) const;
|
| int updateOppWinding(const SkOpAngle* angle) const;
|
| int updateWinding(int index, int endIndex) const;
|
| @@ -393,6 +395,7 @@ private:
|
|
|
| const SkPoint* fPts;
|
| SkPathOpsBounds fBounds;
|
| + // FIXME: can't convert to SkTArray because it uses insert
|
| SkTDArray<SkOpSpan> fTs; // two or more (always includes t=0 t=1)
|
| // OPTIMIZATION: could pack donespans, verb, operand, xor into 1 int-sized value
|
| int fDoneSpans; // quick check that segment is finished
|
|
|