8#ifndef SkPathOpsQuad_DEFINED
9#define SkPathOpsQuad_DEFINED
49 return v02.
dot(v01) > 0 && v02.
dot(v12) > 0;
77 static int AddValidTs(
double s[],
int realRoots,
double* t);
96 bool isLinear(
int startIndex,
int endIndex)
const;
104 static int RootsReal(
double A,
double B,
double C,
double t[2]);
105 static int RootsValidT(
const double A,
const double B,
const double C,
double s[2]);
106 static void SetABC(
const double* quad,
double*
a,
double*
b,
double* c);
117 double t1,
double t2) {
132 void dumpID(
int id)
const;
158 void dumpID(
int id)
const override {
return fQuad.
dumpID(
id); }
177 bool IsConic()
const override {
return false; }
sk_bzero(glyphs, sizeof(glyphs))
#define SkDEBUGPARAMS(...)
SkDEBUGCODE(SK_SPI) SkThreadID SkGetThreadID()
auto make(Ctor &&ctor) -> decltype(ctor(nullptr))
virtual bool hullIntersects(const SkDQuad &, bool *isLinear) const =0
bool IsConic() const override
int pointCount() const override
void debugInit() override
bool hullIntersects(const SkDQuad &quad, bool *isLinear) const override
bool collapsed() const override
bool hullIntersects(const SkTCurve &curve, bool *isLinear) const override
void setBounds(SkDRect *) const override
SkDPoint & operator[](int n) override
SkDVector dxdyAtT(double t) const override
int maxIntersections() const override
int intersectRay(SkIntersections *i, const SkDLine &line) const override
void subDivide(double t1, double t2, SkTCurve *curve) const override
SkTQuad(const SkDQuad &q)
SkTCurve * make(SkArenaAlloc &heap) const override
bool controlsInside() const override
const SkDPoint & operator[](int n) const override
int pointLast() const override
SkDPoint ptAtT(double t) const override
void otherPts(int oddMan, const SkDPoint *endPt[2]) const override
bool approximatelyEqual(const SkDPoint &a) const
const SkDQuad & first() const
const SkDQuad & second() 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
void dumpID(int id) const
const SkDQuad & set(const SkPoint pts[kPointCount] SkDEBUGPARAMS(SkOpGlobalState *state=nullptr))
bool isLinear(int startIndex, int endIndex) const
static SkDQuad SubDivide(const SkPoint a[kPointCount], double t1, double t2)
static int RootsReal(double A, double B, double C, double t[2])
void debugSet(const SkDPoint *pts)
SkDQuadPair chopAt(double t) const
SkDQuad subDivide(double t1, double t2) const
void align(int endIndex, SkDPoint *dstPt) const
static const int kMaxIntersections
SkDPoint & operator[](int n)
bool controlsInside() const
static int AddValidTs(double s[], int realRoots, double *t)
bool monotonicInX() const
bool hullIntersects(const SkDQuad &, bool *isLinear) const
static int FindExtrema(const double src[], double tValue[1])
SkDPoint ptAtT(double t) const
const SkDPoint & operator[](int n) const
SkDPoint fPts[kPointCount]
SkDVector dxdyAtT(double t) const
static SkDPoint SubDivide(const SkPoint pts[kPointCount], const SkDPoint &a, const SkDPoint &c, double t1, double t2)
int verticalIntersect(double xIntercept, double roots[2]) const
SkDCubic debugToCubic() const
static void SetABC(const double *quad, double *a, double *b, double *c)
void subDivide(double t1, double t2, SkDQuad *quad) const
int horizontalIntersect(double yIntercept, double roots[2]) const
static int maxIntersections()
static const int kPointCount
static const int kPointLast
double dot(const SkDVector &a) const