Skia
2DGraphicsLibrary
|
The SkPath class encapsulates compound (multiple contour) geometric paths consisting of straight line segments, quadratic curves, and cubic curves. More...
#include <SkPath.h>
Classes | |
class | Iter |
Iterate through all of the segments (lines, quadratics, cubics) of each contours in a path. More... | |
class | RawIter |
Iterate through the verbs in the path, providing the associated points. More... | |
Public Types | |
enum | Direction { kCW_Direction, kCCW_Direction } |
enum | FillType { kWinding_FillType, kEvenOdd_FillType, kInverseWinding_FillType, kInverseEvenOdd_FillType } |
enum | Convexity { kUnknown_Convexity, kConvex_Convexity, kConcave_Convexity } |
enum | ArcSize { kSmall_ArcSize, kLarge_ArcSize } |
enum | AddPathMode { kAppend_AddPathMode, kExtend_AddPathMode } |
enum | SegmentMask { kLine_SegmentMask = 1 << 0, kQuad_SegmentMask = 1 << 1, kConic_SegmentMask = 1 << 2, kCubic_SegmentMask = 1 << 3 } |
enum | Verb { kMove_Verb, kLine_Verb, kQuad_Verb, kConic_Verb, kCubic_Verb, kClose_Verb, kDone_Verb } |
Public Member Functions | |
SkPath (const SkPath &) | |
SkPath & | operator= (const SkPath &) |
bool | isInterpolatable (const SkPath &compare) const |
Return true if the paths contain an equal array of verbs and weights. More... | |
bool | interpolate (const SkPath &ending, SkScalar weight, SkPath *out) const |
Interpolate between two paths with same-sized point arrays. More... | |
FillType | getFillType () const |
Return the path's fill type. More... | |
void | setFillType (FillType ft) |
Set the path's fill type. More... | |
bool | isInverseFillType () const |
Returns true if the filltype is one of the Inverse variants. | |
void | toggleInverseFillType () |
Toggle between inverse and normal filltypes. More... | |
Convexity | getConvexity () const |
Return the path's convexity, as stored in the path. More... | |
Convexity | getConvexityOrUnknown () const |
Return the currently cached value for convexity, even if that is set to kUnknown_Convexity. More... | |
void | setConvexity (Convexity) |
Store a convexity setting in the path. More... | |
bool | isConvex () const |
Returns true if the path is flagged as being convex. More... | |
void | setIsConvex (bool isConvex) |
Set the isConvex flag to true or false. More... | |
bool | isOval (SkRect *rect, Direction *dir=nullptr, unsigned *start=nullptr) const |
Returns true if the path is an oval. More... | |
bool | isRRect (SkRRect *rrect, Direction *dir=nullptr, unsigned *start=nullptr) const |
Returns true if the path is a round rect. More... | |
void | reset () |
Clear any lines and curves from the path, making it empty. More... | |
void | rewind () |
Similar to reset(), in that all lines and curves are removed from the path. More... | |
bool | isEmpty () const |
Returns true if the path is empty (contains no lines or curves) More... | |
bool | isLastContourClosed () const |
Return true if the last contour of this path ends with a close verb. | |
bool | isFinite () const |
Returns true if all of the points in this path are finite, meaning there are no infinities and no NaNs. | |
bool | isVolatile () const |
Returns true if the path is volatile (i.e. More... | |
void | setIsVolatile (bool isVolatile) |
Specify whether this path is volatile. More... | |
bool | isLine (SkPoint line[2]) const |
Returns true if the path specifies a single line (i.e. More... | |
int | countPoints () const |
Return the number of points in the path. | |
SkPoint | getPoint (int index) const |
Return the point at the specified index. More... | |
int | getPoints (SkPoint points[], int max) const |
Returns the number of points in the path. More... | |
int | countVerbs () const |
Return the number of verbs in the path. | |
int | getVerbs (uint8_t verbs[], int max) const |
Returns the number of verbs in the path. More... | |
void | swap (SkPath &other) |
Swap contents of this and other. Guaranteed not to throw. | |
const SkRect & | getBounds () const |
Returns the bounds of the path's points. More... | |
void | updateBoundsCache () const |
Calling this will, if the internal cache of the bounds is out of date, update it so that subsequent calls to getBounds will be instantaneous. More... | |
bool | conservativelyContainsRect (const SkRect &rect) const |
Does a conservative test to see whether a rectangle is inside a path. More... | |
void | incReserve (unsigned extraPtCount) |
Hint to the path to prepare for adding more points. More... | |
void | moveTo (SkScalar x, SkScalar y) |
Set the beginning of the next contour to the point (x,y). More... | |
void | moveTo (const SkPoint &p) |
Set the beginning of the next contour to the point. More... | |
void | rMoveTo (SkScalar dx, SkScalar dy) |
Set the beginning of the next contour relative to the last point on the previous contour. More... | |
void | lineTo (SkScalar x, SkScalar y) |
Add a line from the last point to the specified point (x,y). More... | |
void | lineTo (const SkPoint &p) |
Add a line from the last point to the specified point. More... | |
void | rLineTo (SkScalar dx, SkScalar dy) |
Same as lineTo, but the coordinates are considered relative to the last point on this contour. More... | |
void | quadTo (SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2) |
Add a quadratic bezier from the last point, approaching control point (x1,y1), and ending at (x2,y2). More... | |
void | quadTo (const SkPoint &p1, const SkPoint &p2) |
Add a quadratic bezier from the last point, approaching control point p1, and ending at p2. More... | |
void | rQuadTo (SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2) |
Same as quadTo, but the coordinates are considered relative to the last point on this contour. More... | |
void | conicTo (SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar w) |
void | conicTo (const SkPoint &p1, const SkPoint &p2, SkScalar w) |
void | rConicTo (SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2, SkScalar w) |
void | cubicTo (SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3) |
Add a cubic bezier from the last point, approaching control points (x1,y1) and (x2,y2), and ending at (x3,y3). More... | |
void | cubicTo (const SkPoint &p1, const SkPoint &p2, const SkPoint &p3) |
Add a cubic bezier from the last point, approaching control points p1 and p2, and ending at p3. More... | |
void | rCubicTo (SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3) |
Same as cubicTo, but the coordinates are considered relative to the current point on this contour. More... | |
void | arcTo (const SkRect &oval, SkScalar startAngle, SkScalar sweepAngle, bool forceMoveTo) |
Append the specified arc to the path. More... | |
void | arcTo (SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar radius) |
Append a line and arc to the current path. More... | |
void | arcTo (const SkPoint p1, const SkPoint p2, SkScalar radius) |
Append a line and arc to the current path. More... | |
void | arcTo (SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, SkScalar x, SkScalar y) |
Append an elliptical arc from the current point in the format used by SVG. More... | |
void | arcTo (const SkPoint r, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, const SkPoint xy) |
void | rArcTo (SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, SkScalar dx, SkScalar dy) |
Same as arcTo format used by SVG, but the destination coordinate is relative to the last point on this contour. More... | |
void | close () |
Close the current contour. More... | |
bool | isRect (SkRect *rect, bool *isClosed=NULL, Direction *direction=NULL) const |
Returns true if the path specifies a rectangle. More... | |
bool | isNestedFillRects (SkRect rect[2], Direction dirs[2]=NULL) const |
Returns true if the path specifies a pair of nested rectangles, or would draw a pair of nested rectangles when filled. More... | |
void | addRect (const SkRect &rect, Direction dir=kCW_Direction) |
Add a closed rectangle contour to the path. More... | |
void | addRect (const SkRect &rect, Direction dir, unsigned start) |
Add a closed rectangle contour to the path. More... | |
void | addRect (SkScalar left, SkScalar top, SkScalar right, SkScalar bottom, Direction dir=kCW_Direction) |
Add a closed rectangle contour to the path. More... | |
void | addOval (const SkRect &oval, Direction dir=kCW_Direction) |
Add a closed oval contour to the path. More... | |
void | addOval (const SkRect &oval, Direction dir, unsigned start) |
Add a closed oval contour to the path. More... | |
void | addCircle (SkScalar x, SkScalar y, SkScalar radius, Direction dir=kCW_Direction) |
Add a closed circle contour to the path. More... | |
void | addArc (const SkRect &oval, SkScalar startAngle, SkScalar sweepAngle) |
Add the specified arc to the path as a new contour. More... | |
void | addRoundRect (const SkRect &rect, SkScalar rx, SkScalar ry, Direction dir=kCW_Direction) |
Add a closed round-rectangle contour to the path. More... | |
void | addRoundRect (const SkRect &rect, const SkScalar radii[], Direction dir=kCW_Direction) |
Add a closed round-rectangle contour to the path. More... | |
void | addRRect (const SkRRect &rrect, Direction dir=kCW_Direction) |
Add an SkRRect contour to the path. More... | |
void | addRRect (const SkRRect &rrect, Direction dir, unsigned start) |
Add an SkRRect contour to the path. More... | |
void | addPoly (const SkPoint pts[], int count, bool close) |
Add a new contour made of just lines. More... | |
void | addPath (const SkPath &src, SkScalar dx, SkScalar dy, AddPathMode mode=kAppend_AddPathMode) |
Add a copy of src to the path, offset by (dx,dy) More... | |
void | addPath (const SkPath &src, AddPathMode mode=kAppend_AddPathMode) |
Add a copy of src to the path. | |
void | addPath (const SkPath &src, const SkMatrix &matrix, AddPathMode mode=kAppend_AddPathMode) |
Add a copy of src to the path, transformed by matrix. More... | |
void | reverseAddPath (const SkPath &src) |
Same as addPath(), but reverses the src input. | |
void | offset (SkScalar dx, SkScalar dy, SkPath *dst) const |
Offset the path by (dx,dy), returning true on success. More... | |
void | offset (SkScalar dx, SkScalar dy) |
Offset the path by (dx,dy), returning true on success. More... | |
void | transform (const SkMatrix &matrix, SkPath *dst) const |
Transform the points in this path by matrix, and write the answer into dst. More... | |
void | transform (const SkMatrix &matrix) |
Transform the points in this path by matrix. More... | |
bool | getLastPt (SkPoint *lastPt) const |
Return the last point on the path. More... | |
void | setLastPt (SkScalar x, SkScalar y) |
Set the last point on the path. More... | |
void | setLastPt (const SkPoint &p) |
Set the last point on the path. More... | |
uint32_t | getSegmentMasks () const |
Returns a mask, where each bit corresponding to a SegmentMask is set if the path contains 1 or more segments of that type. More... | |
bool | contains (SkScalar x, SkScalar y) const |
Returns true if the point { x, y } is contained by the path, taking into account the FillType. | |
void | dump (SkWStream *, bool forceClose, bool dumpAsHex) const |
void | dump () const |
void | dumpHex () const |
size_t | writeToMemory (void *buffer) const |
Write the path to the buffer, and return the number of bytes written. More... | |
size_t | readFromMemory (const void *buffer, size_t length) |
Initializes the path from the buffer. More... | |
uint32_t | getGenerationID () const |
Returns a non-zero, globally unique value corresponding to the set of verbs and points in the path (but not the fill type [except on Android skbug.com/1762]). More... | |
void | validate () const |
void | experimentalValidateRef () const |
Static Public Member Functions | |
static bool | IsLineDegenerate (const SkPoint &p1, const SkPoint &p2, bool exact) |
Test a line for zero length. More... | |
static bool | IsQuadDegenerate (const SkPoint &p1, const SkPoint &p2, const SkPoint &p3, bool exact) |
Test a quad for zero length. More... | |
static bool | IsCubicDegenerate (const SkPoint &p1, const SkPoint &p2, const SkPoint &p3, const SkPoint &p4, bool exact) |
Test a cubic curve for zero length. More... | |
static bool | IsInverseFillType (FillType fill) |
Returns whether or not a fill type is inverted. More... | |
static FillType | ConvertToNonInverseFillType (FillType fill) |
Returns the equivalent non-inverted fill type to the given fill type. More... | |
static int | ConvertConicToQuads (const SkPoint &p0, const SkPoint &p1, const SkPoint &p2, SkScalar w, SkPoint pts[], int pow2) |
Chop a conic into N quads, stored continguously in pts[], where N = 1 << pow2. More... | |
Static Public Attributes | |
static const int | kPathRefGenIDBitCnt = 32 |
Private Member Functions | |
void | resetFields () |
Resets all fields other than fPathRef to their initial 'empty' values. More... | |
void | copyFields (const SkPath &that) |
Sets all fields other than fPathRef to the values in 'that'. More... | |
void | reversePathTo (const SkPath &) |
void | injectMoveToIfNeeded () |
bool | hasOnlyMoveTos () const |
Convexity | internalGetConvexity () const |
bool | isRectContour (bool allowPartial, int *currVerb, const SkPoint **pts, bool *isClosed, Direction *direction) const |
bool | isZeroLength () const |
bool | hasComputedBounds () const |
Returns if the path can return a bound at no cost (true) or will have to perform some computation (false). | |
void | setBounds (const SkRect &rect) |
void | setPt (int index, SkScalar x, SkScalar y) |
Private Attributes | |
SkAutoTUnref< SkPathRef > | fPathRef |
int | fLastMoveToIndex |
uint8_t | fFillType |
uint8_t | fConvexity |
SkAtomic< uint8_t, sk_memory_order_relaxed > | fFirstDirection |
SkBool8 | fIsVolatile |
Friends | |
class | Iter |
class | SkPathPriv |
class | SkPathStroker |
class | SkAutoPathBoundsUpdate |
class | SkAutoDisableOvalCheck |
class | SkAutoDisableDirectionCheck |
class | SkBench_AddPathTest |
class | PathTest_Private |
class | ForceIsRRect_Private |
SK_API bool | operator== (const SkPath &, const SkPath &) |
bool | operator!= (const SkPath &a, const SkPath &b) |
The SkPath class encapsulates compound (multiple contour) geometric paths consisting of straight line segments, quadratic curves, and cubic curves.
enum SkPath::AddPathMode |
enum SkPath::ArcSize |
enum SkPath::Direction |
enum SkPath::FillType |
enum SkPath::Verb |
void SkPath::addArc | ( | const SkRect & | oval, |
SkScalar | startAngle, | ||
SkScalar | sweepAngle | ||
) |
Add the specified arc to the path as a new contour.
oval | The bounds of oval used to define the size of the arc |
startAngle | Starting angle (in degrees) where the arc begins |
sweepAngle | Sweep angle (in degrees) measured clockwise |
void SkPath::addCircle | ( | SkScalar | x, |
SkScalar | y, | ||
SkScalar | radius, | ||
Direction | dir = kCW_Direction |
||
) |
Add a closed circle contour to the path.
The circle contour begins at the right-most point (as though 1 were passed to addOval's 'start' param).
x | The x-coordinate of the center of a circle to add as a closed contour to the path |
y | The y-coordinate of the center of a circle to add as a closed contour to the path |
radius | The radius of a circle to add as a closed contour to the path |
dir | The direction to wind the circle's contour. |
void SkPath::addOval | ( | const SkRect & | oval, |
Direction | dir = kCW_Direction |
||
) |
Add a closed oval contour to the path.
oval | The bounding oval to add as a closed contour to the path |
dir | The direction to wind the oval's contour. |
Note: the contour initial point index is 1 (as defined below).
Add a closed oval contour to the path.
oval | The bounding oval to add as a closed contour to the path |
dir | The direction to wind the oval's contour. |
start | Initial point of the contour (initial moveTo), expressed as an ellipse vertex index, starting at the top, clock-wise (90/0/270/180deg order): |
0 -*- | | 3 * * 1 | | -*- 2
void SkPath::addPath | ( | const SkPath & | src, |
SkScalar | dx, | ||
SkScalar | dy, | ||
AddPathMode | mode = kAppend_AddPathMode |
||
) |
Add a copy of src to the path, offset by (dx,dy)
src | The path to add as a new contour |
dx | The amount to translate the path in X as it is added |
dx | The amount to translate the path in Y as it is added |
void SkPath::addPath | ( | const SkPath & | src, |
const SkMatrix & | matrix, | ||
AddPathMode | mode = kAppend_AddPathMode |
||
) |
Add a copy of src to the path, transformed by matrix.
src | The path to add as a new contour |
matrix | Transform applied to src |
mode | Determines how path is added |
void SkPath::addPoly | ( | const SkPoint | pts[], |
int | count, | ||
bool | close | ||
) |
Add a new contour made of just lines.
This is just a fast version of the following: this->moveTo(pts[0]); for (int i = 1; i < count; ++i) { this->lineTo(pts[i]); } if (close) { this->close(); }
void SkPath::addRect | ( | const SkRect & | rect, |
Direction | dir = kCW_Direction |
||
) |
Add a closed rectangle contour to the path.
rect | The rectangle to add as a closed contour to the path |
dir | The direction to wind the rectangle's contour. |
Note: the contour initial point index is 0 (as defined below).
Add a closed rectangle contour to the path.
rect | The rectangle to add as a closed contour to the path |
dir | The direction to wind the rectangle's contour. |
start | Initial point of the contour (initial moveTo), expressed as a corner index, starting in the upper-left position, clock-wise: |
0 1 *----—* | | *----—* 3 2
void SkPath::addRect | ( | SkScalar | left, |
SkScalar | top, | ||
SkScalar | right, | ||
SkScalar | bottom, | ||
Direction | dir = kCW_Direction |
||
) |
Add a closed rectangle contour to the path.
left | The left side of a rectangle to add as a closed contour to the path |
top | The top of a rectangle to add as a closed contour to the path |
right | The right side of a rectangle to add as a closed contour to the path |
bottom | The bottom of a rectangle to add as a closed contour to the path |
dir | The direction to wind the rectangle's contour. |
Note: the contour initial point index is 0 (as defined above).
void SkPath::addRoundRect | ( | const SkRect & | rect, |
SkScalar | rx, | ||
SkScalar | ry, | ||
Direction | dir = kCW_Direction |
||
) |
Add a closed round-rectangle contour to the path.
rect | The bounds of a round-rectangle to add as a closed contour |
rx | The x-radius of the rounded corners on the round-rectangle |
ry | The y-radius of the rounded corners on the round-rectangle |
dir | The direction to wind the rectangle's contour. |
void SkPath::addRoundRect | ( | const SkRect & | rect, |
const SkScalar | radii[], | ||
Direction | dir = kCW_Direction |
||
) |
Add a closed round-rectangle contour to the path.
Each corner receives two radius values [X, Y]. The corners are ordered top-left, top-right, bottom-right, bottom-left.
rect | The bounds of a round-rectangle to add as a closed contour |
radii | Array of 8 scalars, 4 [X,Y] pairs for each corner |
dir | The direction to wind the rectangle's contour. Note: The radii here now go through the same constraint handling as the SkRRect radii (i.e., either radii at a corner being 0 implies a sqaure corner and oversized radii are proportionally scaled down). |
void SkPath::addRRect | ( | const SkRRect & | rrect, |
Direction | dir = kCW_Direction |
||
) |
Add an SkRRect contour to the path.
rrect | The rounded rect to add as a closed contour |
dir | The winding direction for the new contour. |
Note: the contour initial point index is either 6 (for dir == kCW_Direction) or 7 (for dir == kCCW_Direction), as defined below.
Add an SkRRect contour to the path.
rrect | The rounded rect to add as a closed contour |
dir | The winding direction for the new contour. |
start | Initial point of the contour (initial moveTo), expressed as an index of the radii minor/major points, ordered clock-wise: |
0 1 *-—* 7 * * 2 | | 6 * * 3 *-—* 5 4
void SkPath::arcTo | ( | const SkRect & | oval, |
SkScalar | startAngle, | ||
SkScalar | sweepAngle, | ||
bool | forceMoveTo | ||
) |
Append the specified arc to the path.
If the start of the arc is different from the path's current last point, then an automatic lineTo() is added to connect the current contour to the start of the arc. However, if the path is empty, then we call moveTo() with the first point of the arc. The sweep angle is treated mod 360.
oval | The bounding oval defining the shape and size of the arc |
startAngle | Starting angle (in degrees) where the arc begins |
sweepAngle | Sweep angle (in degrees) measured clockwise. This is treated mod 360. |
forceMoveTo | If true, always begin a new contour with the arc |
void SkPath::arcTo | ( | SkScalar | x1, |
SkScalar | y1, | ||
SkScalar | x2, | ||
SkScalar | y2, | ||
SkScalar | radius | ||
) |
Append a line and arc to the current path.
This is the same as the PostScript call "arct".
Append a line and arc to the current path.
This is the same as the PostScript call "arct".
void SkPath::arcTo | ( | SkScalar | rx, |
SkScalar | ry, | ||
SkScalar | xAxisRotate, | ||
ArcSize | largeArc, | ||
Direction | sweep, | ||
SkScalar | x, | ||
SkScalar | y | ||
) |
Append an elliptical arc from the current point in the format used by SVG.
The center of the ellipse is computed to satisfy the constraints below.
rx,ry | The radii in the x and y directions respectively. |
xAxisRotate | The angle in degrees relative to the x-axis. |
largeArc | Determines whether the smallest or largest arc possible is drawn. |
sweep | Determines if the arc should be swept in an anti-clockwise or clockwise direction. Note that this enum value is opposite the SVG arc sweep value. |
x,y | The destination coordinates. |
void SkPath::close | ( | ) |
Close the current contour.
If the current point is not equal to the first point of the contour, a line segment is automatically added.
bool SkPath::conservativelyContainsRect | ( | const SkRect & | rect | ) | const |
Does a conservative test to see whether a rectangle is inside a path.
Currently it only will ever return true for single convex contour paths. The empty-status of the rect is not considered (e.g. a rect that is a point can be inside a path). Points or line segments where the rect edge touches the path border are not considered containment violations.
|
static |
Chop a conic into N quads, stored continguously in pts[], where N = 1 << pow2.
The amount of storage needed is (1 + 2 * N)
Returns the equivalent non-inverted fill type to the given fill type.
kWinding_FillType -> kWinding_FillType kEvenOdd_FillType -> kEvenOdd_FillType kInverseWinding_FillType -> kWinding_FillType kInverseEvenOdd_FillType -> kEvenOdd_FillType
|
private |
Sets all fields other than fPathRef to the values in 'that'.
Assumes the caller has already set fPathRef. Doesn't change fGenerationID or fSourcePath on Android.
void SkPath::cubicTo | ( | SkScalar | x1, |
SkScalar | y1, | ||
SkScalar | x2, | ||
SkScalar | y2, | ||
SkScalar | x3, | ||
SkScalar | y3 | ||
) |
Add a cubic bezier from the last point, approaching control points (x1,y1) and (x2,y2), and ending at (x3,y3).
If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).
x1 | The x-coordinate of the 1st control point on a cubic curve |
y1 | The y-coordinate of the 1st control point on a cubic curve |
x2 | The x-coordinate of the 2nd control point on a cubic curve |
y2 | The y-coordinate of the 2nd control point on a cubic curve |
x3 | The x-coordinate of the end point on a cubic curve |
y3 | The y-coordinate of the end point on a cubic curve |
Add a cubic bezier from the last point, approaching control points p1 and p2, and ending at p3.
If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).
p1 | The 1st control point on a cubic curve |
p2 | The 2nd control point on a cubic curve |
p3 | The end point on a cubic curve |
|
inline |
Returns the bounds of the path's points.
If the path contains zero points/verbs, this will return the "empty" rect [0, 0, 0, 0]. Note: this bounds may be larger than the actual shape, since curves do not extend as far as their control points. Additionally this bound encompases all points, even isolated moveTos either preceeding or following the last non-degenerate contour.
|
inline |
Return the path's convexity, as stored in the path.
If it is currently unknown, then this function will attempt to compute the convexity (and cache the result).
|
inline |
Return the currently cached value for convexity, even if that is set to kUnknown_Convexity.
Note: getConvexity() will automatically call ComputeConvexity and cache its return value if the current setting is kUnknown.
|
inline |
Return the path's fill type.
This is used to define how "inside" is computed. The default value is kWinding_FillType.
uint32_t SkPath::getGenerationID | ( | ) | const |
Returns a non-zero, globally unique value corresponding to the set of verbs and points in the path (but not the fill type [except on Android skbug.com/1762]).
Each time the path is modified, a different generation ID will be returned.
bool SkPath::getLastPt | ( | SkPoint * | lastPt | ) | const |
Return the last point on the path.
If no points have been added, (0,0) is returned. If there are no points, this returns false, otherwise it returns true.
lastPt | The last point on the path is returned here |
SkPoint SkPath::getPoint | ( | int | index | ) | const |
Return the point at the specified index.
If the index is out of range (i.e. is not 0 <= index < countPoints()) then the returned coordinates will be (0,0)
int SkPath::getPoints | ( | SkPoint | points[], |
int | max | ||
) | const |
Returns the number of points in the path.
Up to max points are copied.
points | If not null, receives up to max points |
max | The maximum number of points to copy into points |
|
inline |
Returns a mask, where each bit corresponding to a SegmentMask is set if the path contains 1 or more segments of that type.
Returns 0 for an empty path (no segments).
int SkPath::getVerbs | ( | uint8_t | verbs[], |
int | max | ||
) | const |
Returns the number of verbs in the path.
Up to max verbs are copied. The verbs are copied as one byte per verb.
verbs | If not null, receives up to max verbs |
max | The maximum number of verbs to copy into verbs |
void SkPath::incReserve | ( | unsigned | extraPtCount | ) |
Hint to the path to prepare for adding more points.
This can allow the path to more efficiently grow its storage.
extraPtCount | The number of extra points the path should preallocate for. |
Interpolate between two paths with same-sized point arrays.
The out path contains the verbs and weights of this path. The out points are a weighted average of this path and the ending path.
ending | The path to interpolate between. |
weight | The weight, from 0 to 1. The output points are set to (this->points * weight) + ending->points * (1 - weight). |
|
inline |
Returns true if the path is flagged as being convex.
This is not a confirmed by any analysis, it is just the value set earlier.
|
inlinestatic |
Test a cubic curve for zero length.
|
inline |
Returns true if the path is empty (contains no lines or curves)
bool SkPath::isInterpolatable | ( | const SkPath & | compare | ) | const |
Return true if the paths contain an equal array of verbs and weights.
Paths with equal verb counts can be readily interpolated. If the paths contain one or more conics, the conics' weights must also match.
compare | The path to compare. |
|
inlinestatic |
Returns whether or not a fill type is inverted.
kWinding_FillType -> false kEvenOdd_FillType -> false kInverseWinding_FillType -> true kInverseEvenOdd_FillType -> true
bool SkPath::isLine | ( | SkPoint | line[2] | ) | const |
Returns true if the path specifies a single line (i.e.
it contains just a moveTo and a lineTo). If so, and line[] is not null, it sets the 2 points in line[] to the end-points of the line. If the path is not a line, returns false and ignores line[].
|
inlinestatic |
Test a line for zero length.
Returns true if the path specifies a pair of nested rectangles, or would draw a pair of nested rectangles when filled.
If so, and if rect is not null, set rect[0] to the outer rectangle and rect[1] to the inner rectangle. If so, and dirs is not null, set dirs[0] to the direction of the outer rectangle and dirs[1] to the direction of the inner rectangle. If the path does not specify a pair of nested rectangles, return false and ignore rect and dirs.
rect | If not null, returns the path as a pair of nested rectangles |
dirs | If not null, returns the direction of the rects |
|
inline |
Returns true if the path is an oval.
rect | returns the bounding rect of this oval. It's a circle if the height and width are the same. |
dir | is the oval CCW (or CW if false). |
start | indicates where the contour starts on the oval (see SkPath::addOval for intepretation of the index). |
|
inlinestatic |
Test a quad for zero length.
Returns true if the path specifies a rectangle.
If this returns false, then all output parameters are ignored, and left unchanged. If this returns true, then each of the output parameters are checked for NULL. If they are not, they return their value.
rect | If not null, set to the bounds of the rectangle. Note : this bounds may be smaller than the path's bounds, since it is just the bounds of the "drawable" parts of the path. e.g. a trailing MoveTo would be ignored in this rect, but not by the path's bounds |
isClosed | If not null, set to true if the path is closed |
direction | If not null, set to the rectangle's direction |
|
inline |
Returns true if the path is a round rect.
rrect | Returns the bounding rect and radii of this round rect. |
dir | is the rrect CCW (or CW if false). |
start | indicates where the contour starts on the rrect (see SkPath::addRRect for intepretation of the index). |
|
inline |
Returns true if the path is volatile (i.e.
should not be cached by devices.)
void SkPath::lineTo | ( | SkScalar | x, |
SkScalar | y | ||
) |
Add a line from the last point to the specified point (x,y).
If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).
x | The x-coordinate of the end of a line |
y | The y-coordinate of the end of a line |
|
inline |
Add a line from the last point to the specified point.
If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).
p | The end of a line |
void SkPath::moveTo | ( | SkScalar | x, |
SkScalar | y | ||
) |
Set the beginning of the next contour to the point (x,y).
x | The x-coordinate of the start of a new contour |
y | The y-coordinate of the start of a new contour |
|
inline |
Set the beginning of the next contour to the point.
p | The start of a new contour |
void SkPath::offset | ( | SkScalar | dx, |
SkScalar | dy, | ||
SkPath * | dst | ||
) | const |
Offset the path by (dx,dy), returning true on success.
dx | The amount in the X direction to offset the entire path |
dy | The amount in the Y direction to offset the entire path |
dst | The translated path is written here |
|
inline |
Offset the path by (dx,dy), returning true on success.
dx | The amount in the X direction to offset the entire path |
dy | The amount in the Y direction to offset the entire path |
void SkPath::quadTo | ( | SkScalar | x1, |
SkScalar | y1, | ||
SkScalar | x2, | ||
SkScalar | y2 | ||
) |
Add a quadratic bezier from the last point, approaching control point (x1,y1), and ending at (x2,y2).
If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).
x1 | The x-coordinate of the control point on a quadratic curve |
y1 | The y-coordinate of the control point on a quadratic curve |
x2 | The x-coordinate of the end point on a quadratic curve |
y2 | The y-coordinate of the end point on a quadratic curve |
Add a quadratic bezier from the last point, approaching control point p1, and ending at p2.
If no moveTo() call has been made for this contour, the first point is automatically set to (0,0).
p1 | The control point on a quadratic curve |
p2 | The end point on a quadratic curve |
void SkPath::rArcTo | ( | SkScalar | rx, |
SkScalar | ry, | ||
SkScalar | xAxisRotate, | ||
ArcSize | largeArc, | ||
Direction | sweep, | ||
SkScalar | dx, | ||
SkScalar | dy | ||
) |
Same as arcTo format used by SVG, but the destination coordinate is relative to the last point on this contour.
If there is no previous point, then a moveTo(0,0) is inserted automatically.
rx,ry | The radii in the x and y directions respectively. |
xAxisRotate | The angle in degrees relative to the x-axis. |
largeArc | Determines whether the smallest or largest arc possible is drawn. |
sweep | Determines if the arc should be swept in an anti-clockwise or clockwise direction. Note that this enum value is opposite the SVG arc sweep value. |
dx,dy | The destination coordinates relative to the last point. |
void SkPath::rCubicTo | ( | SkScalar | x1, |
SkScalar | y1, | ||
SkScalar | x2, | ||
SkScalar | y2, | ||
SkScalar | x3, | ||
SkScalar | y3 | ||
) |
Same as cubicTo, but the coordinates are considered relative to the current point on this contour.
If there is no previous point, then a moveTo(0,0) is inserted automatically.
dx1 | The amount to add to the x-coordinate of the last point on this contour, to specify the 1st control point of a cubic curve |
dy1 | The amount to add to the y-coordinate of the last point on this contour, to specify the 1st control point of a cubic curve |
dx2 | The amount to add to the x-coordinate of the last point on this contour, to specify the 2nd control point of a cubic curve |
dy2 | The amount to add to the y-coordinate of the last point on this contour, to specify the 2nd control point of a cubic curve |
dx3 | The amount to add to the x-coordinate of the last point on this contour, to specify the end point of a cubic curve |
dy3 | The amount to add to the y-coordinate of the last point on this contour, to specify the end point of a cubic curve |
size_t SkPath::readFromMemory | ( | const void * | buffer, |
size_t | length | ||
) |
Initializes the path from the buffer.
buffer | Memory to read from |
length | Amount of memory available in the buffer |
void SkPath::reset | ( | ) |
Clear any lines and curves from the path, making it empty.
This frees up internal storage associated with those segments. On Android, does not change fSourcePath.
|
private |
Resets all fields other than fPathRef to their initial 'empty' values.
Assumes the caller has already emptied fPathRef. On Android increments fGenerationID without reseting it.
void SkPath::rewind | ( | ) |
Similar to reset(), in that all lines and curves are removed from the path.
However, any internal storage for those lines/curves is retained, making reuse of the path potentially faster. On Android, does not change fSourcePath.
void SkPath::rLineTo | ( | SkScalar | dx, |
SkScalar | dy | ||
) |
Same as lineTo, but the coordinates are considered relative to the last point on this contour.
If there is no previous point, then a moveTo(0,0) is inserted automatically.
dx | The amount to add to the x-coordinate of the previous point on this contour, to specify a line |
dy | The amount to add to the y-coordinate of the previous point on this contour, to specify a line |
void SkPath::rMoveTo | ( | SkScalar | dx, |
SkScalar | dy | ||
) |
Set the beginning of the next contour relative to the last point on the previous contour.
If there is no previous contour, this is treated the same as moveTo().
dx | The amount to add to the x-coordinate of the end of the previous contour, to specify the start of a new contour |
dy | The amount to add to the y-coordinate of the end of the previous contour, to specify the start of a new contour |
void SkPath::rQuadTo | ( | SkScalar | dx1, |
SkScalar | dy1, | ||
SkScalar | dx2, | ||
SkScalar | dy2 | ||
) |
Same as quadTo, but the coordinates are considered relative to the last point on this contour.
If there is no previous point, then a moveTo(0,0) is inserted automatically.
dx1 | The amount to add to the x-coordinate of the last point on this contour, to specify the control point of a quadratic curve |
dy1 | The amount to add to the y-coordinate of the last point on this contour, to specify the control point of a quadratic curve |
dx2 | The amount to add to the x-coordinate of the last point on this contour, to specify the end point of a quadratic curve |
dy2 | The amount to add to the y-coordinate of the last point on this contour, to specify the end point of a quadratic curve |
void SkPath::setConvexity | ( | Convexity | ) |
Store a convexity setting in the path.
There is no automatic check to see if this value actually agrees with the return value that would be computed by getConvexity().
Note: even if this is set to a "known" value, if the path is later changed (e.g. lineTo(), addRect(), etc.) then the cached value will be reset to kUnknown_Convexity.
|
inline |
Set the path's fill type.
This is used to define how "inside" is computed. The default value is kWinding_FillType.
ft | The new fill type for this path |
|
inline |
Set the isConvex flag to true or false.
Convex paths may draw faster if this flag is set, though setting this to true on a path that is in fact not convex can give undefined results when drawn. Paths default to isConvex == false
|
inline |
Specify whether this path is volatile.
Paths are not volatile by default. Temporary paths that are discarded or modified after use should be marked as volatile. This provides a hint to the device that the path should not be cached. Providing this hint when appropriate can improve performance by avoiding unnecessary overhead and resource consumption on the device.
void SkPath::setLastPt | ( | SkScalar | x, |
SkScalar | y | ||
) |
Set the last point on the path.
If no points have been added, moveTo(x,y) is automatically called.
x | The new x-coordinate for the last point |
y | The new y-coordinate for the last point |
|
inline |
Set the last point on the path.
If no points have been added, moveTo(p) is automatically called.
p | The new location for the last point |
|
inline |
Toggle between inverse and normal filltypes.
This reverse the return value of isInverseFillType()
Transform the points in this path by matrix, and write the answer into dst.
matrix | The matrix to apply to the path |
dst | The transformed path is written here |
|
inline |
Transform the points in this path by matrix.
matrix | The matrix to apply to the path |
|
inline |
Calling this will, if the internal cache of the bounds is out of date, update it so that subsequent calls to getBounds will be instantaneous.
This also means that any copies or simple transformations of the path will inherit the cached bounds.
size_t SkPath::writeToMemory | ( | void * | buffer | ) | const |
Write the path to the buffer, and return the number of bytes written.
If buffer is NULL, it still returns the number of bytes.