Index: src/pathops/SkIntersections.h |
diff --git a/src/pathops/SkIntersections.h b/src/pathops/SkIntersections.h |
index 15bac19defdf2a45078187f587751ba1d3ede028..57fb49bcd2d3525970b89063f826d1a06c72a6e0 100644 |
--- a/src/pathops/SkIntersections.h |
+++ b/src/pathops/SkIntersections.h |
@@ -7,6 +7,7 @@ |
#ifndef SkIntersections_DEFINE |
#define SkIntersections_DEFINE |
+#include "SkPathOpsConic.h" |
#include "SkPathOpsCubic.h" |
#include "SkPathOpsLine.h" |
#include "SkPathOpsPoint.h" |
@@ -49,6 +50,31 @@ public: |
fIsCoincident[1] &= ~bit; |
} |
+ int conicHorizontal(const SkPoint a[3], SkScalar weight, SkScalar left, SkScalar right, |
+ SkScalar y, bool flipped) { |
+ SkDConic conic; |
+ conic.set(a, weight); |
+ fMax = 2; |
+ return horizontal(conic, left, right, y, flipped); |
+ } |
+ |
+ int conicVertical(const SkPoint a[3], SkScalar weight, SkScalar top, SkScalar bottom, |
+ SkScalar x, bool flipped) { |
+ SkDConic conic; |
+ conic.set(a, weight); |
+ fMax = 2; |
+ return vertical(conic, top, bottom, x, flipped); |
+ } |
+ |
+ int conicLine(const SkPoint a[3], SkScalar weight, const SkPoint b[2]) { |
+ SkDConic conic; |
+ conic.set(a, weight); |
+ SkDLine line; |
+ line.set(b); |
+ fMax = 3; // 2; permit small coincident segment + non-coincident intersection |
+ return intersect(conic, line); |
+ } |
+ |
int cubicHorizontal(const SkPoint a[4], SkScalar left, SkScalar right, SkScalar y, |
bool flipped) { |
SkDCubic cubic; |
@@ -206,6 +232,7 @@ public: |
int horizontal(const SkDQuad&, double left, double right, double y, bool flipped); |
int horizontal(const SkDQuad&, double left, double right, double y, double tRange[2]); |
int horizontal(const SkDCubic&, double y, double tRange[3]); |
+ int horizontal(const SkDConic&, double left, double right, double y, bool flipped); |
int horizontal(const SkDCubic&, double left, double right, double y, bool flipped); |
int horizontal(const SkDCubic&, double left, double right, double y, double tRange[3]); |
// FIXME : does not respect swap |
@@ -216,10 +243,16 @@ public: |
int intersect(const SkDLine&, const SkDLine&); |
int intersect(const SkDQuad&, const SkDLine&); |
int intersect(const SkDQuad&, const SkDQuad&); |
+ int intersect(const SkDConic&, const SkDLine&); |
+ int intersect(const SkDConic&, const SkDQuad&); |
+ int intersect(const SkDConic&, const SkDConic&); |
int intersect(const SkDCubic&, const SkDLine&); |
+ int intersect(const SkDCubic&, const SkDQuad&); |
+ int intersect(const SkDCubic&, const SkDConic&); |
int intersect(const SkDCubic&, const SkDCubic&); |
int intersectRay(const SkDLine&, const SkDLine&); |
int intersectRay(const SkDQuad&, const SkDLine&); |
+ int intersectRay(const SkDConic&, const SkDLine&); |
int intersectRay(const SkDCubic&, const SkDLine&); |
void merge(const SkIntersections& , int , const SkIntersections& , int ); |
int mostOutside(double rangeStart, double rangeEnd, const SkDPoint& origin) const; |
@@ -228,10 +261,16 @@ public: |
void setCoincident(int index); |
int vertical(const SkDLine&, double top, double bottom, double x, bool flipped); |
int vertical(const SkDQuad&, double top, double bottom, double x, bool flipped); |
+ int vertical(const SkDConic&, double top, double bottom, double x, bool flipped); |
int vertical(const SkDCubic&, double top, double bottom, double x, bool flipped); |
- int verticalCubic(const SkPoint a[4], SkScalar top, SkScalar bottom, SkScalar x, bool flipped); |
- int verticalLine(const SkPoint a[2], SkScalar top, SkScalar bottom, SkScalar x, bool flipped); |
- int verticalQuad(const SkPoint a[3], SkScalar top, SkScalar bottom, SkScalar x, bool flipped); |
+ int verticalConic(const SkPoint a[3], SkScalar weight, SkScalar top, SkScalar bottom, |
+ SkScalar x, bool flipped); |
+ int verticalCubic(const SkPoint a[4], SkScalar weight, SkScalar top, SkScalar bottom, |
+ SkScalar x, bool flipped); |
+ int verticalLine(const SkPoint a[2], SkScalar weight, SkScalar top, SkScalar bottom, |
+ SkScalar x, bool flipped); |
+ int verticalQuad(const SkPoint a[3], SkScalar weight, SkScalar top, SkScalar bottom, |
+ SkScalar x, bool flipped); |
int depth() const { |
#ifdef SK_DEBUG |
@@ -264,7 +303,7 @@ private: |
#endif |
}; |
-extern int (SkIntersections::* const CurveVertical[])(const SkPoint[], SkScalar top, SkScalar bottom, |
- SkScalar x, bool flipped); |
+extern int (SkIntersections::* const CurveVertical[])(const SkPoint[], SkScalar weight, |
+ SkScalar top, SkScalar bottom, SkScalar x, bool flipped); |
#endif |