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 #include "SkPathParts.h" 11 #include "SkAnimateMaker.h" 12 #include "SkDrawMatrix.h" 13 #include "SkDrawRectangle.h" 14 #include "SkDrawPath.h" 15 16 SkPathPart::SkPathPart() : fPath(nullptr) { 17 } 18 19 void SkPathPart::dirty() { 20 fPath->dirty(); 21 } 22 23 SkDisplayable* SkPathPart::getParent() const { 24 return fPath; 25 } 26 27 bool SkPathPart::setParent(SkDisplayable* parent) { 28 SkASSERT(parent != nullptr); 29 if (parent->isPath() == false) 30 return true; 31 fPath = (SkDrawPath*) parent; 32 return false; 33 } 34 35 // MoveTo 36 #if SK_USE_CONDENSED_INFO == 0 37 38 const SkMemberInfo SkMoveTo::fInfo[] = { 39 SK_MEMBER(x, Float), 40 SK_MEMBER(y, Float) 41 }; 42 43 #endif 44 45 DEFINE_GET_MEMBER(SkMoveTo); 46 47 SkMoveTo::SkMoveTo() : x(0), y(0) { 48 } 49 50 bool SkMoveTo::add() { 51 fPath->fPath.moveTo(x, y); 52 return false; 53 } 54 55 56 // RMoveTo 57 #if SK_USE_CONDENSED_INFO == 0 58 59 const SkMemberInfo SkRMoveTo::fInfo[] = { 60 SK_MEMBER_INHERITED 61 }; 62 63 #endif 64 65 DEFINE_GET_MEMBER(SkRMoveTo); 66 67 bool SkRMoveTo::add() { 68 fPath->fPath.rMoveTo(x, y); 69 return false; 70 } 71 72 73 // LineTo 74 #if SK_USE_CONDENSED_INFO == 0 75 76 const SkMemberInfo SkLineTo::fInfo[] = { 77 SK_MEMBER(x, Float), 78 SK_MEMBER(y, Float) 79 }; 80 81 #endif 82 83 DEFINE_GET_MEMBER(SkLineTo); 84 85 SkLineTo::SkLineTo() : x(0), y(0) { 86 } 87 88 bool SkLineTo::add() { 89 fPath->fPath.lineTo(x, y); 90 return false; 91 } 92 93 94 // RLineTo 95 #if SK_USE_CONDENSED_INFO == 0 96 97 const SkMemberInfo SkRLineTo::fInfo[] = { 98 SK_MEMBER_INHERITED 99 }; 100 101 #endif 102 103 DEFINE_GET_MEMBER(SkRLineTo); 104 105 bool SkRLineTo::add() { 106 fPath->fPath.rLineTo(x, y); 107 return false; 108 } 109 110 111 // QuadTo 112 #if SK_USE_CONDENSED_INFO == 0 113 114 const SkMemberInfo SkQuadTo::fInfo[] = { 115 SK_MEMBER(x1, Float), 116 SK_MEMBER(x2, Float), 117 SK_MEMBER(y1, Float), 118 SK_MEMBER(y2, Float) 119 }; 120 121 #endif 122 123 DEFINE_GET_MEMBER(SkQuadTo); 124 125 SkQuadTo::SkQuadTo() : x1(0), y1(0), x2(0), y2(0) { 126 } 127 128 bool SkQuadTo::add() { 129 fPath->fPath.quadTo(x1, y1, x2, y2); 130 return false; 131 } 132 133 134 // RQuadTo 135 #if SK_USE_CONDENSED_INFO == 0 136 137 const SkMemberInfo SkRQuadTo::fInfo[] = { 138 SK_MEMBER_INHERITED 139 }; 140 141 #endif 142 143 DEFINE_GET_MEMBER(SkRQuadTo); 144 145 bool SkRQuadTo::add() { 146 fPath->fPath.rQuadTo(x1, y1, x2, y2); 147 return false; 148 } 149 150 151 // CubicTo 152 #if SK_USE_CONDENSED_INFO == 0 153 154 const SkMemberInfo SkCubicTo::fInfo[] = { 155 SK_MEMBER(x1, Float), 156 SK_MEMBER(x2, Float), 157 SK_MEMBER(x3, Float), 158 SK_MEMBER(y1, Float), 159 SK_MEMBER(y2, Float), 160 SK_MEMBER(y3, Float) 161 }; 162 163 #endif 164 165 DEFINE_GET_MEMBER(SkCubicTo); 166 167 SkCubicTo::SkCubicTo() : x1(0), y1(0), x2(0), y2(0), x3(0), y3(0) { 168 } 169 170 bool SkCubicTo::add() { 171 fPath->fPath.cubicTo(x1, y1, x2, y2, x3, y3); 172 return false; 173 } 174 175 176 // RCubicTo 177 #if SK_USE_CONDENSED_INFO == 0 178 179 const SkMemberInfo SkRCubicTo::fInfo[] = { 180 SK_MEMBER_INHERITED 181 }; 182 183 #endif 184 185 DEFINE_GET_MEMBER(SkRCubicTo); 186 187 bool SkRCubicTo::add() { 188 fPath->fPath.rCubicTo(x1, y1, x2, y2, x3, y3); 189 return false; 190 } 191 192 193 // SkClose 194 bool SkClose::add() { 195 fPath->fPath.close(); 196 return false; 197 } 198 199 200 // SkAddGeom 201 #if SK_USE_CONDENSED_INFO == 0 202 203 const SkMemberInfo SkAddGeom::fInfo[] = { 204 SK_MEMBER(direction, PathDirection) 205 }; 206 207 #endif 208 209 DEFINE_GET_MEMBER(SkAddGeom); 210 211 SkAddGeom::SkAddGeom() : direction(SkPath::kCCW_Direction) { 212 } 213 214 #if SK_USE_CONDENSED_INFO == 0 215 216 const SkMemberInfo SkAddRect::fInfo[] = { 217 SK_MEMBER_INHERITED, 218 SK_MEMBER_ALIAS(bottom, fRect.fBottom, Float), 219 SK_MEMBER_ALIAS(left, fRect.fLeft, Float), 220 SK_MEMBER_ALIAS(right, fRect.fRight, Float), 221 SK_MEMBER_ALIAS(top, fRect.fTop, Float) 222 }; 223 224 #endif 225 226 DEFINE_GET_MEMBER(SkAddRect); 227 228 SkAddRect::SkAddRect() { 229 fRect.setEmpty(); 230 } 231 232 bool SkAddRect::add() { 233 fPath->fPath.addRect(fRect, (SkPath::Direction) direction); 234 return false; 235 } 236 237 238 #if SK_USE_CONDENSED_INFO == 0 239 240 const SkMemberInfo SkAddOval::fInfo[] = { 241 SK_MEMBER_INHERITED 242 }; 243 244 #endif 245 246 DEFINE_GET_MEMBER(SkAddOval); 247 248 bool SkAddOval::add() { 249 fPath->fPath.addOval(fRect, (SkPath::Direction) direction); 250 return false; 251 } 252 253 254 #if SK_USE_CONDENSED_INFO == 0 255 256 const SkMemberInfo SkAddCircle::fInfo[] = { 257 SK_MEMBER_INHERITED, 258 SK_MEMBER(radius, Float), 259 SK_MEMBER(x, Float), 260 SK_MEMBER(y, Float) 261 }; 262 263 #endif 264 265 DEFINE_GET_MEMBER(SkAddCircle); 266 267 SkAddCircle::SkAddCircle() : radius(0), x(0), y(0) { 268 } 269 270 bool SkAddCircle::add() { 271 fPath->fPath.addCircle(x, y, radius, (SkPath::Direction) direction); 272 return false; 273 } 274 275 276 #if SK_USE_CONDENSED_INFO == 0 277 278 const SkMemberInfo SkAddRoundRect::fInfo[] = { 279 SK_MEMBER_INHERITED, 280 SK_MEMBER(rx, Float), 281 SK_MEMBER(ry, Float) 282 }; 283 284 #endif 285 286 DEFINE_GET_MEMBER(SkAddRoundRect); 287 288 SkAddRoundRect::SkAddRoundRect() : rx(0), ry(0) { 289 } 290 291 bool SkAddRoundRect::add() { 292 fPath->fPath.addRoundRect(fRect, rx, ry, (SkPath::Direction) direction); 293 return false; 294 } 295 296 297 #if SK_USE_CONDENSED_INFO == 0 298 299 const SkMemberInfo SkAddPath::fInfo[] = { 300 SK_MEMBER(matrix, Matrix), 301 SK_MEMBER(path, Path) 302 }; 303 304 #endif 305 306 DEFINE_GET_MEMBER(SkAddPath); 307 308 SkAddPath::SkAddPath() : matrix(nullptr), path(nullptr) { 309 } 310 311 bool SkAddPath::add() { 312 SkASSERT (path != nullptr); 313 if (matrix) 314 fPath->fPath.addPath(path->fPath, matrix->getMatrix()); 315 else 316 fPath->fPath.addPath(path->fPath); 317 return false; 318 } 319