1 /*
2  * Copyright 2018 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkPathOpsTCurve_DEFINED
9 #define SkPathOpsTCurve_DEFINED
10 
11 #include "src/pathops/SkPathOpsPoint.h"
12 
13 class SkArenaAlloc;
14 class SkIntersections;
15 
16 class SkTCurve {
17 public:
~SkTCurve()18     virtual ~SkTCurve() {}
19     virtual const SkDPoint& operator[](int n) const = 0;
20     virtual SkDPoint& operator[](int n) = 0;
21 
22     virtual bool collapsed() const = 0;
23     virtual bool controlsInside() const = 0;
24     virtual void debugInit() = 0;
25 #if DEBUG_T_SECT
26     virtual void dumpID(int id) const = 0;
27 #endif
28     virtual SkDVector dxdyAtT(double t) const = 0;
29     virtual bool hullIntersects(const SkDQuad& , bool* isLinear) const = 0;
30     virtual bool hullIntersects(const SkDConic& , bool* isLinear) const = 0;
31     virtual bool hullIntersects(const SkDCubic& , bool* isLinear) const = 0;
32     virtual bool hullIntersects(const SkTCurve& , bool* isLinear) const = 0;
33     virtual int intersectRay(SkIntersections* i, const SkDLine& line) const = 0;
34     virtual bool IsConic() const = 0;
35     virtual SkTCurve* make(SkArenaAlloc& ) const = 0;
36     virtual int maxIntersections() const = 0;
37     virtual void otherPts(int oddMan, const SkDPoint* endPt[2]) const = 0;
38     virtual int pointCount() const = 0;
39     virtual int pointLast() const = 0;
40     virtual SkDPoint ptAtT(double t) const = 0;
41     virtual void setBounds(SkDRect* ) const = 0;
42     virtual void subDivide(double t1, double t2, SkTCurve* curve) const = 0;
43 #ifdef SK_DEBUG
44     virtual SkOpGlobalState* globalState() const = 0;
45 #endif
46 };
47 
48 #endif
49