8#ifndef SkPathOpsConic_DEFINED
9#define SkPathOpsConic_DEFINED
92 bool isLinear(
int startIndex,
int endIndex)
const {
128 return conic.subDivide(t1, t2);
136 double t1,
double t2,
SkScalar* newWeight) {
138 conic.set(pts, weight);
139 return conic.subDivide(
a, c, t1, t2, newWeight);
144 void dumpID(
int id)
const;
168 void dumpID(
int id)
const override {
return fConic.
dumpID(
id); }
187 bool IsConic()
const override {
return true; }
#define SkDEBUGPARAMS(...)
auto make(Ctor &&ctor) -> decltype(ctor(nullptr))
int intersectRay(SkIntersections *i, const SkDLine &line) const override
const SkDPoint & operator[](int n) const override
int pointLast() const override
SkDVector dxdyAtT(double t) const override
bool controlsInside() const override
bool IsConic() const override
SkDPoint ptAtT(double t) const override
bool hullIntersects(const SkTCurve &curve, bool *isLinear) const override
bool hullIntersects(const SkDQuad &quad, bool *isLinear) const override
void setBounds(SkDRect *) const override
void subDivide(double t1, double t2, SkTCurve *curve) const override
int maxIntersections() const override
bool hullIntersects(const SkDConic &conic, bool *isLinear) const override
SkTConic(const SkDConic &c)
void otherPts(int oddMan, const SkDPoint *endPt[2]) const override
SkTCurve * make(SkArenaAlloc &heap) const override
int pointCount() const override
void debugInit() override
SkDPoint & operator[](int n) override
bool collapsed() const override
virtual bool hullIntersects(const SkDQuad &, bool *isLinear) const =0
SkDPoint & operator[](int n)
SkDPoint ptAtT(double t) const
static int RootsValidT(const double A, const double B, const double C, double s[2])
const SkDConic & set(const SkPoint pts[kPointCount], SkScalar weight SkDEBUGPARAMS(SkOpGlobalState *state=nullptr))
bool hullIntersects(const SkDConic &conic, bool *isLinear) const
static SkDPoint SubDivide(const SkPoint pts[kPointCount], SkScalar weight, const SkDPoint &a, const SkDPoint &c, double t1, double t2, SkScalar *newWeight)
void otherPts(int oddMan, const SkDPoint *endPt[2]) const
bool controlsInside() const
static int FindExtrema(const double src[], SkScalar weight, double tValue[1])
static const int kPointCount
void align(int endIndex, SkDPoint *dstPt) const
void subDivide(double t1, double t2, SkDConic *c) const
static int maxIntersections()
static const int kMaxIntersections
static int AddValidTs(double s[], int realRoots, double *t)
static const int kPointLast
bool monotonicInY() const
static SkDConic SubDivide(const SkPoint a[kPointCount], SkScalar weight, double t1, double t2)
void dumpID(int id) const
bool monotonicInX() const
SkDConic subDivide(double t1, double t2) const
bool isLinear(int startIndex, int endIndex) const
SkDVector dxdyAtT(double t) const
static int RootsReal(double A, double B, double C, double t[2])
void debugSet(const SkDPoint *pts, SkScalar weight)
bool hullIntersects(const SkDQuad &quad, bool *isLinear) const
const SkDPoint & operator[](int n) const
static int RootsValidT(const double A, const double B, const double C, double s[2])
bool monotonicInY() const
void otherPts(int oddMan, const SkDPoint *endPt[2]) const
const SkDQuad & set(const SkPoint pts[kPointCount] SkDEBUGPARAMS(SkOpGlobalState *state=nullptr))
bool isLinear(int startIndex, int endIndex) const
static int RootsReal(double A, double B, double C, double t[2])
void align(int endIndex, SkDPoint *dstPt) const
bool controlsInside() const
static int AddValidTs(double s[], int realRoots, double *t)
bool monotonicInX() const
bool hullIntersects(const SkDQuad &, bool *isLinear) const