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 
SkPathPart()16 SkPathPart::SkPathPart() : fPath(nullptr) {
17 }
18 
dirty()19 void SkPathPart::dirty() {
20     fPath->dirty();
21 }
22 
getParent() const23 SkDisplayable* SkPathPart::getParent() const {
24     return fPath;
25 }
26 
setParent(SkDisplayable * parent)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 
SkMoveTo()47 SkMoveTo::SkMoveTo() : x(0), y(0) {
48 }
49 
add()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 
add()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 
SkLineTo()85 SkLineTo::SkLineTo() : x(0), y(0) {
86 }
87 
add()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 
add()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 
SkQuadTo()125 SkQuadTo::SkQuadTo() : x1(0), y1(0), x2(0), y2(0) {
126 }
127 
add()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 
add()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 
SkCubicTo()167 SkCubicTo::SkCubicTo() : x1(0), y1(0), x2(0), y2(0), x3(0), y3(0) {
168 }
169 
add()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 
add()187 bool SkRCubicTo::add() {
188     fPath->fPath.rCubicTo(x1, y1, x2, y2, x3, y3);
189     return false;
190 }
191 
192 
193 // SkClose
add()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 
SkAddGeom()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 
SkAddRect()228 SkAddRect::SkAddRect() {
229     fRect.setEmpty();
230 }
231 
add()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 
add()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 
SkAddCircle()267 SkAddCircle::SkAddCircle() : radius(0), x(0), y(0) {
268 }
269 
add()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 
SkAddRoundRect()288 SkAddRoundRect::SkAddRoundRect() : rx(0), ry(0) {
289 }
290 
add()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 
SkAddPath()308 SkAddPath::SkAddPath() : matrix(nullptr), path(nullptr) {
309 }
310 
add()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