1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #ifndef SkPathParts_DEFINED 11 #define SkPathParts_DEFINED 12 13 #include "SkDisplayable.h" 14 #include "SkMemberInfo.h" 15 #include "SkPath.h" 16 17 class SkDrawPath; 18 class SkDrawMatrix; 19 20 class SkPathPart : public SkDisplayable { 21 public: 22 SkPathPart(); 23 virtual bool add() = 0; 24 virtual void dirty(); 25 virtual SkDisplayable* getParent() const; 26 virtual bool setParent(SkDisplayable* parent); 27 #ifdef SK_DEBUG isPathPart()28 virtual bool isPathPart() const { return true; } 29 #endif 30 protected: 31 SkDrawPath* fPath; 32 }; 33 34 class SkMoveTo : public SkPathPart { 35 DECLARE_MEMBER_INFO(MoveTo); 36 SkMoveTo(); 37 bool add() override; 38 protected: 39 SkScalar x; 40 SkScalar y; 41 }; 42 43 class SkRMoveTo : public SkMoveTo { 44 DECLARE_MEMBER_INFO(RMoveTo); 45 bool add() override; 46 private: 47 typedef SkMoveTo INHERITED; 48 }; 49 50 class SkLineTo : public SkPathPart { 51 DECLARE_MEMBER_INFO(LineTo); 52 SkLineTo(); 53 bool add() override; 54 protected: 55 SkScalar x; 56 SkScalar y; 57 }; 58 59 class SkRLineTo : public SkLineTo { 60 DECLARE_MEMBER_INFO(RLineTo); 61 bool add() override; 62 private: 63 typedef SkLineTo INHERITED; 64 }; 65 66 class SkQuadTo : public SkPathPart { 67 DECLARE_MEMBER_INFO(QuadTo); 68 SkQuadTo(); 69 bool add() override; 70 protected: 71 SkScalar x1; 72 SkScalar y1; 73 SkScalar x2; 74 SkScalar y2; 75 }; 76 77 class SkRQuadTo : public SkQuadTo { 78 DECLARE_MEMBER_INFO(RQuadTo); 79 bool add() override; 80 private: 81 typedef SkQuadTo INHERITED; 82 }; 83 84 class SkCubicTo : public SkPathPart { 85 DECLARE_MEMBER_INFO(CubicTo); 86 SkCubicTo(); 87 bool add() override; 88 protected: 89 SkScalar x1; 90 SkScalar y1; 91 SkScalar x2; 92 SkScalar y2; 93 SkScalar x3; 94 SkScalar y3; 95 }; 96 97 class SkRCubicTo : public SkCubicTo { 98 DECLARE_MEMBER_INFO(RCubicTo); 99 bool add() override; 100 private: 101 typedef SkCubicTo INHERITED; 102 }; 103 104 class SkClose : public SkPathPart { 105 DECLARE_EMPTY_MEMBER_INFO(Close); 106 bool add() override; 107 }; 108 109 class SkAddGeom : public SkPathPart { 110 DECLARE_PRIVATE_MEMBER_INFO(AddGeom); 111 SkAddGeom(); 112 protected: 113 int /*SkPath::Direction*/ direction; 114 }; 115 116 class SkAddRect : public SkAddGeom { 117 DECLARE_MEMBER_INFO(AddRect); 118 SkAddRect(); 119 bool add() override; 120 protected: 121 SkRect fRect; 122 private: 123 typedef SkAddGeom INHERITED; 124 }; 125 126 class SkAddOval : public SkAddRect { 127 DECLARE_MEMBER_INFO(AddOval); 128 bool add() override; 129 private: 130 typedef SkAddRect INHERITED; 131 }; 132 133 class SkAddCircle : public SkAddGeom { 134 DECLARE_MEMBER_INFO(AddCircle); 135 SkAddCircle(); 136 bool add() override; 137 private: 138 SkScalar radius; 139 SkScalar x; 140 SkScalar y; 141 typedef SkAddGeom INHERITED; 142 }; 143 144 class SkAddRoundRect : public SkAddRect { 145 DECLARE_MEMBER_INFO(AddRoundRect); 146 SkAddRoundRect(); 147 bool add() override; 148 private: 149 SkScalar rx; 150 SkScalar ry; 151 typedef SkAddRect INHERITED; 152 }; 153 154 class SkAddPath : public SkPathPart { 155 DECLARE_MEMBER_INFO(AddPath); 156 SkAddPath(); 157 bool add() override; 158 private: 159 typedef SkPathPart INHERITED; 160 SkDrawMatrix* matrix; 161 SkDrawPath* path; 162 }; 163 164 #endif // SkPathParts_DEFINED 165