OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #ifndef SkPath_DEFINED | 10 #ifndef SkPath_DEFINED |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
229 } | 229 } |
230 | 230 |
231 /** | 231 /** |
232 * Returns true if the path specifies a single line (i.e. it contains just | 232 * Returns true if the path specifies a single line (i.e. it contains just |
233 * a moveTo and a lineTo). If so, and line[] is not null, it sets the 2 | 233 * a moveTo and a lineTo). If so, and line[] is not null, it sets the 2 |
234 * points in line[] to the end-points of the line. If the path is not a | 234 * points in line[] to the end-points of the line. If the path is not a |
235 * line, returns false and ignores line[]. | 235 * line, returns false and ignores line[]. |
236 */ | 236 */ |
237 bool isLine(SkPoint line[2]) const; | 237 bool isLine(SkPoint line[2]) const; |
238 | 238 |
239 enum Direction { | |
240 /** Direction either has not been or could not be computed */ | |
241 kUnknown_Direction, | |
242 /** clockwise direction for adding closed contours */ | |
243 kCW_Direction, | |
244 /** counter-clockwise direction for adding closed contours */ | |
245 kCCW_Direction, | |
246 }; | |
247 | |
239 /** Returns true if the path specifies a rectangle. If so, and if rect is | 248 /** Returns true if the path specifies a rectangle. If so, and if rect is |
240 not null, set rect to the bounds of the path. If the path does not | 249 not null, set rect to the bounds of the path. If the path does not |
241 specify a rectangle, return false and ignore rect. | 250 specify a rectangle, return false and ignore rect. |
242 | 251 |
243 @param rect If not null, returns the bounds of the path if it specifies | 252 @param rect If not null, returns the bounds of the path if it specifies |
244 a rectangle | 253 a rectangle |
245 @return true if the path specifies a rectangle | 254 @return true if the path specifies a rectangle |
246 */ | 255 */ |
247 bool isRect(SkRect* rect) const; | 256 bool isRect(SkRect* rect) const { |
257 return this->isRect(rect, NULL, NULL); | |
258 } | |
259 | |
260 /** | |
261 * Returns true if the path specifies a rectangle. | |
262 * | |
263 * If this returns false, then all output parameters are ignored, and left | |
264 * unchanged. If this returns true, then each of the output parameters | |
265 * are checked for NULL. If they are not, they return their value. | |
266 * | |
267 * @param rect If not null, set to the bounds of the rectangle | |
268 * @param isClosed If not null, set to true if the path is closed | |
269 * @param direction If not null, set to the rectangle's direction | |
270 * @return true if the path specifies a rectangle | |
271 */ | |
272 bool isRect(SkRect* rect, bool* isClosed, Direction* direction) const; | |
Stephen Chennney
2013/06/21 17:19:05
Is isClosed implied by a true return value? On oth
reed1
2013/06/21 17:24:03
move line line line line
that path is not closed,
| |
273 | |
274 /** Returns true if the path specifies a pair of nested rectangles. If so, a nd if | |
275 rect is not null, set rect[0] to the outer rectangle and rect[1] to the inn er | |
276 rectangle. If so, and dirs is not null, set dirs[0] to the direction of | |
277 the outer rectangle and dirs[1] to the direction of the inner rectangle. If | |
278 the path does not specify a pair of nested rectangles, return | |
279 false and ignore rect and dirs. | |
280 | |
281 @param rect If not null, returns the path as a pair of nested rectangles | |
282 @param dirs If not null, returns the direction of the rects | |
283 @return true if the path describes a pair of nested rectangles | |
284 */ | |
285 bool isNestedRects(SkRect rect[2], Direction dirs[2] = NULL) const; | |
248 | 286 |
249 /** Return the number of points in the path | 287 /** Return the number of points in the path |
250 */ | 288 */ |
251 int countPoints() const; | 289 int countPoints() const; |
252 | 290 |
253 /** Return the point at the specified index. If the index is out of range | 291 /** Return the point at the specified index. If the index is out of range |
254 (i.e. is not 0 <= index < countPoints()) then the returned coordinates | 292 (i.e. is not 0 <= index < countPoints()) then the returned coordinates |
255 will be (0,0) | 293 will be (0,0) |
256 */ | 294 */ |
257 SkPoint getPoint(int index) const; | 295 SkPoint getPoint(int index) const; |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
493 */ | 531 */ |
494 void arcTo(const SkPoint p1, const SkPoint p2, SkScalar radius) { | 532 void arcTo(const SkPoint p1, const SkPoint p2, SkScalar radius) { |
495 this->arcTo(p1.fX, p1.fY, p2.fX, p2.fY, radius); | 533 this->arcTo(p1.fX, p1.fY, p2.fX, p2.fY, radius); |
496 } | 534 } |
497 | 535 |
498 /** Close the current contour. If the current point is not equal to the | 536 /** Close the current contour. If the current point is not equal to the |
499 first point of the contour, a line segment is automatically added. | 537 first point of the contour, a line segment is automatically added. |
500 */ | 538 */ |
501 void close(); | 539 void close(); |
502 | 540 |
503 enum Direction { | |
504 /** Direction either has not been or could not be computed */ | |
505 kUnknown_Direction, | |
506 /** clockwise direction for adding closed contours */ | |
507 kCW_Direction, | |
508 /** counter-clockwise direction for adding closed contours */ | |
509 kCCW_Direction, | |
510 }; | |
511 | |
512 /** | 541 /** |
513 * Return the opposite of the specified direction. kUnknown is its own | 542 * Return the opposite of the specified direction. kUnknown is its own |
514 * opposite. | 543 * opposite. |
515 */ | 544 */ |
516 static Direction OppositeDirection(Direction dir) { | 545 static Direction OppositeDirection(Direction dir) { |
517 static const Direction gOppositeDir[] = { | 546 static const Direction gOppositeDir[] = { |
518 kUnknown_Direction, kCCW_Direction, kCW_Direction | 547 kUnknown_Direction, kCCW_Direction, kCW_Direction |
519 }; | 548 }; |
520 return gOppositeDir[dir]; | 549 return gOppositeDir[dir]; |
521 } | 550 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
566 * cheapComputDirection() and if that computed direction matches the | 595 * cheapComputDirection() and if that computed direction matches the |
567 * specified direction. If dir is kUnknown, returns true if the direction | 596 * specified direction. If dir is kUnknown, returns true if the direction |
568 * cannot be computed. | 597 * cannot be computed. |
569 */ | 598 */ |
570 bool cheapIsDirection(Direction dir) const { | 599 bool cheapIsDirection(Direction dir) const { |
571 Direction computedDir = kUnknown_Direction; | 600 Direction computedDir = kUnknown_Direction; |
572 (void)this->cheapComputeDirection(&computedDir); | 601 (void)this->cheapComputeDirection(&computedDir); |
573 return computedDir == dir; | 602 return computedDir == dir; |
574 } | 603 } |
575 | 604 |
576 /** Returns true if the path specifies a rectangle. If so, and if isClosed i s | |
577 not null, set isClosed to true if the path is closed. Also, if returning true | |
578 and direction is not null, return the rect direction. If the path does n ot | |
579 specify a rectangle, return false and ignore isClosed and direction. | |
580 | |
581 @param isClosed If not null, set to true if the path is closed | |
582 @param direction If not null, set to the rectangle's direction | |
583 @return true if the path specifies a rectangle | |
584 */ | |
585 bool isRect(bool* isClosed, Direction* direction) const; | |
586 | |
587 /** Returns true if the path specifies a pair of nested rectangles. If so, a nd if | |
588 rect is not null, set rect[0] to the outer rectangle and rect[1] to the inner | |
589 rectangle. If so, and dirs is not null, set dirs[0] to the direction of | |
590 the outer rectangle and dirs[1] to the direction of the inner rectangle. If | |
591 the path does not specify a pair of nested rectangles, return | |
592 false and ignore rect and dirs. | |
593 | |
594 @param rect If not null, returns the path as a pair of nested rectangles | |
595 @param dirs If not null, returns the direction of the rects | |
596 @return true if the path describes a pair of nested rectangles | |
597 */ | |
598 bool isNestedRects(SkRect rect[2], Direction dirs[2] = NULL) const; | |
599 | |
600 /** | 605 /** |
601 * Add a closed rectangle contour to the path | 606 * Add a closed rectangle contour to the path |
602 * @param rect The rectangle to add as a closed contour to the path | 607 * @param rect The rectangle to add as a closed contour to the path |
603 * @param dir The direction to wind the rectangle's contour. Cannot be | 608 * @param dir The direction to wind the rectangle's contour. Cannot be |
604 * kUnknown_Direction. | 609 * kUnknown_Direction. |
605 */ | 610 */ |
606 void addRect(const SkRect& rect, Direction dir = kCW_Direction); | 611 void addRect(const SkRect& rect, Direction dir = kCW_Direction); |
607 | 612 |
608 /** | 613 /** |
609 * Add a closed rectangle contour to the path | 614 * Add a closed rectangle contour to the path |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1017 bool isRectContour(bool allowPartial, int* currVerb, const SkPoint** pts, | 1022 bool isRectContour(bool allowPartial, int* currVerb, const SkPoint** pts, |
1018 bool* isClosed, Direction* direction) const; | 1023 bool* isClosed, Direction* direction) const; |
1019 | 1024 |
1020 friend class SkAutoPathBoundsUpdate; | 1025 friend class SkAutoPathBoundsUpdate; |
1021 friend class SkAutoDisableOvalCheck; | 1026 friend class SkAutoDisableOvalCheck; |
1022 friend class SkAutoDisableDirectionCheck; | 1027 friend class SkAutoDisableDirectionCheck; |
1023 friend class SkBench_AddPathTest; // perf test pathTo/reversePathTo | 1028 friend class SkBench_AddPathTest; // perf test pathTo/reversePathTo |
1024 }; | 1029 }; |
1025 | 1030 |
1026 #endif | 1031 #endif |
OLD | NEW |