aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/pathops/SkPathWriter.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/pathops/SkPathWriter.h')
-rw-r--r--src/pathops/SkPathWriter.h53
1 files changed, 31 insertions, 22 deletions
diff --git a/src/pathops/SkPathWriter.h b/src/pathops/SkPathWriter.h
index 820ddc52b6..bd13c718a9 100644
--- a/src/pathops/SkPathWriter.h
+++ b/src/pathops/SkPathWriter.h
@@ -8,38 +8,47 @@
#define SkPathWriter_DEFINED
#include "SkPath.h"
+#include "SkTArray.h"
+#include "SkTDArray.h"
+
+class SkOpPtT;
+
+// Construct the path one contour at a time.
+// If the contour is closed, copy it to the final output.
+// Otherwise, keep the partial contour for later assembly.
class SkPathWriter {
public:
SkPathWriter(SkPath& path);
- void close();
- void conicTo(const SkPoint& pt1, const SkPoint& pt2, SkScalar weight);
- void cubicTo(const SkPoint& pt1, const SkPoint& pt2, const SkPoint& pt3);
- void deferredLine(const SkPoint& pt);
- void deferredMove(const SkPoint& pt);
- void deferredMoveLine(const SkPoint& pt);
- bool hasMove() const;
+ void assemble();
+ void conicTo(const SkPoint& pt1, const SkOpPtT* pt2, SkScalar weight);
+ void cubicTo(const SkPoint& pt1, const SkPoint& pt2, const SkOpPtT* pt3);
+ void deferredLine(const SkOpPtT* pt);
+ void deferredMove(const SkOpPtT* pt);
+ void finishContour();
+ bool hasMove() const { return !fFirstPtT; }
void init();
bool isClosed() const;
- bool isEmpty() const { return fEmpty; }
- void lineTo();
- const SkPath* nativePath() const;
- void nudge();
- void quadTo(const SkPoint& pt1, const SkPoint& pt2);
- bool someAssemblyRequired() const;
+ const SkPath* nativePath() const { return fPathPtr; }
+ void quadTo(const SkPoint& pt1, const SkOpPtT* pt2);
private:
- bool changedSlopes(const SkPoint& pt) const;
+ bool changedSlopes(const SkOpPtT* pt) const;
+ void close();
+ const SkTDArray<const SkOpPtT*>& endPtTs() const { return fEndPtTs; }
+ void lineTo();
+ bool matchedLast(const SkOpPtT*) const;
void moveTo();
+ const SkTArray<SkPath>& partials() const { return fPartials; }
+ bool someAssemblyRequired();
+ void update(const SkOpPtT* pt);
- SkPath* fPathPtr;
- SkPoint fDefer[2];
- SkPoint fFirstPt;
- int fCloses;
- int fMoves;
- bool fEmpty;
- bool fHasMove;
- bool fMoved;
+ SkPath fCurrent; // contour under construction
+ SkTArray<SkPath> fPartials; // contours with mismatched starts and ends
+ SkTDArray<const SkOpPtT*> fEndPtTs; // possible pt values for partial starts and ends
+ SkPath* fPathPtr; // closed contours are written here
+ const SkOpPtT* fDefer[2]; // [0] deferred move, [1] deferred line
+ const SkOpPtT* fFirstPtT; // first in current contour
};
#endif /* defined(__PathOps__SkPathWriter__) */