int <ahref='#SkPath_getPoints'>getPoints</a>(<ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='SkPoint_Reference#Point'>points</a>[], int max) const;
int <ahref='#SkPath_countVerbs'>countVerbs</a>() const;
int <ahref='#SkPath_getVerbs'>getVerbs</a>(uint8_t <ahref='SkPath_Reference#Verb'>verbs</a>[], int max) const;
<ahref='SkPath_Reference#Path'>Paths</a> contain geometry. <ahref='SkPath_Reference#Path'>Paths</a> may be empty, or contain one or more <ahref='SkPath_Reference#Verb'>Verbs</a> that
outline a figure. <ahref='SkPath_Reference#Path'>Path</a> always starts with a move verb to a <ahref='#Cartesian_Coordinate'>Cartesian_Coordinate</a>,
and may be followed by additional <ahref='SkPath_Reference#Verb'>verbs</a> that add <ahref='undocumented#Line'>lines</a> or <ahref='undocumented#Curve'>curves</a>.
Adding a close verb makes the geometry into a continuous loop, a closed <ahref='SkPath_Overview#Contour'>contour</a>.
<ahref='SkPath_Reference#Path'>Paths</a> may contain any number of <ahref='SkPath_Overview#Contour'>contours</a>, each beginning with a move verb.
<ahref='SkPath_Reference#Path'>Path</a><ahref='SkPath_Overview#Contour'>contours</a> may contain only a move verb, or may also contain <ahref='undocumented#Line'>lines</a>,
<ahref='#Path_Quad'>Quadratic_Beziers</a>, <ahref='SkPath_Reference#Conic'>Conics</a>, and <ahref='#Path_Cubic'>Cubic_Beziers</a>. <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPath_Overview#Contour'>contours</a> may be open or
Internally, <ahref='SkPath_Reference#Path'>Path</a> lazily computes metrics likes bounds and convexity. Call
<ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_updateBoundsCache'>updateBoundsCache</a> to make <ahref='SkPath_Reference#Path'>Path</a> thread safe.
<ahref='#SkPath_Verb'>Verb</a> instructs <ahref='SkPath_Reference#Path'>Path</a> how to interpret one or more <ahref='SkPoint_Reference#Point'>Point</a> and optional <ahref='#Path_Conic_Weight'>Conic_Weight</a>;
manage <ahref='SkPath_Overview#Contour'>Contour</a>, and terminate <ahref='SkPath_Reference#Path'>Path</a>.
Consecutive <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> are preserved but all but the last <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> is
ignored. <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> after other <ahref='SkPath_Reference#Verb'>Verbs</a> implicitly closes the previous <ahref='SkPath_Overview#Contour'>Contour</a>
if <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kFill_Style'>kFill_Style</a> is set when drawn; otherwise, stroke is drawn open.
<ahref='#SkPath_kMove_Verb'>kMove_Verb</a> as the last <ahref='#SkPath_Verb'>Verb</a> is preserved but ignored.
<ahref='undocumented#Line'>Line</a> is a straight segment from <ahref='SkPoint_Reference#Point'>Point</a> to <ahref='SkPoint_Reference#Point'>Point</a>. Consecutive <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>
extend <ahref='SkPath_Overview#Contour'>Contour</a>. <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> at same position as prior <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> is
preserved, and draws <ahref='SkPoint_Reference#Point'>Point</a> if <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kStroke_Style'>kStroke_Style</a> is set, and
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a> is <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kSquare_Cap'>kSquare_Cap</a> or <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kRound_Cap'>kRound_Cap</a>. <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>
at same position as prior <ahref='undocumented#Line'>line</a> or <ahref='undocumented#Curve'>curve</a><ahref='#SkPath_Verb'>Verb</a> is preserved but is ignored.
Adds <ahref='SkPath_Reference#Quad'>Quad</a> from <ahref='#Path_Last_Point'>Last_Point</a>, using control <ahref='SkPoint_Reference#Point'>Point</a>, and end <ahref='SkPoint_Reference#Point'>Point</a>.
<ahref='SkPath_Reference#Quad'>Quad</a> is a parabolic section within tangents from <ahref='#Path_Last_Point'>Last_Point</a> to control <ahref='SkPoint_Reference#Point'>Point</a>,
and control <ahref='SkPoint_Reference#Point'>Point</a> to end <ahref='SkPoint_Reference#Point'>Point</a>.
Adds <ahref='SkPath_Reference#Conic'>Conic</a> from <ahref='#Path_Last_Point'>Last_Point</a>, using control <ahref='SkPoint_Reference#Point'>Point</a>, end <ahref='SkPoint_Reference#Point'>Point</a>, and <ahref='#Path_Conic_Weight'>Conic_Weight</a>.
<ahref='SkPath_Reference#Conic'>Conic</a> is a elliptical, parabolic, or hyperbolic section within tangents
from <ahref='#Path_Last_Point'>Last_Point</a> to control <ahref='SkPoint_Reference#Point'>Point</a>, and control <ahref='SkPoint_Reference#Point'>Point</a> to end <ahref='SkPoint_Reference#Point'>Point</a>, constrained
by <ahref='#Path_Conic_Weight'>Conic_Weight</a>. <ahref='#Path_Conic_Weight'>Conic_Weight</a> less than one is elliptical; equal to one is
parabolic (and identical to <ahref='SkPath_Reference#Quad'>Quad</a>); greater than one hyperbolic.
Adds <ahref='SkPath_Reference#Cubic'>Cubic</a> from <ahref='#Path_Last_Point'>Last_Point</a>, using two control <ahref='SkPoint_Reference#Point'>Points</a>, and end <ahref='SkPoint_Reference#Point'>Point</a>.
<ahref='SkPath_Reference#Cubic'>Cubic</a> is a third-order <ahref='#Bezier_Curve'>Bezier_Curve</a> section within tangents from <ahref='#Path_Last_Point'>Last_Point</a>
to first control <ahref='SkPoint_Reference#Point'>Point</a>, and from second control <ahref='SkPoint_Reference#Point'>Point</a> to end <ahref='SkPoint_Reference#Point'>Point</a>.
<ahref='#SkPath_Direction'>Direction</a> describes whether <ahref='SkPath_Overview#Contour'>Contour</a> is clockwise or counterclockwise.
When <ahref='SkPath_Reference#Path'>Path</a> contains multiple overlapping <ahref='SkPath_Overview#Contour'>Contours</a>, <ahref='#SkPath_Direction'>Direction</a> together with
<ahref='#Path_Fill_Type'>Fill_Type</a> determines whether overlaps are filled or form holes.
Closed <ahref='SkPath_Overview#Contour'>Contours</a> like <ahref='SkRect_Reference#Rect'>Rect</a>, <ahref='#RRect'>Round_Rect</a>, <ahref='undocumented#Circle'>Circle</a>, and <ahref='undocumented#Oval'>Oval</a> added with
<ahref='#SkPath_kCW_Direction'>kCW_Direction</a> travel clockwise; the same added with <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>
Constructs an empty <ahref='SkPath_Reference#SkPath'>SkPath</a>. By default, <ahref='SkPath_Reference#SkPath'>SkPath</a> has no <ahref='SkPath_Reference#Verb'>verbs</a>, no <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and no <ahref='SkPath_Reference#Conic_Weight'>weights</a>.
<ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a> is set to <ahref='#SkPath_kWinding_FillType'>kWinding_FillType</a>.
Copy constructor makes two <ahref='SkPath_Reference#Path'>paths</a> identical by value. Internally, <ahref='#SkPath_copy_const_SkPath_path'>path</a> and
<div><fiddle-embedname="647312aacd946c8a6eabaca797140432"><div>Modifying one <ahref='#SkPath_copy_const_SkPath_path'>path</a> does not effect another, even if they started as copies
Releases ownership of any shared <ahref='undocumented#Data'>data</a> and deletes <ahref='undocumented#Data'>data</a> if <ahref='SkPath_Reference#SkPath'>SkPath</a> is sole owner.
<div><fiddle-embedname="01ad6be9b7d15a2217daea273eb3d466"><div>delete calls <ahref='SkPath_Reference#Path'>Path</a> destructor, but copy of original in path2 is unaffected.
<td><ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, <ahref='SkPath_Reference#Conic_Weight'>weights</a>, and <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a> to copy</td>
Compares <ahref='#SkPath_equal_operator_a'>a</a> and <ahref='#SkPath_equal_operator_b'>b</a>; returns true if <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a>, <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='SkPath_Reference#Conic_Weight'>weights</a>
<div><fiddle-embedname="31883f51bb357f2ac5990d88f8b82e02"><div><ahref='#SkPath_rewind'>rewind()</a> removes <ahref='#Path_Verb_Array'>Verb_Array</a> but leaves storage; since storage is not compared,
<ahref='SkPath_Reference#Path'>Path</a> pair are equivalent.
Compares <ahref='#SkPath_notequal_operator_a'>a</a> and <ahref='#SkPath_notequal_operator_b'>b</a>; returns true if <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a>, <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='SkPath_Reference#Conic_Weight'>weights</a>
<div><fiddle-embedname="bbbda1cc818d96c9c0d2a06c0c48902b"><div><ahref='SkPath_Reference#Path'>Path</a> pair are equal though their convexity is not equal.
Returns true if <ahref='SkPath_Reference#SkPath'>SkPath</a> contain equal <ahref='SkPath_Reference#Verb'>verbs</a> and equal <ahref='SkPath_Reference#Conic_Weight'>weights</a>.
If <ahref='SkPath_Reference#SkPath'>SkPath</a> contain one or more <ahref='SkPath_Reference#Conic'>conics</a>, the <ahref='SkPath_Reference#Conic_Weight'>weights</a> must match.
<ahref='#SkPath_conicTo'>conicTo</a>() may add different <ahref='SkPath_Reference#Verb'>verbs</a> depending on <ahref='#Conic_Weight'>conic weight</a>, so it is not
trivial to interpolate a pair of <ahref='SkPath_Reference#SkPath'>SkPath</a> containing <ahref='SkPath_Reference#Conic'>conics</a> with different
true if <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='#Verb_Array'>verb array</a> and <ahref='SkPath_Reference#Conic_Weight'>weights</a> are equivalent
Interpolates between <ahref='SkPath_Reference#Path'>Paths</a> with <ahref='#Path_Point_Array'>Point_Array</a> of equal <ahref='undocumented#Size'>size</a>.
Copy <ahref='#Path_Verb_Array'>Verb_Array</a> and <ahref='SkPath_Reference#Conic_Weight'>Weights</a> to <ahref='#SkPath_interpolate_out'>out</a>, and set <ahref='#SkPath_interpolate_out'>out</a><ahref='#Path_Point_Array'>Point_Array</a> to a weighted
average of this <ahref='#Path_Point_Array'>Point_Array</a> and <ahref='#SkPath_interpolate_ending'>ending</a><ahref='#Path_Point_Array'>Point_Array</a>, using the formula:
<ahref='#SkPath_interpolate_weight'>weight</a> is most useful when between zero (<ahref='#SkPath_interpolate_ending'>ending</a><ahref='#Path_Point_Array'>Point_Array</a>) and
one (this <ahref='#Path_Point_Array'>Point_Array</a>); will work with values outside of this
<ahref='#SkPath_interpolate'>interpolate()</a> returns false and leaves <ahref='#SkPath_interpolate_out'>out</a> unchanged if <ahref='#Path_Point_Array'>Point_Array</a> is not
the same <ahref='undocumented#Size'>size</a> as <ahref='#SkPath_interpolate_ending'>ending</a><ahref='#Path_Point_Array'>Point_Array</a>. Call <ahref='#SkPath_isInterpolatable'>isInterpolatable</a> to check <ahref='SkPath_Reference#Path'>Path</a>
compatibility prior to calling <ahref='#SkPath_interpolate'>interpolate()</a>.
<ahref='#Path_Fill_Type'>Fill_Type</a> selects the rule used to fill <ahref='SkPath_Reference#Path'>Path</a>. <ahref='SkPath_Reference#Path'>Path</a> set to <ahref='#SkPath_kWinding_FillType'>kWinding_FillType</a>
fills if the sum of <ahref='SkPath_Overview#Contour'>Contour</a> edges is not zero, where clockwise edges add one, and
counterclockwise edges subtract one. <ahref='SkPath_Reference#Path'>Path</a> set to <ahref='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> fills if the
number of <ahref='SkPath_Overview#Contour'>Contour</a> edges is odd. Each <ahref='#Path_Fill_Type'>Fill_Type</a> has an inverse variant that
reverses the rule:
<ahref='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> fills where the sum of <ahref='SkPath_Overview#Contour'>Contour</a> edges is zero;
<ahref='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> fills where the number of <ahref='SkPath_Overview#Contour'>Contour</a> edges is even.
Returns <ahref='#SkPath_FillType'>FillType</a>, the rule used to fill <ahref='SkPath_Reference#SkPath'>SkPath</a>. <ahref='#SkPath_FillType'>FillType</a> of a new <ahref='SkPath_Reference#SkPath'>SkPath</a> is
one of: <ahref='#SkPath_kWinding_FillType'>kWinding_FillType</a>, <ahref='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a>, <ahref='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a>,
<div><fiddle-embedname="b4a91cd7f50b2a0a0d1bec6d0ac823d2"><div>If empty <ahref='SkPath_Reference#Path'>Path</a> is set to inverse <ahref='#SkPath_FillType'>FillType</a>, it fills all pixels.
true if <ahref='#SkPath_FillType'>FillType</a> is <ahref='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> or <ahref='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a>
<div><fiddle-embedname="400facce23d417bc5043c5f58404afbd"><div><ahref='SkPath_Reference#Path'>Path</a> drawn normally and through its inverse touches every <ahref='undocumented#Pixel'>pixel</a> once.
<ahref='SkPath_Reference#Path'>Path</a> is convex if it contains one <ahref='SkPath_Overview#Contour'>Contour</a> and <ahref='SkPath_Overview#Contour'>Contour</a> loops no more than
360 degrees, and <ahref='SkPath_Overview#Contour'>Contour</a> angles all have same <ahref='#SkPath_Direction'>Direction</a>. Convex <ahref='SkPath_Reference#Path'>Path</a>
may have better performance and require fewer resources on <ahref='#GPU_Surface'>GPU_Surface</a>.
Initially <ahref='SkPath_Reference#Path'>Path</a><ahref='#SkPath_Convexity'>Convexity</a> is <ahref='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>. <ahref='SkPath_Reference#Path'>Path</a><ahref='#SkPath_Convexity'>Convexity</a> is computed
if needed by destination <ahref='SkSurface_Reference#Surface'>Surface</a>.
Computes <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a> if required, and returns stored value.
<ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a> is computed if stored value is <ahref='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>,
or if <ahref='SkPath_Reference#SkPath'>SkPath</a> has been altered since <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a> was computed or set.
Returns last computed <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a>, or <ahref='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a> if
<ahref='SkPath_Reference#SkPath'>SkPath</a> has been altered since <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a> was computed or set.
<div><fiddle-embedname="111c59e9afadb940ab8f41bdc25378a4"><div><ahref='#SkPath_Convexity'>Convexity</a> is unknown unless <ahref='#SkPath_getConvexity'>getConvexity</a> is called without a subsequent call
that alters the <ahref='SkPath_Reference#Path'>path</a>.
Stores <ahref='#SkPath_setConvexity_convexity'>convexity</a> so that it is later returned by <ahref='#SkPath_getConvexity'>getConvexity</a>() or <ahref='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a>().
<ahref='#SkPath_setConvexity_convexity'>convexity</a> may differ from <ahref='#SkPath_getConvexity'>getConvexity</a>(), although setting an incorrect value may
If <ahref='#SkPath_setConvexity_convexity'>convexity</a> is <ahref='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>: <ahref='#SkPath_getConvexity'>getConvexity</a>() will
compute <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a>, and <ahref='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a>() will return <ahref='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>.
If <ahref='#SkPath_setConvexity_convexity'>convexity</a> is <ahref='#SkPath_kConvex_Convexity'>kConvex_Convexity</a> or <ahref='#SkPath_kConcave_Convexity'>kConcave_Convexity</a>, <ahref='#SkPath_getConvexity'>getConvexity</a>()
and <ahref='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a>() will return <ahref='#SkPath_setConvexity_convexity'>convexity</a> until the <ahref='SkPath_Reference#Path'>path</a> is
Computes <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a> if required, and returns true if value is <ahref='#SkPath_kConvex_Convexity'>kConvex_Convexity</a>.
If <ahref='#SkPath_setConvexity'>setConvexity</a>() was called with <ahref='#SkPath_kConvex_Convexity'>kConvex_Convexity</a> or <ahref='#SkPath_kConcave_Convexity'>kConcave_Convexity</a>, and
the <ahref='SkPath_Reference#Path'>path</a> has not been altered, <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a> is not recomputed.
true if <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Convexity'>Convexity</a> stored or computed is <ahref='#SkPath_kConvex_Convexity'>kConvex_Convexity</a>
Returns true if this <ahref='SkPath_Reference#Path'>path</a> is recognized as an <ahref='undocumented#Oval'>oval</a> or <ahref='undocumented#Circle'>circle</a>.
Returns true if <ahref='SkPath_Reference#Path'>path</a> is representable as <ahref='SkRRect_Reference#SkRRect'>SkRRect</a>.
Returns false if <ahref='SkPath_Reference#Path'>path</a> is representable as <ahref='undocumented#Oval'>oval</a>, <ahref='undocumented#Circle'>circle</a>, or <ahref='SkRect_Reference#SkRect'>SkRect</a>.
Sets <ahref='SkPath_Reference#SkPath'>SkPath</a> to its initial state.
Removes verb array, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> array, and <ahref='SkPath_Reference#Conic_Weight'>weights</a>, and sets <ahref='#SkPath_FillType'>FillType</a> to <ahref='#SkPath_kWinding_FillType'>kWinding_FillType</a>.
Internal storage associated with <ahref='SkPath_Reference#SkPath'>SkPath</a> is released.
Sets <ahref='SkPath_Reference#SkPath'>SkPath</a> to its initial state, preserving internal storage.
Removes verb array, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> array, and <ahref='SkPath_Reference#Conic_Weight'>weights</a>, and sets <ahref='#SkPath_FillType'>FillType</a> to <ahref='#SkPath_kWinding_FillType'>kWinding_FillType</a>.
Internal storage associated with <ahref='SkPath_Reference#SkPath'>SkPath</a> is retained.
Use <ahref='#SkPath_rewind'>rewind()</a> instead of <ahref='#SkPath_reset'>reset()</a> if <ahref='SkPath_Reference#SkPath'>SkPath</a> storage will be reused and performance
Returns if <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty.
Empty <ahref='SkPath_Reference#SkPath'>SkPath</a> may have <ahref='#SkPath_FillType'>FillType</a> but has no <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a>, or <ahref='SkPath_Reference#Conic'>conic</a> weight.
<ahref='#SkPath_empty_constructor'>SkPath()</a> constructs empty <ahref='SkPath_Reference#SkPath'>SkPath</a>; <ahref='#SkPath_reset'>reset()</a> and <ahref='#SkPath_rewind'>rewind()</a> make <ahref='SkPath_Reference#SkPath'>SkPath</a> empty.
Returns if <ahref='SkPath_Overview#Contour'>contour</a> is closed.
<ahref='SkPath_Overview#Contour'>Contour</a> is closed if <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> array was last modified by <ahref='#SkPath_close'>close()</a>. When stroked,
closed <ahref='SkPath_Overview#Contour'>contour</a> draws <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Join'>Join</a> instead of <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a> at first and last <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>.
<div><fiddle-embedname="03b740ab94b9017800a52e30b5e7fee7"><div><ahref='#SkPath_close'>close()</a> has no effect if <ahref='SkPath_Reference#Path'>Path</a> is empty; <ahref='#SkPath_isLastContourClosed'>isLastContourClosed</a>() returns
false until <ahref='SkPath_Reference#Path'>Path</a> has geometry followed by <ahref='#SkPath_close'>close()</a>.
Returns true for finite <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> array values between negative <ahref='undocumented#SK_ScalarMax'>SK_ScalarMax</a> and
positive <ahref='undocumented#SK_ScalarMax'>SK_ScalarMax</a>. Returns false for any <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> array value of
<ahref='undocumented#SK_ScalarInfinity'>SK_ScalarInfinity</a>, <ahref='undocumented#SK_ScalarNegativeInfinity'>SK_ScalarNegativeInfinity</a>, or <ahref='undocumented#SK_ScalarNaN'>SK_ScalarNaN</a>.
Returns true if the <ahref='SkPath_Reference#Path'>path</a> is volatile; it will not be altered or discarded
by the caller after it is drawn. <ahref='SkPath_Reference#SkPath'>SkPath</a> by default have volatile set false, allowing
<ahref='SkSurface_Reference#SkSurface'>SkSurface</a> to attach a cache of <ahref='undocumented#Data'>data</a> which speeds repeated drawing. If true, <ahref='SkSurface_Reference#SkSurface'>SkSurface</a>
<ahref='undocumented#Raster_Surface'>raster surface</a><ahref='SkPath_Reference#SkPath'>SkPath</a> draws are affected by volatile for some shadows.
<ahref='undocumented#GPU_Surface'>GPU surface</a><ahref='SkPath_Reference#SkPath'>SkPath</a> draws are affected by volatile for some shadows and concave geometries.
<ahref='#SkPath_IsLineDegenerate_exact'>exact</a> changes the equality test. If true, returns true only if <ahref='#SkPath_IsLineDegenerate_p1'>p1</a> equals <ahref='#SkPath_IsLineDegenerate_p2'>p2</a>.
If false, returns true if <ahref='#SkPath_IsLineDegenerate_p1'>p1</a> equals or nearly equals <ahref='#SkPath_IsLineDegenerate_p2'>p2</a>.
<td>if true, returns true only if <ahref='#SkPath_IsQuadDegenerate_p1'>p1</a>, <ahref='#SkPath_IsQuadDegenerate_p2'>p2</a>, and <ahref='#SkPath_IsQuadDegenerate_p3'>p3</a> are equal;</td>
if false, returns true if <ahref='#SkPath_IsQuadDegenerate_p1'>p1</a>, <ahref='#SkPath_IsQuadDegenerate_p2'>p2</a>, and <ahref='#SkPath_IsQuadDegenerate_p3'>p3</a> are equal or nearly equal
<div><fiddle-embedname="a2b255a7dac1926cc3a247d318d63c62"><div>As single precision floats: 100, 100.00001, and 100.00002 have different bit representations
<td>if true, returns true only if <ahref='#SkPath_IsCubicDegenerate_p1'>p1</a>, <ahref='#SkPath_IsCubicDegenerate_p2'>p2</a>, <ahref='#SkPath_IsCubicDegenerate_p3'>p3</a>, and <ahref='#SkPath_IsCubicDegenerate_p4'>p4</a> are equal;</td>
if false, returns true if <ahref='#SkPath_IsCubicDegenerate_p1'>p1</a>, <ahref='#SkPath_IsCubicDegenerate_p2'>p2</a>, <ahref='#SkPath_IsCubicDegenerate_p3'>p3</a>, and <ahref='#SkPath_IsCubicDegenerate_p4'>p4</a> are equal or nearly equal
Returns true if <ahref='SkPath_Reference#SkPath'>SkPath</a> contains only one <ahref='#SkPath_isLine_line'>line</a>;
<ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> array has two entries: <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>.
If <ahref='SkPath_Reference#SkPath'>SkPath</a> contains one <ahref='#SkPath_isLine_line'>line</a> and <ahref='#SkPath_isLine_line'>line</a> is not nullptr, <ahref='#SkPath_isLine_line'>line</a> is set to
<ahref='#SkPath_isLine_line'>line</a> start <ahref='SkPoint_Reference#Point'>point</a> and <ahref='#SkPath_isLine_line'>line</a> end <ahref='SkPoint_Reference#Point'>point</a>.
Returns false if <ahref='SkPath_Reference#SkPath'>SkPath</a> is not one <ahref='#SkPath_isLine_line'>line</a>; <ahref='#SkPath_isLine_line'>line</a> is unaltered.
<ahref='#Path_Point_Array'>Point_Array</a> contains <ahref='SkPoint_Reference#Point'>Points</a> satisfying the allocated <ahref='SkPoint_Reference#Point'>Points</a> for
each <ahref='#SkPath_Verb'>Verb</a> in <ahref='#Path_Verb_Array'>Verb_Array</a>. For instance, <ahref='SkPath_Reference#Path'>Path</a> containing one <ahref='SkPath_Overview#Contour'>Contour</a> with <ahref='undocumented#Line'>Line</a>
and <ahref='SkPath_Reference#Quad'>Quad</a> is described by <ahref='#Path_Verb_Array'>Verb_Array</a>: <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>, <ahref='#SkPath_kQuad_Verb'>kQuad_Verb</a>; and
one <ahref='SkPoint_Reference#Point'>Point</a> for move, one <ahref='SkPoint_Reference#Point'>Point</a> for <ahref='undocumented#Line'>Line</a>, two <ahref='SkPoint_Reference#Point'>Points</a> for <ahref='SkPath_Reference#Quad'>Quad</a>; totaling four <ahref='SkPoint_Reference#Point'>Points</a>.
<ahref='#Path_Point_Array'>Point_Array</a> may be read directly from <ahref='SkPath_Reference#Path'>Path</a> with <ahref='#SkPath_getPoints'>getPoints</a>, or inspected with
<ahref='#SkPath_getPoint'>getPoint</a>, with <ahref='#SkPath_Iter'>Iter</a>, or with <ahref='#SkPath_RawIter'>RawIter</a>.
int <ahref='#SkPath_getPoints'>getPoints</a>(<ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='SkPoint_Reference#Point'>points</a>[], int max) const
Returns number of <ahref='#SkPath_getPoints_points'>points</a> in <ahref='SkPath_Reference#SkPath'>SkPath</a>. Up to <ahref='#SkPath_getPoints_max'>max</a><ahref='#SkPath_getPoints_points'>points</a> are copied.
<ahref='#SkPath_getPoints_points'>points</a> may be nullptr; then, <ahref='#SkPath_getPoints_max'>max</a> must be zero.
If <ahref='#SkPath_getPoints_max'>max</a> is greater than number of <ahref='#SkPath_getPoints_points'>points</a>, excess <ahref='#SkPath_getPoints_points'>points</a> storage is unaltered.
Returns <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> at <ahref='#SkPath_getPoint_index'>index</a> in <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>. Valid range for <ahref='#SkPath_getPoint_index'>index</a> is
<ahref='#Path_Verb_Array'>Verb_Array</a> may be read directly from <ahref='SkPath_Reference#Path'>Path</a> with <ahref='#SkPath_getVerbs'>getVerbs</a>, or inspected with <ahref='#SkPath_Iter'>Iter</a>,
Returns the number of <ahref='SkPath_Reference#Verb'>verbs</a>: <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>, <ahref='#SkPath_kQuad_Verb'>kQuad_Verb</a>, <ahref='#SkPath_kConic_Verb'>kConic_Verb</a>,
Returns the number of <ahref='#SkPath_getVerbs_verbs'>verbs</a> in the <ahref='SkPath_Reference#Path'>path</a>. Up to <ahref='#SkPath_getVerbs_max'>max</a><ahref='#SkPath_getVerbs_verbs'>verbs</a> are copied. The
<ahref='#SkPath_getVerbs_verbs'>verbs</a> are copied as one byte per verb.
Exchanges the <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, <ahref='SkPath_Reference#Conic_Weight'>weights</a>, and <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_FillType'>FillType</a> with <ahref='#SkPath_swap_other'>other</a>.
Cached state is also exchanged. <ahref='#SkPath_swap'>swap()</a> internally exchanges pointers, so
Returns minimum and maximum axes values of <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> array.
Returns (0, 0, 0, 0) if <ahref='SkPath_Reference#SkPath'>SkPath</a> contains no <ahref='SkPoint_Reference#Point'>points</a>. Returned bounds width and height may
be larger or smaller than area affected when <ahref='SkPath_Reference#SkPath'>SkPath</a> is drawn.
<ahref='SkRect_Reference#SkRect'>SkRect</a> returned includes all <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> added to <ahref='SkPath_Reference#SkPath'>SkPath</a>, including <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> associated with
<ahref='#SkPath_kMove_Verb'>kMove_Verb</a> that define empty <ahref='SkPath_Overview#Contour'>contours</a>.
<div><fiddle-embedname="45c0fc3acb74fab99d544b80eadd10ad"><div>Bounds of upright <ahref='undocumented#Circle'>Circle</a> can be predicted from center and radius.
Bounds of rotated <ahref='undocumented#Circle'>Circle</a> includes control <ahref='SkPoint_Reference#Point'>Points</a> outside of filled area.
Returns minimum and maximum axes values of the <ahref='undocumented#Line'>lines</a> and <ahref='undocumented#Curve'>curves</a> in <ahref='SkPath_Reference#SkPath'>SkPath</a>.
Returns (0, 0, 0, 0) if <ahref='SkPath_Reference#SkPath'>SkPath</a> contains no <ahref='SkPoint_Reference#Point'>points</a>.
Behaves identically to <ahref='#SkPath_getBounds'>getBounds</a>() when <ahref='SkPath_Reference#SkPath'>SkPath</a> contains
only <ahref='undocumented#Line'>lines</a>. If <ahref='SkPath_Reference#SkPath'>SkPath</a> contains <ahref='undocumented#Curve'>curves</a>, computed bounds includes
the maximum extent of the <ahref='SkPath_Reference#Quad'>quad</a>, <ahref='SkPath_Reference#Conic'>conic</a>, or <ahref='SkPath_Reference#Cubic'>cubic</a>; is slower than <ahref='#SkPath_getBounds'>getBounds</a>();
and unlike <ahref='#SkPath_getBounds'>getBounds</a>(), does not cache the result.
For now, only returns true if <ahref='SkPath_Reference#SkPath'>SkPath</a> has one <ahref='SkPath_Overview#Contour'>contour</a> and is convex.
<ahref='#SkPath_conservativelyContainsRect_rect'>rect</a> may share <ahref='SkPoint_Reference#Point'>points</a> and edges with <ahref='SkPath_Reference#SkPath'>SkPath</a> and be contained.
Returns true if <ahref='#SkPath_conservativelyContainsRect_rect'>rect</a> is empty, that is, it has zero width or height; and
the <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> or <ahref='undocumented#Line'>line</a> described by <ahref='#SkPath_conservativelyContainsRect_rect'>rect</a> is contained by <ahref='SkPath_Reference#SkPath'>SkPath</a>.
<td><ahref='SkRect_Reference#SkRect'>SkRect</a>, <ahref='undocumented#Line'>line</a>, or <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> checked for containment</td>
<div><fiddle-embedname="41638d13e40fa449ece354dde5fb1941"><div><ahref='SkRect_Reference#Rect'>Rect</a> is drawn in blue if it is contained by red <ahref='SkPath_Reference#Path'>Path</a>.
Adds beginning of <ahref='SkPath_Overview#Contour'>contour</a> at <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> (<ahref='#SkPath_moveTo_x'>x</a>, <ahref='#SkPath_moveTo_y'>y</a>).
Adds beginning of <ahref='SkPath_Overview#Contour'>contour</a> relative to <ahref='#Last_Point'>last point</a>.
If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, starts <ahref='SkPath_Overview#Contour'>contour</a> at (<ahref='#SkPath_rMoveTo_dx'>dx</a>, <ahref='#SkPath_rMoveTo_dy'>dy</a>).
Otherwise, start <ahref='SkPath_Overview#Contour'>contour</a> at <ahref='#Last_Point'>last point</a> offset by (<ahref='#SkPath_rMoveTo_dx'>dx</a>, <ahref='#SkPath_rMoveTo_dy'>dy</a>).
Adds <ahref='undocumented#Line'>line</a> from <ahref='#Last_Point'>last point</a> to (<ahref='#SkPath_lineTo_x'>x</a>, <ahref='#SkPath_lineTo_y'>y</a>). If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is
<ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0) before adding <ahref='undocumented#Line'>line</a>.
<ahref='#SkPath_lineTo'>lineTo</a>() appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed.
<ahref='#SkPath_lineTo'>lineTo</a>() then appends <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (<ahref='#SkPath_lineTo_x'>x</a>, <ahref='#SkPath_lineTo_y'>y</a>) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
Adds <ahref='undocumented#Line'>line</a> from <ahref='#Last_Point'>last point</a> to <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_lineTo_2_p'>p</a>. If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is
<ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0) before adding <ahref='undocumented#Line'>line</a>.
<ahref='#SkPath_lineTo'>lineTo</a>() first appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed.
<ahref='#SkPath_lineTo'>lineTo</a>() then appends <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> to <ahref='#Verb_Array'>verb array</a> and <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_lineTo_2_p'>p</a> to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
Adds <ahref='undocumented#Line'>line</a> from <ahref='#Last_Point'>last point</a> to <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rLineTo_dx'>dx</a>, <ahref='#SkPath_rLineTo_dy'>dy</a>). If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is
<ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0) before adding <ahref='undocumented#Line'>line</a>.
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed;
then appends <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> to <ahref='#Verb_Array'>verb array</a> and <ahref='undocumented#Line'>line</a> end to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
<ahref='undocumented#Line'>Line</a> end is <ahref='#Last_Point'>last point</a> plus <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rLineTo_dx'>dx</a>, <ahref='#SkPath_rLineTo_dy'>dy</a>).
Function name stands for "relative <ahref='undocumented#Line'>line</a> to".
<ahref='SkPath_Reference#Quad'>Quad</a> describes a <ahref='#Path_Quad'>Quadratic_Bezier</a>, a second-order <ahref='undocumented#Curve'>curve</a> identical to a section
of a parabola. <ahref='SkPath_Reference#Quad'>Quad</a> begins at a start <ahref='SkPoint_Reference#Point'>Point</a>, <ahref='undocumented#Curve'>curves</a> towards a control <ahref='SkPoint_Reference#Point'>Point</a>,
and then <ahref='undocumented#Curve'>curves</a> to an end <ahref='SkPoint_Reference#Point'>Point</a>.
<ahref='SkPath_Reference#Quad'>Quad</a> is a special case of <ahref='SkPath_Reference#Conic'>Conic</a> where <ahref='#Path_Conic_Weight'>Conic_Weight</a> is set to one.
<ahref='SkPath_Reference#Quad'>Quad</a> is always contained by the triangle connecting its three <ahref='SkPoint_Reference#Point'>Points</a>. <ahref='SkPath_Reference#Quad'>Quad</a>
begins tangent to the <ahref='undocumented#Line'>line</a> between start <ahref='SkPoint_Reference#Point'>Point</a> and control <ahref='SkPoint_Reference#Point'>Point</a>, and ends
tangent to the <ahref='undocumented#Line'>line</a> between control <ahref='SkPoint_Reference#Point'>Point</a> and end <ahref='SkPoint_Reference#Point'>Point</a>.
Adds <ahref='SkPath_Reference#Quad'>quad</a> from <ahref='#Last_Point'>last point</a> towards (<ahref='#SkPath_quadTo_x1'>x1</a>, <ahref='#SkPath_quadTo_y1'>y1</a>), to (<ahref='#SkPath_quadTo_x2'>x2</a>, <ahref='#SkPath_quadTo_y2'>y2</a>).
If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0)
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed;
then appends <ahref='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <ahref='#Verb_Array'>verb array</a>; and (<ahref='#SkPath_quadTo_x1'>x1</a>, <ahref='#SkPath_quadTo_y1'>y1</a>), (<ahref='#SkPath_quadTo_x2'>x2</a>, <ahref='#SkPath_quadTo_y2'>y2</a>)
Adds <ahref='SkPath_Reference#Quad'>quad</a> from <ahref='#Last_Point'>last point</a> towards <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_quadTo_2_p1'>p1</a>, to <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_quadTo_2_p2'>p2</a>.
If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0)
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed;
then appends <ahref='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <ahref='#Verb_Array'>verb array</a>; and <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_quadTo_2_p1'>p1</a>, <ahref='#SkPath_quadTo_2_p2'>p2</a>
Adds <ahref='SkPath_Reference#Quad'>quad</a> from <ahref='#Last_Point'>last point</a> towards <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rQuadTo_dx1'>dx1</a>, <ahref='#SkPath_rQuadTo_dy1'>dy1</a>), to <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rQuadTo_dx2'>dx2</a>, <ahref='#SkPath_rQuadTo_dy2'>dy2</a>).
If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a>
is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0) before adding <ahref='SkPath_Reference#Quad'>quad</a>.
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>,
if needed; then appends <ahref='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <ahref='#Verb_Array'>verb array</a>; and appends <ahref='SkPath_Reference#Quad'>quad</a>
control and <ahref='SkPath_Reference#Quad'>quad</a> end to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
<ahref='SkPath_Reference#Quad'>Quad</a> control is <ahref='#Last_Point'>last point</a> plus <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rQuadTo_dx1'>dx1</a>, <ahref='#SkPath_rQuadTo_dy1'>dy1</a>).
<ahref='SkPath_Reference#Quad'>Quad</a> end is <ahref='#Last_Point'>last point</a> plus <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rQuadTo_dx2'>dx2</a>, <ahref='#SkPath_rQuadTo_dy2'>dy2</a>).
Function name stands for "relative <ahref='SkPath_Reference#Quad'>quad</a> to".
<ahref='SkPath_Reference#Conic'>Conic</a> describes a conical section: a piece of an ellipse, or a piece of a
parabola, or a piece of a hyperbola. <ahref='SkPath_Reference#Conic'>Conic</a> begins at a start <ahref='SkPoint_Reference#Point'>Point</a>,
<ahref='undocumented#Curve'>curves</a> towards a control <ahref='SkPoint_Reference#Point'>Point</a>, and then <ahref='undocumented#Curve'>curves</a> to an end <ahref='SkPoint_Reference#Point'>Point</a>. The influence
of the control <ahref='SkPoint_Reference#Point'>Point</a> is determined by <ahref='#Path_Conic_Weight'>Conic_Weight</a>.
Each <ahref='SkPath_Reference#Conic'>Conic</a> in <ahref='SkPath_Reference#Path'>Path</a> adds two <ahref='SkPoint_Reference#Point'>Points</a> and one <ahref='#Path_Conic_Weight'>Conic_Weight</a>. <ahref='#Path_Conic_Weight'>Conic_Weights</a> in <ahref='SkPath_Reference#Path'>Path</a>
may be inspected with <ahref='#SkPath_Iter'>Iter</a>, or with <ahref='#SkPath_RawIter'>RawIter</a>.
Weight determines both the strength of the control <ahref='SkPoint_Reference#Point'>Point</a> and the type of <ahref='SkPath_Reference#Conic'>Conic</a>.
Weight varies from zero to infinity. At zero, Weight causes the control <ahref='SkPoint_Reference#Point'>Point</a> to
have no effect; <ahref='SkPath_Reference#Conic'>Conic</a> is identical to a <ahref='undocumented#Line'>line</a> segment from start <ahref='SkPoint_Reference#Point'>Point</a> to end
<ahref='SkPoint_Reference#Point'>point</a>. If Weight is less than one, <ahref='SkPath_Reference#Conic'>Conic</a> follows an elliptical <ahref='undocumented#Arc'>arc</a>.
If Weight is exactly one, then <ahref='SkPath_Reference#Conic'>Conic</a> is identical to <ahref='SkPath_Reference#Quad'>Quad</a>; <ahref='SkPath_Reference#Conic'>Conic</a> follows a
parabolic <ahref='undocumented#Arc'>arc</a>. If Weight is greater than one, <ahref='SkPath_Reference#Conic'>Conic</a> follows a hyperbolic
<ahref='undocumented#Arc'>arc</a>. If Weight is infinity, <ahref='SkPath_Reference#Conic'>Conic</a> is identical to two <ahref='undocumented#Line'>line</a> segments, connecting
start <ahref='SkPoint_Reference#Point'>Point</a> to control <ahref='SkPoint_Reference#Point'>Point</a>, and control <ahref='SkPoint_Reference#Point'>Point</a> to end <ahref='SkPoint_Reference#Point'>Point</a>.
<div><fiddle-embedname="2aadded3d20dfef34d1c8abe28c7bc8d"><div>When <ahref='#Path_Conic_Weight'>Conic_Weight</a> is one, <ahref='SkPath_Reference#Quad'>Quad</a> is added to <ahref='SkPath_Reference#Path'>path</a>; the two are identical.
Adds <ahref='SkPath_Reference#Conic'>conic</a> from <ahref='#Last_Point'>last point</a> towards (<ahref='#SkPath_conicTo_x1'>x1</a>, <ahref='#SkPath_conicTo_y1'>y1</a>), to (<ahref='#SkPath_conicTo_x2'>x2</a>, <ahref='#SkPath_conicTo_y2'>y2</a>), weighted by <ahref='#SkPath_conicTo_w'>w</a>.
If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0)
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed.
If <ahref='#SkPath_conicTo_w'>w</a> is finite and not one, appends <ahref='#SkPath_kConic_Verb'>kConic_Verb</a> to <ahref='#Verb_Array'>verb array</a>;
and (<ahref='#SkPath_conicTo_x1'>x1</a>, <ahref='#SkPath_conicTo_y1'>y1</a>), (<ahref='#SkPath_conicTo_x2'>x2</a>, <ahref='#SkPath_conicTo_y2'>y2</a>) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>; and <ahref='#SkPath_conicTo_w'>w</a> to <ahref='SkPath_Reference#Conic_Weight'>conic weights</a>.
If <ahref='#SkPath_conicTo_w'>w</a> is not finite, appends <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> twice to <ahref='#Verb_Array'>verb array</a>, and
(<ahref='#SkPath_conicTo_x1'>x1</a>, <ahref='#SkPath_conicTo_y1'>y1</a>), (<ahref='#SkPath_conicTo_x2'>x2</a>, <ahref='#SkPath_conicTo_y2'>y2</a>) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
<div><fiddle-embedname="358d9b6060b528b0923c007420f09c13"><div>As weight increases, <ahref='undocumented#Curve'>curve</a> is pulled towards control <ahref='SkPoint_Reference#Point'>point</a>.
The bottom two <ahref='undocumented#Curve'>curves</a> are elliptical; the next is parabolic; the
top <ahref='undocumented#Curve'>curve</a> is hyperbolic.
Adds <ahref='SkPath_Reference#Conic'>conic</a> from <ahref='#Last_Point'>last point</a> towards <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_conicTo_2_p1'>p1</a>, to <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_conicTo_2_p2'>p2</a>, weighted by <ahref='#SkPath_conicTo_2_w'>w</a>.
If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0)
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed.
If <ahref='#SkPath_conicTo_2_w'>w</a> is finite and not one, appends <ahref='#SkPath_kConic_Verb'>kConic_Verb</a> to <ahref='#Verb_Array'>verb array</a>;
and <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_conicTo_2_p1'>p1</a>, <ahref='#SkPath_conicTo_2_p2'>p2</a> to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>; and <ahref='#SkPath_conicTo_2_w'>w</a> to <ahref='SkPath_Reference#Conic_Weight'>conic weights</a>.
If <ahref='#SkPath_conicTo_2_w'>w</a> is one, appends <ahref='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <ahref='#Verb_Array'>verb array</a>, and <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_conicTo_2_p1'>p1</a>, <ahref='#SkPath_conicTo_2_p2'>p2</a>
If <ahref='#SkPath_conicTo_2_w'>w</a> is not finite, appends <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> twice to <ahref='#Verb_Array'>verb array</a>, and
<ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_conicTo_2_p1'>p1</a>, <ahref='#SkPath_conicTo_2_p2'>p2</a> to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
<div><fiddle-embedname="22d25e03b19d5bae92118877e462361b"><div><ahref='SkPath_Reference#Conic'>Conics</a> and <ahref='undocumented#Arc'>arcs</a> use identical representations. As the <ahref='undocumented#Arc'>arc</a> sweep increases
the <ahref='#Path_Conic_Weight'>Conic_Weight</a> also increases, but remains smaller than one.
Adds <ahref='SkPath_Reference#Conic'>conic</a> from <ahref='#Last_Point'>last point</a> towards <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rConicTo_dx1'>dx1</a>, <ahref='#SkPath_rConicTo_dy1'>dy1</a>), to <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rConicTo_dx2'>dx2</a>, <ahref='#SkPath_rConicTo_dy2'>dy2</a>),
weighted by <ahref='#SkPath_rConicTo_w'>w</a>. If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a>
is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0) before adding <ahref='SkPath_Reference#Conic'>conic</a>.
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>,
If <ahref='#SkPath_rConicTo_w'>w</a> is finite and not one, next appends <ahref='#SkPath_kConic_Verb'>kConic_Verb</a> to <ahref='#Verb_Array'>verb array</a>,
and <ahref='#SkPath_rConicTo_w'>w</a> is recorded as <ahref='#Conic_Weight'>conic weight</a>; otherwise, if <ahref='#SkPath_rConicTo_w'>w</a> is one, appends
<ahref='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <ahref='#Verb_Array'>verb array</a>; or if <ahref='#SkPath_rConicTo_w'>w</a> is not finite, appends <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>
control is <ahref='#Last_Point'>last point</a> plus <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rConicTo_dx1'>dx1</a>, <ahref='#SkPath_rConicTo_dy1'>dy1</a>).
end is <ahref='#Last_Point'>last point</a> plus <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rConicTo_dx2'>dx2</a>, <ahref='#SkPath_rConicTo_dy2'>dy2</a>).
<ahref='SkPath_Reference#Cubic'>Cubic</a> describes a <ahref='#Bezier_Curve'>Bezier_Curve</a> segment described by a third-order polynomial.
<ahref='SkPath_Reference#Cubic'>Cubic</a> begins at a start <ahref='SkPoint_Reference#Point'>Point</a>, curving towards the first control <ahref='SkPoint_Reference#Point'>Point</a>;
and <ahref='undocumented#Curve'>curves</a> from the end <ahref='SkPoint_Reference#Point'>Point</a> towards the second control <ahref='SkPoint_Reference#Point'>Point</a>.
Adds <ahref='SkPath_Reference#Cubic'>cubic</a> from <ahref='#Last_Point'>last point</a> towards (<ahref='#SkPath_cubicTo_x1'>x1</a>, <ahref='#SkPath_cubicTo_y1'>y1</a>), then towards (<ahref='#SkPath_cubicTo_x2'>x2</a>, <ahref='#SkPath_cubicTo_y2'>y2</a>), ending at
(<ahref='#SkPath_cubicTo_x3'>x3</a>, <ahref='#SkPath_cubicTo_y3'>y3</a>). If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed;
then appends <ahref='#SkPath_kCubic_Verb'>kCubic_Verb</a> to <ahref='#Verb_Array'>verb array</a>; and (<ahref='#SkPath_cubicTo_x1'>x1</a>, <ahref='#SkPath_cubicTo_y1'>y1</a>), (<ahref='#SkPath_cubicTo_x2'>x2</a>, <ahref='#SkPath_cubicTo_y2'>y2</a>), (<ahref='#SkPath_cubicTo_x3'>x3</a>, <ahref='#SkPath_cubicTo_y3'>y3</a>)
Adds <ahref='SkPath_Reference#Cubic'>cubic</a> from <ahref='#Last_Point'>last point</a> towards <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_cubicTo_2_p1'>p1</a>, then towards <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_cubicTo_2_p2'>p2</a>, ending at
<ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_cubicTo_2_p3'>p3</a>. If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed;
then appends <ahref='#SkPath_kCubic_Verb'>kCubic_Verb</a> to <ahref='#Verb_Array'>verb array</a>; and <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='#SkPath_cubicTo_2_p1'>p1</a>, <ahref='#SkPath_cubicTo_2_p2'>p2</a>, <ahref='#SkPath_cubicTo_2_p3'>p3</a>
Adds <ahref='SkPath_Reference#Cubic'>cubic</a> from <ahref='#Last_Point'>last point</a> towards <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rCubicTo_dx1'>dx1</a>, <ahref='#SkPath_rCubicTo_dy1'>dy1</a>), then towards
<ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rCubicTo_dx2'>dx2</a>, <ahref='#SkPath_rCubicTo_dy2'>dy2</a>), to <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rCubicTo_dx3'>dx3</a>, <ahref='#SkPath_rCubicTo_dy3'>dy3</a>).
If <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a>
is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, <ahref='#Last_Point'>last point</a> is set to (0, 0) before adding <ahref='SkPath_Reference#Cubic'>cubic</a>.
Appends <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to <ahref='#Verb_Array'>verb array</a> and (0, 0) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>,
if needed; then appends <ahref='#SkPath_kCubic_Verb'>kCubic_Verb</a> to <ahref='#Verb_Array'>verb array</a>; and appends <ahref='SkPath_Reference#Cubic'>cubic</a>
control and <ahref='SkPath_Reference#Cubic'>cubic</a> end to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
<ahref='SkPath_Reference#Cubic'>Cubic</a> control is <ahref='#Last_Point'>last point</a> plus <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rCubicTo_dx1'>dx1</a>, <ahref='#SkPath_rCubicTo_dy1'>dy1</a>).
<ahref='SkPath_Reference#Cubic'>Cubic</a> end is <ahref='#Last_Point'>last point</a> plus <ahref='SkPoint_Reference#Vector'>vector</a> (<ahref='#SkPath_rCubicTo_dx2'>dx2</a>, <ahref='#SkPath_rCubicTo_dy2'>dy2</a>).
Function name stands for "relative <ahref='SkPath_Reference#Cubic'>cubic</a> to".
<ahref='undocumented#Arc'>Arc</a> can be constructed in a number of ways. <ahref='undocumented#Arc'>Arc</a> may be described by part of <ahref='undocumented#Oval'>Oval</a> and angles,
by start <ahref='SkPoint_Reference#Point'>point</a> and end <ahref='SkPoint_Reference#Point'>point</a>, and by radius and tangent <ahref='undocumented#Line'>lines</a>. Each construction has advantages,
and some constructions correspond to <ahref='undocumented#Arc'>Arc</a> drawing in graphics standards.
All <ahref='undocumented#Arc'>Arc</a> draws are implemented by one or more <ahref='SkPath_Reference#Conic'>Conic</a> draws. When <ahref='#Path_Conic_Weight'>Conic_Weight</a> is less than one,
<ahref='SkPath_Reference#Conic'>Conic</a> describes an <ahref='undocumented#Arc'>Arc</a> of some <ahref='undocumented#Oval'>Oval</a> or <ahref='undocumented#Circle'>Circle</a>.
describes <ahref='undocumented#Arc'>Arc</a> as a piece of <ahref='undocumented#Oval'>Oval</a>, beginning at start angle, sweeping clockwise or counterclockwise,
which may continue <ahref='SkPath_Overview#Contour'>Contour</a> or start a new one. This construction is similar to <ahref='undocumented#PostScript'>PostScript</a> and
<ahref='#HTML_Canvas'>HTML_Canvas</a><ahref='undocumented#Arc'>arcs</a>. Variation <ahref='#SkPath_addArc'>addArc</a> always starts new <ahref='SkPath_Overview#Contour'>Contour</a>. <ahref='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<ahref='#SkCanvas_drawArc'>drawArc</a> draws without
describes <ahref='undocumented#Arc'>Arc</a> as tangent to the <ahref='undocumented#Line'>line</a> segment from last <ahref='SkPoint_Reference#Point'>Point</a> added to <ahref='SkPath_Reference#Path'>Path</a> to (x1, y1); and tangent
to the <ahref='undocumented#Line'>line</a> segment from (x1, y1) to (x2, y2). This construction is similar to <ahref='undocumented#PostScript'>PostScript</a> and
describes <ahref='undocumented#Arc'>Arc</a> as part of <ahref='undocumented#Oval'>Oval</a> with radii (rx, ry), beginning at
last <ahref='SkPoint_Reference#Point'>Point</a> added to <ahref='SkPath_Reference#Path'>Path</a> and ending at (x, y). More than one <ahref='undocumented#Arc'>Arc</a> satisfies this criteria,
so additional values choose a single solution. This construction is similar to <ahref='undocumented#SVG'>SVG</a><ahref='undocumented#Arc'>arcs</a>.
<ahref='#SkPath_conicTo'>conicTo</a> describes <ahref='undocumented#Arc'>Arc</a> of less than 180 degrees as a pair of tangent <ahref='undocumented#Line'>lines</a> and <ahref='#Path_Conic_Weight'>Conic_Weight</a>.
<ahref='#SkPath_conicTo'>conicTo</a> can represent any <ahref='undocumented#Arc'>Arc</a> with a sweep less than 180 degrees at any rotation. All <ahref='#SkPath_arcTo'>arcTo</a>
constructions are converted to <ahref='SkPath_Reference#Conic'>Conic</a><ahref='undocumented#Data'>data</a> when added to <ahref='SkPath_Reference#Path'>Path</a>.
<td>5 describes an <ahref='undocumented#Arc'>arc</a> from <ahref='undocumented#Oval'>Oval</a> center, <ahref='undocumented#Arc'>arc</a> start <ahref='SkPoint_Reference#Point'>Point</a> and <ahref='undocumented#Arc'>arc</a> end <ahref='SkPoint_Reference#Point'>Point</a>.</td>
<td>6 describes an <ahref='undocumented#Arc'>arc</a> from a pair of tangent <ahref='undocumented#Line'>lines</a> and a <ahref='#Path_Conic_Weight'>Conic_Weight</a>.</td>
Appends <ahref='undocumented#Arc'>arc</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>. <ahref='undocumented#Arc'>Arc</a> added is part of ellipse
bounded by <ahref='#SkPath_arcTo_oval'>oval</a>, from <ahref='#SkPath_arcTo_startAngle'>startAngle</a> through <ahref='#SkPath_arcTo_sweepAngle'>sweepAngle</a>. Both <ahref='#SkPath_arcTo_startAngle'>startAngle</a> and
<ahref='#SkPath_arcTo_sweepAngle'>sweepAngle</a> are measured in degrees, where zero degrees is aligned with the
positive x-axis, and positive sweeps extends <ahref='undocumented#Arc'>arc</a> clockwise.
<ahref='#SkPath_arcTo'>arcTo</a>() adds <ahref='undocumented#Line'>line</a> connecting <ahref='SkPath_Reference#SkPath'>SkPath</a> last <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> to initial <ahref='undocumented#Arc'>arc</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> if <ahref='#SkPath_arcTo_forceMoveTo'>forceMoveTo</a>
is false and <ahref='SkPath_Reference#SkPath'>SkPath</a> is not empty. Otherwise, added <ahref='SkPath_Overview#Contour'>contour</a> begins with first <ahref='SkPoint_Reference#Point'>point</a>
of <ahref='undocumented#Arc'>arc</a>. Angles greater than -360 and less than 360 are treated modulo 360.
<div><fiddle-embedname="5f02890edaa10cb5e1a4243a82b6a382"><div><ahref='#SkPath_arcTo'>arcTo</a> continues a previous <ahref='SkPath_Overview#Contour'>contour</a> when <ahref='#SkPath_arcTo_forceMoveTo'>forceMoveTo</a> is false and when <ahref='SkPath_Reference#Path'>Path</a>
Appends <ahref='undocumented#Arc'>arc</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, after appending <ahref='undocumented#Line'>line</a> if needed. <ahref='undocumented#Arc'>Arc</a> is implemented by <ahref='SkPath_Reference#Conic'>conic</a>
weighted to describe part of <ahref='undocumented#Circle'>circle</a>. <ahref='undocumented#Arc'>Arc</a> is contained by tangent from
last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#Point'>point</a> to (<ahref='#SkPath_arcTo_2_x1'>x1</a>, <ahref='#SkPath_arcTo_2_y1'>y1</a>), and tangent from (<ahref='#SkPath_arcTo_2_x1'>x1</a>, <ahref='#SkPath_arcTo_2_y1'>y1</a>) to (<ahref='#SkPath_arcTo_2_x2'>x2</a>, <ahref='#SkPath_arcTo_2_y2'>y2</a>). <ahref='undocumented#Arc'>Arc</a>
is part of <ahref='undocumented#Circle'>circle</a> sized to <ahref='#SkPath_arcTo_2_radius'>radius</a>, positioned so it touches both tangent <ahref='undocumented#Line'>lines</a>.
If last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a> does not start <ahref='undocumented#Arc'>Arc</a>, <ahref='#SkPath_arcTo'>arcTo</a> appends connecting <ahref='undocumented#Line'>Line</a> to <ahref='SkPath_Reference#Path'>Path</a>.
The length of <ahref='SkPoint_Reference#Vector'>Vector</a> from (<ahref='#SkPath_arcTo_2_x1'>x1</a>, <ahref='#SkPath_arcTo_2_y1'>y1</a>) to (<ahref='#SkPath_arcTo_2_x2'>x2</a>, <ahref='#SkPath_arcTo_2_y2'>y2</a>) does not affect <ahref='undocumented#Arc'>Arc</a>.
<ahref='undocumented#Arc'>Arc</a> sweep is always less than 180 degrees. If <ahref='#SkPath_arcTo_2_radius'>radius</a> is zero, or if
tangents are nearly parallel, <ahref='#SkPath_arcTo'>arcTo</a> appends <ahref='undocumented#Line'>Line</a> from last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a> to (<ahref='#SkPath_arcTo_2_x1'>x1</a>, <ahref='#SkPath_arcTo_2_y1'>y1</a>).
<ahref='#SkPath_arcTo'>arcTo</a> appends at most one <ahref='undocumented#Line'>Line</a> and one <ahref='SkPath_Reference#Conic'>conic</a>.
<ahref='#SkPath_arcTo'>arcTo</a> implements the functionality of <ahref='undocumented#Arct'>PostScript arct</a> and <ahref='undocumented#ArcTo'>HTML Canvas arcTo</a>.
<div><fiddle-embedname="498360fa0a201cc5db04b1c27256358f"><div><ahref='#SkPath_arcTo'>arcTo</a> is represented by <ahref='undocumented#Line'>Line</a> and circular <ahref='SkPath_Reference#Conic'>Conic</a> in <ahref='SkPath_Reference#Path'>Path</a>.
Appends <ahref='undocumented#Arc'>arc</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, after appending <ahref='undocumented#Line'>line</a> if needed. <ahref='undocumented#Arc'>Arc</a> is implemented by <ahref='SkPath_Reference#Conic'>conic</a>
weighted to describe part of <ahref='undocumented#Circle'>circle</a>. <ahref='undocumented#Arc'>Arc</a> is contained by tangent from
last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#Point'>point</a> to <ahref='#SkPath_arcTo_3_p1'>p1</a>, and tangent from <ahref='#SkPath_arcTo_3_p1'>p1</a> to <ahref='#SkPath_arcTo_3_p2'>p2</a>. <ahref='undocumented#Arc'>Arc</a>
is part of <ahref='undocumented#Circle'>circle</a> sized to <ahref='#SkPath_arcTo_3_radius'>radius</a>, positioned so it touches both tangent <ahref='undocumented#Line'>lines</a>.
If last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> does not start <ahref='undocumented#Arc'>arc</a>, <ahref='#SkPath_arcTo'>arcTo</a>() appends connecting <ahref='undocumented#Line'>line</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>.
The length of <ahref='SkPoint_Reference#Vector'>vector</a> from <ahref='#SkPath_arcTo_3_p1'>p1</a> to <ahref='#SkPath_arcTo_3_p2'>p2</a> does not affect <ahref='undocumented#Arc'>arc</a>.
<ahref='undocumented#Arc'>Arc</a> sweep is always less than 180 degrees. If <ahref='#SkPath_arcTo_3_radius'>radius</a> is zero, or if
tangents are nearly parallel, <ahref='#SkPath_arcTo'>arcTo</a>() appends <ahref='undocumented#Line'>line</a> from last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> to <ahref='#SkPath_arcTo_3_p1'>p1</a>.
<ahref='#SkPath_arcTo'>arcTo</a>() appends at most one <ahref='undocumented#Line'>line</a> and one <ahref='SkPath_Reference#Conic'>conic</a>.
<ahref='#SkPath_arcTo'>arcTo</a>() implements the functionality of <ahref='undocumented#Arct'>PostScript arct</a> and <ahref='undocumented#ArcTo'>HTML Canvas arcTo</a>.
<div><fiddle-embedname="0c056264a361579c18e5d02d3172d4d4"><div>Because tangent <ahref='undocumented#Line'>lines</a> are parallel, <ahref='#SkPath_arcTo'>arcTo</a> appends <ahref='undocumented#Line'>line</a> from last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a> to
<ahref='#SkPath_arcTo_3_p1'>p1</a>, but does not append a circular <ahref='SkPath_Reference#Conic'>Conic</a>.
Four axis-aligned <ahref='undocumented#Oval'>Ovals</a> with the same height and width intersect a pair of <ahref='SkPoint_Reference#Point'>Points</a>.
<ahref='#SkPath_ArcSize'>ArcSize</a> and <ahref='#SkPath_Direction'>Direction</a> select one of the four <ahref='undocumented#Oval'>Ovals</a>, by choosing the larger or smaller
<ahref='undocumented#Arc'>arc</a> between the <ahref='SkPoint_Reference#Point'>Points</a>; and by choosing the <ahref='undocumented#Arc'>arc</a><ahref='#SkPath_Direction'>Direction</a>, clockwise
<div><fiddle-embedname="8e40c546eecd9cc213200717240898ba"><div><ahref='undocumented#Arc'>Arc</a> begins at top of <ahref='undocumented#Oval'>Oval</a> pair and ends at bottom. <ahref='undocumented#Arc'>Arc</a> can take four routes to get there.
Two routes are large, and two routes are counterclockwise. The one route both large
Appends <ahref='undocumented#Arc'>arc</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>. <ahref='undocumented#Arc'>Arc</a> is implemented by one or more <ahref='SkPath_Reference#Conic'>conics</a> weighted to
describe part of <ahref='undocumented#Oval'>oval</a> with radii (<ahref='#SkPath_arcTo_4_rx'>rx</a>, <ahref='#SkPath_arcTo_4_ry'>ry</a>) rotated by <ahref='#SkPath_arcTo_4_xAxisRotate'>xAxisRotate</a> degrees. <ahref='undocumented#Arc'>Arc</a>
<ahref='undocumented#Curve'>curves</a> from last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> to (<ahref='#SkPath_arcTo_4_x'>x</a>, <ahref='#SkPath_arcTo_4_y'>y</a>), choosing one of four possible routes:
<ahref='undocumented#Arc'>Arc</a><ahref='#SkPath_arcTo_4_sweep'>sweep</a> is always less than 360 degrees. <ahref='#SkPath_arcTo'>arcTo</a>() appends <ahref='undocumented#Line'>line</a> to (<ahref='#SkPath_arcTo_4_x'>x</a>, <ahref='#SkPath_arcTo_4_y'>y</a>) if
either radii are zero, or if last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> equals (<ahref='#SkPath_arcTo_4_x'>x</a>, <ahref='#SkPath_arcTo_4_y'>y</a>). <ahref='#SkPath_arcTo'>arcTo</a>() scales radii
(<ahref='#SkPath_arcTo_4_rx'>rx</a>, <ahref='#SkPath_arcTo_4_ry'>ry</a>) to fit last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> and (<ahref='#SkPath_arcTo_4_x'>x</a>, <ahref='#SkPath_arcTo_4_y'>y</a>) if both are greater than zero but
<ahref='#SkPath_arcTo'>arcTo</a>() appends up to four <ahref='SkPath_Reference#Conic'>conic</a><ahref='undocumented#Curve'>curves</a>.
<ahref='#SkPath_arcTo'>arcTo</a>() implements the functionality of <ahref='undocumented#SVG_Arc'>SVG arc</a>, although <ahref='undocumented#Sweep_Flag'>SVG sweep-flag</a> value
is opposite the integer value of <ahref='#SkPath_arcTo_4_sweep'>sweep</a>; <ahref='undocumented#Sweep_Flag'>SVG sweep-flag</a> uses 1 for clockwise,
while <ahref='#SkPath_kCW_Direction'>kCW_Direction</a> cast to int is zero.
Appends <ahref='undocumented#Arc'>arc</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>. <ahref='undocumented#Arc'>Arc</a> is implemented by one or more <ahref='SkPath_Reference#Conic'>conic</a> weighted to describe
part of <ahref='undocumented#Oval'>oval</a> with radii (<ahref='#SkPath_arcTo_5_r'>r</a>.<ahref='#SkPoint_fX'>fX</a>, <ahref='#SkPath_arcTo_5_r'>r</a>.<ahref='#SkPoint_fY'>fY</a>) rotated by <ahref='#SkPath_arcTo_5_xAxisRotate'>xAxisRotate</a> degrees. <ahref='undocumented#Arc'>Arc</a><ahref='undocumented#Curve'>curves</a>
from last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> to (<ahref='#SkPath_arcTo_5_xy'>xy</a>.<ahref='#SkPoint_fX'>fX</a>, <ahref='#SkPath_arcTo_5_xy'>xy</a>.<ahref='#SkPoint_fY'>fY</a>), choosing one of four possible routes:
<ahref='undocumented#Arc'>Arc</a><ahref='#SkPath_arcTo_5_sweep'>sweep</a> is always less than 360 degrees. <ahref='#SkPath_arcTo'>arcTo</a>() appends <ahref='undocumented#Line'>line</a> to <ahref='#SkPath_arcTo_5_xy'>xy</a> if either
radii are zero, or if last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> equals (<ahref='#SkPath_arcTo_5_xy'>xy</a>.<ahref='#SkPoint_fX'>fX</a>, <ahref='#SkPath_arcTo_5_xy'>xy</a>.<ahref='#SkPoint_fY'>fY</a>). <ahref='#SkPath_arcTo'>arcTo</a>() scales radii <ahref='#SkPath_arcTo_5_r'>r</a> to
fit last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> and <ahref='#SkPath_arcTo_5_xy'>xy</a> if both are greater than zero but too small to describe
<ahref='#SkPath_arcTo'>arcTo</a>() appends up to four <ahref='SkPath_Reference#Conic'>conic</a><ahref='undocumented#Curve'>curves</a>.
<ahref='#SkPath_arcTo'>arcTo</a>() implements the functionality of <ahref='undocumented#SVG_Arc'>SVG arc</a>, although <ahref='undocumented#Sweep_Flag'>SVG sweep-flag</a> value is
opposite the integer value of <ahref='#SkPath_arcTo_5_sweep'>sweep</a>; <ahref='undocumented#Sweep_Flag'>SVG sweep-flag</a> uses 1 for clockwise, while
<ahref='#SkPath_kCW_Direction'>kCW_Direction</a> cast to int is zero.
Appends <ahref='undocumented#Arc'>Arc</a> to <ahref='SkPath_Reference#Path'>Path</a>, relative to last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a>. <ahref='undocumented#Arc'>Arc</a> is implemented by one or
more <ahref='SkPath_Reference#Conic'>Conic</a>, weighted to describe part of <ahref='undocumented#Oval'>Oval</a> with radii (<ahref='#SkPath_rArcTo_rx'>rx</a>, <ahref='#SkPath_rArcTo_ry'>ry</a>) rotated by
<ahref='#SkPath_rArcTo_xAxisRotate'>xAxisRotate</a> degrees. <ahref='undocumented#Arc'>Arc</a><ahref='undocumented#Curve'>curves</a> from last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a> to relative end <ahref='SkPoint_Reference#Point'>Point</a>
(<ahref='#SkPath_rArcTo_dx'>dx</a>, <ahref='#SkPath_rArcTo_dy'>dy</a>), choosing one of four possible routes: clockwise or
counterclockwise, and smaller or larger. If <ahref='SkPath_Reference#Path'>Path</a> is empty, the start <ahref='undocumented#Arc'>Arc</a><ahref='SkPoint_Reference#Point'>Point</a>
<ahref='undocumented#Arc'>Arc</a><ahref='#SkPath_rArcTo_sweep'>sweep</a> is always less than 360 degrees. <ahref='#SkPath_arcTo'>arcTo</a> appends <ahref='undocumented#Line'>Line</a> to end <ahref='SkPoint_Reference#Point'>Point</a>
if either radii are zero, or if last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a> equals end <ahref='SkPoint_Reference#Point'>Point</a>.
<ahref='#SkPath_arcTo'>arcTo</a> scales radii (<ahref='#SkPath_rArcTo_rx'>rx</a>, <ahref='#SkPath_rArcTo_ry'>ry</a>) to fit last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a> and end <ahref='SkPoint_Reference#Point'>Point</a> if both are
greater than zero but too small to describe an <ahref='undocumented#Arc'>arc</a>.
<ahref='#SkPath_arcTo'>arcTo</a> appends up to four <ahref='SkPath_Reference#Conic'>Conic</a><ahref='undocumented#Curve'>curves</a>.
<ahref='#SkPath_arcTo'>arcTo</a> implements the functionality of <ahref='#SVG_Arc'>SVG_Arc</a>, although <ahref='undocumented#SVG'>SVG</a> "sweep-flag" value is
opposite the integer value of <ahref='#SkPath_rArcTo_sweep'>sweep</a>; <ahref='undocumented#SVG'>SVG</a> "sweep-flag" uses 1 for clockwise, while
<ahref='#SkPath_kCW_Direction'>kCW_Direction</a> cast to int is zero.
<td>x-axis offset end of <ahref='undocumented#Arc'>Arc</a> from last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a></td>
<td>y-axis offset end of <ahref='undocumented#Arc'>Arc</a> from last <ahref='SkPath_Reference#Path'>Path</a><ahref='SkPoint_Reference#Point'>Point</a></td>
Appends <ahref='#SkPath_kClose_Verb'>kClose_Verb</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>. A closed <ahref='SkPath_Overview#Contour'>contour</a> connects the first and last <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>
with <ahref='undocumented#Line'>line</a>, forming a continuous loop. Open and closed <ahref='SkPath_Overview#Contour'>contour</a> draw the same
with <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kFill_Style'>kFill_Style</a>. With <ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_kStroke_Style'>kStroke_Style</a>, open <ahref='SkPath_Overview#Contour'>contour</a> draws
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Cap'>Cap</a> at <ahref='SkPath_Overview#Contour'>contour</a> start and end; closed <ahref='SkPath_Overview#Contour'>contour</a> draws
<ahref='SkPaint_Reference#SkPaint'>SkPaint</a>::<ahref='#SkPaint_Join'>Join</a> at <ahref='SkPath_Overview#Contour'>contour</a> start and end.
<ahref='#SkPath_close'>close()</a> has no effect if <ahref='SkPath_Reference#SkPath'>SkPath</a> is empty or last <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> is <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>.
Returns true if <ahref='#SkPath_IsInverseFillType_fill'>fill</a> is inverted and <ahref='SkPath_Reference#Path'>Path</a> with <ahref='#SkPath_IsInverseFillType_fill'>fill</a> represents area outside
<ahref='#SkPath_ConvertToNonInverseFillType_fill'>fill</a>, or <ahref='#SkPath_kWinding_FillType'>kWinding_FillType</a> or <ahref='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> if <ahref='#SkPath_ConvertToNonInverseFillType_fill'>fill</a> is inverted
Approximates <ahref='SkPath_Reference#Conic'>Conic</a> with <ahref='SkPath_Reference#Quad'>Quad</a> array. <ahref='SkPath_Reference#Conic'>Conic</a> is constructed from start <ahref='SkPoint_Reference#Point'>Point</a><ahref='#SkPath_ConvertConicToQuads_p0'>p0</a>,
control <ahref='SkPoint_Reference#Point'>Point</a><ahref='#SkPath_ConvertConicToQuads_p1'>p1</a>, end <ahref='SkPoint_Reference#Point'>Point</a><ahref='#SkPath_ConvertConicToQuads_p2'>p2</a>, and weight <ahref='#SkPath_ConvertConicToQuads_w'>w</a>.
<ahref='SkPath_Reference#Quad'>Quad</a> array is stored in <ahref='#SkPath_ConvertConicToQuads_pts'>pts</a>; this storage is supplied by caller.
Maximum <ahref='SkPath_Reference#Quad'>Quad</a> count is 2 to the <ahref='#SkPath_ConvertConicToQuads_pow2'>pow2</a>.
Every third <ahref='SkPoint_Reference#Point'>point</a> in array shares last <ahref='SkPoint_Reference#Point'>Point</a> of previous <ahref='SkPath_Reference#Quad'>Quad</a> and first <ahref='SkPoint_Reference#Point'>Point</a> of
next <ahref='SkPath_Reference#Quad'>Quad</a>. Maximum <ahref='#SkPath_ConvertConicToQuads_pts'>pts</a> storage <ahref='undocumented#Size'>size</a> is given by:
<ahref='#Path_Conic_Weight'>Conic_Weight</a> determines the amount of influence <ahref='SkPath_Reference#Conic'>Conic</a> control <ahref='SkPoint_Reference#Point'>point</a> has on the <ahref='undocumented#Curve'>curve</a>.
<ahref='#SkPath_ConvertConicToQuads_w'>w</a> less than one represents an elliptical section. <ahref='#SkPath_ConvertConicToQuads_w'>w</a> greater than one represents
a hyperbolic section. <ahref='#SkPath_ConvertConicToQuads_w'>w</a> equal to one represents a parabolic section.
Two <ahref='SkPath_Reference#Quad'>Quad</a><ahref='undocumented#Curve'>curves</a> are sufficient to approximate an elliptical <ahref='SkPath_Reference#Conic'>Conic</a> with a sweep
of up to 90 degrees; in this case, set <ahref='#SkPath_ConvertConicToQuads_pow2'>pow2</a> to one.
<td><ahref='SkPath_Reference#Quad'>Quad</a> count, as power of two, normally 0 to 5 (1 to 32 <ahref='SkPath_Reference#Quad'>Quad</a><ahref='undocumented#Curve'>curves</a>)</td>
<div><fiddle-embedname="3ba94448a4ba48f926e643baeb5b1016"><div>A pair of <ahref='SkPath_Reference#Quad'>Quad</a><ahref='undocumented#Curve'>curves</a> are drawn in red on top of the elliptical <ahref='SkPath_Reference#Conic'>Conic</a><ahref='undocumented#Curve'>curve</a> in black.
The middle <ahref='undocumented#Curve'>curve</a> is nearly circular. The top-right <ahref='undocumented#Curve'>curve</a> is parabolic, which can
be drawn exactly with a single <ahref='SkPath_Reference#Quad'>Quad</a>.
Returns true if <ahref='SkPath_Reference#SkPath'>SkPath</a> is equivalent to <ahref='SkRect_Reference#SkRect'>SkRect</a> when filled.
If false: <ahref='#SkPath_isRect_rect'>rect</a>, <ahref='#SkPath_isRect_isClosed'>isClosed</a>, and <ahref='#SkPath_isRect_direction'>direction</a> are unchanged.
If true: <ahref='#SkPath_isRect_rect'>rect</a>, <ahref='#SkPath_isRect_isClosed'>isClosed</a>, and <ahref='#SkPath_isRect_direction'>direction</a> are written to if not nullptr.
<ahref='#SkPath_isRect_rect'>rect</a> may be smaller than the <ahref='SkPath_Reference#SkPath'>SkPath</a> bounds. <ahref='SkPath_Reference#SkPath'>SkPath</a> bounds may include <ahref='#SkPath_kMove_Verb'>kMove_Verb</a><ahref='SkPoint_Reference#Point'>points</a>
<div><fiddle-embedname="81a2aac1b8f0ff3d4c8d35ccb9149b16"><div>After <ahref='#SkPath_addRect'>addRect</a>, <ahref='#SkPath_isRect'>isRect</a> returns true. Following <ahref='#SkPath_moveTo'>moveTo</a> permits <ahref='#SkPath_isRect'>isRect</a> to return true, but
following <ahref='#SkPath_lineTo'>lineTo</a> does not. <ahref='#SkPath_addPoly'>addPoly</a> returns true even though <ahref='#SkPath_isRect_rect'>rect</a> is not closed, and one
side of <ahref='#SkPath_isRect_rect'>rect</a> is made up of consecutive <ahref='undocumented#Line'>line</a> segments.
Returns true if <ahref='SkPath_Reference#SkPath'>SkPath</a> is equivalent to nested <ahref='SkRect_Reference#SkRect'>SkRect</a> pair when filled.
If false, <ahref='#SkPath_isNestedFillRects_rect'>rect</a> and <ahref='#SkPath_isNestedFillRects_dirs'>dirs</a> are unchanged.
If true, <ahref='#SkPath_isNestedFillRects_rect'>rect</a> and <ahref='#SkPath_isNestedFillRects_dirs'>dirs</a> are written to if not nullptr:
setting <ahref='#SkPath_isNestedFillRects_rect'>rect</a>[0] to outer <ahref='SkRect_Reference#SkRect'>SkRect</a>, and <ahref='#SkPath_isNestedFillRects_rect'>rect</a>[1] to inner <ahref='SkRect_Reference#SkRect'>SkRect</a>;
setting <ahref='#SkPath_isNestedFillRects_dirs'>dirs</a>[0] to <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Direction'>Direction</a> of outer <ahref='SkRect_Reference#SkRect'>SkRect</a>, and <ahref='#SkPath_isNestedFillRects_dirs'>dirs</a>[1] to <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Direction'>Direction</a> of
Adds <ahref='SkRect_Reference#SkRect'>SkRect</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, appending <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, three <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>, and <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>,
starting with top-left corner of <ahref='SkRect_Reference#SkRect'>SkRect</a>; followed by top-right, bottom-right,
and bottom-left if <ahref='#SkPath_addRect_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>; or followed by bottom-left,
bottom-right, and top-right if <ahref='#SkPath_addRect_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>.
<td><ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Direction'>Direction</a> to wind added <ahref='SkPath_Overview#Contour'>contour</a></td>
<div><fiddle-embedname="0f841e4eaebb613b5069800567917c2d"><div>The left <ahref='SkRect_Reference#Rect'>Rect</a> dashes starting at the top-left corner, to the right.
The right <ahref='SkRect_Reference#Rect'>Rect</a> dashes starting at the top-left corner, towards the bottom.
Adds <ahref='SkRect_Reference#Rect'>Rect</a> to <ahref='SkPath_Reference#Path'>Path</a>, appending <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, three <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>, and <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>.
If <ahref='#SkPath_addRect_2_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>, <ahref='SkRect_Reference#Rect'>Rect</a> corners are added clockwise; if <ahref='#SkPath_addRect_2_dir'>dir</a> is
<ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <ahref='SkRect_Reference#Rect'>Rect</a> corners are added counterclockwise.
<ahref='#SkPath_addRect_2_start'>start</a> determines the first corner added.
<div><fiddle-embedname="9202430b3f4f5275af8eec5cc9d7baa8"><div>The arrow is just after the initial corner and <ahref='SkPoint_Reference#Point'>points</a> towards the next
corner appended to <ahref='SkPath_Reference#Path'>Path</a>.
Adds <ahref='SkRect_Reference#SkRect'>SkRect</a> (<ahref='#SkPath_addRect_3_left'>left</a>, <ahref='#SkPath_addRect_3_top'>top</a>, <ahref='#SkPath_addRect_3_right'>right</a>, <ahref='#SkPath_addRect_3_bottom'>bottom</a>) to <ahref='SkPath_Reference#SkPath'>SkPath</a>,
appending <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, three <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>, and <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>,
starting with top-left corner of <ahref='SkRect_Reference#SkRect'>SkRect</a>; followed by top-right, bottom-right,
and bottom-left if <ahref='#SkPath_addRect_3_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>; or followed by bottom-left,
bottom-right, and top-right if <ahref='#SkPath_addRect_3_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>.
<td><ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Direction'>Direction</a> to wind added <ahref='SkPath_Overview#Contour'>contour</a></td>
<div><fiddle-embedname="3837827310e8b88b8c2e128ef9fbbd65"><div>The <ahref='#SkPath_addRect_3_left'>left</a><ahref='SkRect_Reference#Rect'>Rect</a> dashes start at the top-left corner, and continue to the <ahref='#SkPath_addRect_3_right'>right</a>.
The <ahref='#SkPath_addRect_3_right'>right</a><ahref='SkRect_Reference#Rect'>Rect</a> dashes start at the top-left corner, and continue down.
Adds <ahref='#SkPath_addOval_oval'>oval</a> to <ahref='SkPath_Reference#Path'>path</a>, appending <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, four <ahref='#SkPath_kConic_Verb'>kConic_Verb</a>, and <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>.
<ahref='undocumented#Oval'>Oval</a> is upright ellipse bounded by <ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkPath_addOval_oval'>oval</a> with radii equal to half <ahref='#SkPath_addOval_oval'>oval</a> width
and half <ahref='#SkPath_addOval_oval'>oval</a> height. <ahref='undocumented#Oval'>Oval</a> begins at (<ahref='#SkPath_addOval_oval'>oval</a>.<ahref='#SkRect_fRight'>fRight</a>, <ahref='#SkPath_addOval_oval'>oval</a>.<ahref='#SkRect_centerY'>centerY</a>()) and continues
clockwise if <ahref='#SkPath_addOval_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>, counterclockwise if <ahref='#SkPath_addOval_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>.
Adds <ahref='undocumented#Oval'>Oval</a> to <ahref='SkPath_Reference#Path'>Path</a>, appending <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, four <ahref='#SkPath_kConic_Verb'>kConic_Verb</a>, and <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>.
<ahref='undocumented#Oval'>Oval</a> is upright ellipse bounded by <ahref='SkRect_Reference#Rect'>Rect</a><ahref='#SkPath_addOval_2_oval'>oval</a> with radii equal to half <ahref='#SkPath_addOval_2_oval'>oval</a> width
and half <ahref='#SkPath_addOval_2_oval'>oval</a> height. <ahref='undocumented#Oval'>Oval</a> begins at <ahref='#SkPath_addOval_2_start'>start</a> and continues
clockwise if <ahref='#SkPath_addOval_2_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>, counterclockwise if <ahref='#SkPath_addOval_2_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>.
<ahref='SkPath_Reference#SkPath'>SkPath</a>&<ahref='#SkPath_addCircle'>addCircle</a>(<ahref='undocumented#SkScalar'>SkScalar</a> x, <ahref='undocumented#SkScalar'>SkScalar</a> y, <ahref='undocumented#SkScalar'>SkScalar</a> radius, <ahref='#SkPath_Direction'>Direction</a> dir = <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>)
Adds <ahref='undocumented#Circle'>Circle</a> centered at (<ahref='#SkPath_addCircle_x'>x</a>, <ahref='#SkPath_addCircle_y'>y</a>) of <ahref='undocumented#Size'>size</a><ahref='#SkPath_addCircle_radius'>radius</a> to <ahref='SkPath_Reference#Path'>Path</a>, appending <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>,
four <ahref='#SkPath_kConic_Verb'>kConic_Verb</a>, and <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>. <ahref='undocumented#Circle'>Circle</a> begins at: <code>(<ahref='#SkPath_addCircle_x'>x</a> + <ahref='#SkPath_addCircle_radius'>radius</a>, <ahref='#SkPath_addCircle_y'>y</a>)</code>, continuing
clockwise if <ahref='#SkPath_addCircle_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>, and counterclockwise if <ahref='#SkPath_addCircle_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>.
Appends <ahref='undocumented#Arc'>arc</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, as the start of new <ahref='SkPath_Overview#Contour'>contour</a>. <ahref='undocumented#Arc'>Arc</a> added is part of ellipse
bounded by <ahref='#SkPath_addArc_oval'>oval</a>, from <ahref='#SkPath_addArc_startAngle'>startAngle</a> through <ahref='#SkPath_addArc_sweepAngle'>sweepAngle</a>. Both <ahref='#SkPath_addArc_startAngle'>startAngle</a> and
<ahref='#SkPath_addArc_sweepAngle'>sweepAngle</a> are measured in degrees, where zero degrees is aligned with the
positive x-axis, and positive sweeps extends <ahref='undocumented#Arc'>arc</a> clockwise.
If <ahref='#SkPath_addArc_sweepAngle'>sweepAngle</a><= -360, or <ahref='#SkPath_addArc_sweepAngle'>sweepAngle</a> >= 360; and <ahref='#SkPath_addArc_startAngle'>startAngle</a> modulo 90 is nearly
zero, append <ahref='#SkPath_addArc_oval'>oval</a> instead of <ahref='undocumented#Arc'>arc</a>. Otherwise, <ahref='#SkPath_addArc_sweepAngle'>sweepAngle</a> values are treated
modulo 360, and <ahref='undocumented#Arc'>arc</a> may or may not draw depending on numeric rounding.
Appends <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, creating a new closed <ahref='SkPath_Overview#Contour'>contour</a>. <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> has bounds
equal to <ahref='#SkPath_addRoundRect_rect'>rect</a>; each corner is 90 degrees of an ellipse with radii (<ahref='#SkPath_addRoundRect_rx'>rx</a>, <ahref='#SkPath_addRoundRect_ry'>ry</a>). If
<ahref='#SkPath_addRoundRect_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>, <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> starts at top-left of the lower-left corner and
winds clockwise. If <ahref='#SkPath_addRoundRect_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <ahref='SkRRect_Reference#SkRRect'>SkRRect</a> starts at the bottom-left
If either <ahref='#SkPath_addRoundRect_rx'>rx</a> or <ahref='#SkPath_addRoundRect_ry'>ry</a> is too large, <ahref='#SkPath_addRoundRect_rx'>rx</a> and <ahref='#SkPath_addRoundRect_ry'>ry</a> are scaled uniformly until the
corners fit. If <ahref='#SkPath_addRoundRect_rx'>rx</a> or <ahref='#SkPath_addRoundRect_ry'>ry</a> is less than or equal to zero, <ahref='#SkPath_addRoundRect'>addRoundRect</a>() appends
<ahref='SkRect_Reference#SkRect'>SkRect</a><ahref='#SkPath_addRoundRect_rect'>rect</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>.
After appending, <ahref='SkPath_Reference#SkPath'>SkPath</a> may be empty, or may contain: <ahref='SkRect_Reference#SkRect'>SkRect</a>, <ahref='undocumented#Oval'>oval</a>, or <ahref='SkRRect_Reference#SkRRect'>SkRRect</a>.
<div><fiddle-embedname="24736f685f265cf533f1700c042db353"><div>If either radius is zero, <ahref='SkPath_Reference#Path'>path</a> contains <ahref='SkRect_Reference#Rect'>Rect</a> and is drawn red.
If sides are only radii, <ahref='SkPath_Reference#Path'>path</a> contains <ahref='undocumented#Oval'>Oval</a> and is drawn blue.
All remaining <ahref='SkPath_Reference#Path'>path</a> draws are convex, and are drawn in gray; no
<ahref='SkPath_Reference#Path'>paths</a> constructed from <ahref='#SkPath_addRoundRect'>addRoundRect</a> are concave, so none are
Appends <ahref='#RRect'>Round_Rect</a> to <ahref='SkPath_Reference#Path'>Path</a>, creating a new closed <ahref='SkPath_Overview#Contour'>Contour</a>. <ahref='#RRect'>Round_Rect</a> has bounds
equal to <ahref='#SkPath_addRoundRect_2_rect'>rect</a>; each corner is 90 degrees of an ellipse with <ahref='#SkPath_addRoundRect_2_radii'>radii</a> from the
If <ahref='#SkPath_addRoundRect_2_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>, <ahref='#RRect'>Round_Rect</a> starts at top-left of the lower-left corner
and winds clockwise. If <ahref='#SkPath_addRoundRect_2_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <ahref='#RRect'>Round_Rect</a> starts at the
bottom-left of the upper-left corner and winds counterclockwise.
If both <ahref='#SkPath_addRoundRect_2_radii'>radii</a> on any side of <ahref='#SkPath_addRoundRect_2_rect'>rect</a> exceed its length, all <ahref='#SkPath_addRoundRect_2_radii'>radii</a> are scaled
uniformly until the corners fit. If either radius of a corner is less than or
After appending, <ahref='SkPath_Reference#Path'>Path</a> may be empty, or may contain: <ahref='SkRect_Reference#Rect'>Rect</a>, <ahref='undocumented#Oval'>Oval</a>, or <ahref='#RRect'>Round_Rect</a>.
Adds <ahref='#SkPath_addRRect_rrect'>rrect</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, creating a new closed <ahref='SkPath_Overview#Contour'>contour</a>. If
<ahref='#SkPath_addRRect_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>, <ahref='#SkPath_addRRect_rrect'>rrect</a> starts at top-left of the lower-left corner and
winds clockwise. If <ahref='#SkPath_addRRect_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <ahref='#SkPath_addRRect_rrect'>rrect</a> starts at the bottom-left
After appending, <ahref='SkPath_Reference#SkPath'>SkPath</a> may be empty, or may contain: <ahref='SkRect_Reference#SkRect'>SkRect</a>, <ahref='undocumented#Oval'>oval</a>, or <ahref='SkRRect_Reference#SkRRect'>SkRRect</a>.
Adds <ahref='#SkPath_addRRect_2_rrect'>rrect</a> to <ahref='SkPath_Reference#Path'>Path</a>, creating a new closed <ahref='SkPath_Overview#Contour'>Contour</a>. If <ahref='#SkPath_addRRect_2_dir'>dir</a> is <ahref='#SkPath_kCW_Direction'>kCW_Direction</a>, <ahref='#SkPath_addRRect_2_rrect'>rrect</a>
winds clockwise; if <ahref='#SkPath_addRRect_2_dir'>dir</a> is <ahref='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <ahref='#SkPath_addRRect_2_rrect'>rrect</a> winds counterclockwise.
<ahref='#SkPath_addRRect_2_start'>start</a> determines the first <ahref='SkPoint_Reference#Point'>point</a> of <ahref='#SkPath_addRRect_2_rrect'>rrect</a> to add.
After appending, <ahref='SkPath_Reference#Path'>Path</a> may be empty, or may contain: <ahref='SkRect_Reference#Rect'>Rect</a>, <ahref='undocumented#Oval'>Oval</a>, or <ahref='#RRect'>Round_Rect</a>.
Adds <ahref='SkPath_Overview#Contour'>contour</a> created from <ahref='undocumented#Line'>line</a> array, adding (<ahref='#SkPath_addPoly_count'>count</a> - 1) <ahref='undocumented#Line'>line</a> segments.
<ahref='SkPath_Overview#Contour'>Contour</a> added starts at <ahref='#SkPath_addPoly_pts'>pts</a>[0], then adds a <ahref='undocumented#Line'>line</a> for every additional <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>
in <ahref='#SkPath_addPoly_pts'>pts</a> array. If <ahref='#SkPath_addPoly_close'>close</a> is true, appends <ahref='#SkPath_kClose_Verb'>kClose_Verb</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, connecting
<ahref='#SkPath_addPoly_pts'>pts</a>[<ahref='#SkPath_addPoly_count'>count</a> - 1] and <ahref='#SkPath_addPoly_pts'>pts</a>[0].
Adds <ahref='SkPath_Overview#Contour'>contour</a> created from <ahref='#SkPath_addPoly_2_list'>list</a>. <ahref='SkPath_Overview#Contour'>Contour</a> added starts at <ahref='#SkPath_addPoly_2_list'>list</a>[0], then adds a <ahref='undocumented#Line'>line</a>
for every additional <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> in <ahref='#SkPath_addPoly_2_list'>list</a>. If <ahref='#SkPath_addPoly_2_close'>close</a> is true, appends <ahref='#SkPath_kClose_Verb'>kClose_Verb</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>,
connecting last and first <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> in <ahref='#SkPath_addPoly_2_list'>list</a>.
<ahref='#SkPath_AddPathMode'>AddPathMode</a> chooses how <ahref='#SkPath_addPath'>addPath</a> appends. Adding one <ahref='SkPath_Reference#Path'>Path</a> to another can extend
the last <ahref='SkPath_Overview#Contour'>Contour</a> or start a new <ahref='SkPath_Overview#Contour'>Contour</a>.
<ahref='SkPath_Reference#Path'>Path</a><ahref='SkPath_Reference#Verb'>Verbs</a>, <ahref='SkPoint_Reference#Point'>Points</a>, and <ahref='#Path_Conic_Weight'>Conic_Weights</a> are appended to destination unaltered.
Since <ahref='SkPath_Reference#Path'>Path</a><ahref='#Path_Verb_Array'>Verb_Array</a> begins with <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> if src is not empty, this
starts a new <ahref='SkPath_Overview#Contour'>Contour</a>.
If destination is closed or empty, start a new <ahref='SkPath_Overview#Contour'>Contour</a>. If destination
is not empty, add <ahref='undocumented#Line'>Line</a> from <ahref='#Path_Last_Point'>Last_Point</a> to added <ahref='SkPath_Reference#Path'>Path</a> first <ahref='SkPoint_Reference#Point'>Point</a>. Skip added
<ahref='SkPath_Reference#Path'>Path</a> initial <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>, then append remaining <ahref='SkPath_Reference#Verb'>Verbs</a>, <ahref='SkPoint_Reference#Point'>Points</a>, and <ahref='#Path_Conic_Weight'>Conic_Weights</a>.
<div><fiddle-embedname="801b02e74c64aafdb734f2e5cf3e5ab0"><div>test is built from <ahref='SkPath_Reference#Path'>path</a>, open on the top row, and closed on the bottom row.
The left column uses <ahref='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>; the right uses <ahref='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>.
The top right composition is made up of one <ahref='SkPath_Overview#Contour'>contour</a>; the other three have two.
Appends <ahref='#SkPath_addPath_src'>src</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, offset by (<ahref='#SkPath_addPath_dx'>dx</a>, <ahref='#SkPath_addPath_dy'>dy</a>).
If <ahref='#SkPath_addPath_mode'>mode</a> is <ahref='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>, <ahref='#SkPath_addPath_src'>src</a><ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a> are
added unaltered. If <ahref='#SkPath_addPath_mode'>mode</a> is <ahref='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>, add <ahref='undocumented#Line'>line</a> before appending
<ahref='SkPath_Reference#Verb'>verbs</a>, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a>.
<td><ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Verb'>verbs</a>, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a> to add</td>
If <ahref='#SkPath_addPath_2_mode'>mode</a> is <ahref='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>, <ahref='#SkPath_addPath_2_src'>src</a><ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a> are
added unaltered. If <ahref='#SkPath_addPath_2_mode'>mode</a> is <ahref='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>, add <ahref='undocumented#Line'>line</a> before appending
<ahref='SkPath_Reference#Verb'>verbs</a>, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a>.
<td><ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Verb'>verbs</a>, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a> to add</td>
Appends <ahref='#SkPath_addPath_3_src'>src</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, transformed by <ahref='#SkPath_addPath_3_matrix'>matrix</a>. Transformed <ahref='undocumented#Curve'>curves</a> may have different
<ahref='SkPath_Reference#Verb'>verbs</a>, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a>.
If <ahref='#SkPath_addPath_3_mode'>mode</a> is <ahref='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>, <ahref='#SkPath_addPath_3_src'>src</a><ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a> are
added unaltered. If <ahref='#SkPath_addPath_3_mode'>mode</a> is <ahref='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>, add <ahref='undocumented#Line'>line</a> before appending
<ahref='SkPath_Reference#Verb'>verbs</a>, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a>.
<td><ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Verb'>verbs</a>, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a> to add</td>
Appends <ahref='#SkPath_reverseAddPath_src'>src</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>, from back to front.
Reversed <ahref='#SkPath_reverseAddPath_src'>src</a> always appends a new <ahref='SkPath_Overview#Contour'>contour</a> to <ahref='SkPath_Reference#SkPath'>SkPath</a>.
<td><ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='SkPath_Reference#Verb'>verbs</a>, <ahref='SkPoint_Reference#SkPoint'>SkPoint</a>, and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a> to add</td>
Offsets <ahref='SkPath_Reference#Point_Array'>SkPoint array</a> by (<ahref='#SkPath_offset_dx'>dx</a>, <ahref='#SkPath_offset_dy'>dy</a>). Offset <ahref='SkPath_Reference#SkPath'>SkPath</a> replaces <ahref='#SkPath_offset_dst'>dst</a>.
If <ahref='#SkPath_offset_dst'>dst</a> is nullptr, <ahref='SkPath_Reference#SkPath'>SkPath</a> is replaced by offset <ahref='undocumented#Data'>data</a>.
Offsets <ahref='SkPath_Reference#Point_Array'>SkPoint array</a> by (<ahref='#SkPath_offset_2_dx'>dx</a>, <ahref='#SkPath_offset_2_dy'>dy</a>). <ahref='SkPath_Reference#SkPath'>SkPath</a> is replaced by offset <ahref='undocumented#Data'>data</a>.
Transforms <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and weight by <ahref='#SkPath_transform_matrix'>matrix</a>.
transform may change <ahref='SkPath_Reference#Verb'>verbs</a> and increase their number.
Transformed <ahref='SkPath_Reference#SkPath'>SkPath</a> replaces <ahref='#SkPath_transform_dst'>dst</a>; if <ahref='#SkPath_transform_dst'>dst</a> is nullptr, original <ahref='undocumented#Data'>data</a>
Transforms <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and weight by <ahref='#SkPath_transform_2_matrix'>matrix</a>.
transform may change <ahref='SkPath_Reference#Verb'>verbs</a> and increase their number.
<ahref='SkPath_Reference#SkPath'>SkPath</a> is replaced by transformed <ahref='undocumented#Data'>data</a>.
<ahref='SkPath_Reference#Path'>Path</a> is defined cumulatively, often by adding a segment to the end of last
<ahref='SkPath_Overview#Contour'>Contour</a>. <ahref='#Path_Last_Point'>Last_Point</a> of <ahref='SkPath_Overview#Contour'>Contour</a> is shared as first <ahref='SkPoint_Reference#Point'>Point</a> of added <ahref='undocumented#Line'>Line</a> or <ahref='undocumented#Curve'>Curve</a>.
<ahref='#Path_Last_Point'>Last_Point</a> can be read and written directly with <ahref='#SkPath_getLastPt'>getLastPt</a> and <ahref='#SkPath_setLastPt'>setLastPt</a>.
Returns <ahref='#Last_Point'>last point</a> on <ahref='SkPath_Reference#SkPath'>SkPath</a> in <ahref='#SkPath_getLastPt_lastPt'>lastPt</a>. Returns false if <ahref='SkPath_Reference#Point_Array'>SkPoint array</a> is empty,
storing (0, 0) if <ahref='#SkPath_getLastPt_lastPt'>lastPt</a> is not nullptr.
Sets <ahref='#Last_Point'>last point</a> to (<ahref='#SkPath_setLastPt_x'>x</a>, <ahref='#SkPath_setLastPt_y'>y</a>). If <ahref='SkPath_Reference#Point_Array'>SkPoint array</a> is empty, append <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to
<ahref='#Verb_Array'>verb array</a> and append (<ahref='#SkPath_setLastPt_x'>x</a>, <ahref='#SkPath_setLastPt_y'>y</a>) to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
Sets the <ahref='#Last_Point'>last point</a> on the <ahref='SkPath_Reference#Path'>path</a>. If <ahref='SkPath_Reference#Point_Array'>SkPoint array</a> is empty, append <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> to
<ahref='#Verb_Array'>verb array</a> and append <ahref='#SkPath_setLastPt_2_p'>p</a> to <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>.
<ahref='#SkPath_SegmentMask'>SegmentMask</a> constants correspond to each drawing <ahref='#SkPath_Verb'>Verb</a> type in <ahref='SkPath_Reference#Path'>Path</a>; for
instance, if <ahref='SkPath_Reference#Path'>Path</a> only contains <ahref='undocumented#Line'>Lines</a>, only the <ahref='#SkPath_kLine_SegmentMask'>kLine_SegmentMask</a> bit is set.
Set if <ahref='#Path_Verb_Array'>Verb_Array</a> contains <ahref='#SkPath_kQuad_Verb'>kQuad_Verb</a>. Note that <ahref='#SkPath_conicTo'>conicTo</a> may add a <ahref='SkPath_Reference#Quad'>Quad</a>.
<div><fiddle-embedname="a61e5758574e28190ec4ed8c4ae7e7fa"><div>When <ahref='#SkPath_conicTo'>conicTo</a> has a weight of one, <ahref='SkPath_Reference#Quad'>Quad</a> is added to <ahref='SkPath_Reference#Path'>Path</a>.
Returns a mask, where each set bit corresponds to a <ahref='#SkPath_SegmentMask'>SegmentMask</a> constant
if <ahref='SkPath_Reference#SkPath'>SkPath</a> contains one or more <ahref='SkPath_Reference#Verb'>verbs</a> of that type.
Returns zero if <ahref='SkPath_Reference#SkPath'>SkPath</a> contains no <ahref='undocumented#Line'>lines</a>, or <ahref='undocumented#Curve'>curves</a>: <ahref='SkPath_Reference#Quad'>quads</a>, <ahref='SkPath_Reference#Conic'>conics</a>, or <ahref='SkPath_Reference#Cubic'>cubics</a>.
Returns true if the <ahref='SkPoint_Reference#Point'>point</a> (<ahref='#SkPath_contains_x'>x</a>, <ahref='#SkPath_contains_y'>y</a>) is contained by <ahref='SkPath_Reference#Path'>Path</a>, taking into
| <ahref='#SkPath_FillType'>FillType</a> | <ahref='#SkPath_contains'>contains()</a> returns true if <ahref='SkPoint_Reference#Point'>Point</a> is enclosed by |
| <ahref='#SkPath_kWinding_FillType'>kWinding_FillType</a> | a non-zero sum of <ahref='SkPath_Overview#Contour'>Contour</a><ahref='SkPath_Reference#Direction'>Directions</a>. |
| <ahref='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> | an odd number of <ahref='SkPath_Overview#Contour'>Contours</a>. |
| <ahref='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> | a zero sum of <ahref='SkPath_Overview#Contour'>Contour</a><ahref='SkPath_Reference#Direction'>Directions</a>. |
| <ahref='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> | and even number of <ahref='SkPath_Overview#Contour'>Contours</a>. |
Writes <ahref='undocumented#Text'>text</a> representation of <ahref='SkPath_Reference#SkPath'>SkPath</a> to <ahref='#SkPath_dump_stream'>stream</a>. If <ahref='#SkPath_dump_stream'>stream</a> is nullptr, writes to
standard output. Set <ahref='#SkPath_dump_forceClose'>forceClose</a> to true to get edges used to fill <ahref='SkPath_Reference#SkPath'>SkPath</a>.
Set <ahref='#SkPath_dump_dumpAsHex'>dumpAsHex</a> true to generate exact binary representations
of floating <ahref='SkPoint_Reference#Point'>point</a> numbers used in <ahref='SkPath_Reference#Point_Array'>SkPoint array</a> and <ahref='SkPath_Reference#Conic_Weight'>conic weights</a>.
<td>writable <ahref='SkWStream_Reference#SkWStream'>SkWStream</a> receiving <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='undocumented#Text'>text</a> representation; may be nullptr</td>
Initializes <ahref='SkPath_Reference#SkPath'>SkPath</a> from <ahref='#SkPath_readFromMemory_buffer'>buffer</a> of <ahref='undocumented#Size'>size</a><ahref='#SkPath_readFromMemory_length'>length</a>. Returns zero if the <ahref='#SkPath_readFromMemory_buffer'>buffer</a> is
<ahref='undocumented#Data'>data</a> is inconsistent, or the <ahref='#SkPath_readFromMemory_length'>length</a> is too small.
<ahref='#Path_Generation_ID'>Generation_ID</a> provides a quick way to check if <ahref='#Path_Verb_Array'>Verb_Array</a>, <ahref='#Path_Point_Array'>Point_Array</a>, or
<ahref='#Path_Conic_Weight'>Conic_Weight</a> has changed. <ahref='#Path_Generation_ID'>Generation_ID</a> is not a hash; identical <ahref='SkPath_Reference#Path'>Paths</a> will
not necessarily have matching <ahref='#Path_Generation_ID'>Generation_IDs</a>.
Returns if <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='undocumented#Data'>data</a> is consistent. Corrupt <ahref='SkPath_Reference#SkPath'>SkPath</a><ahref='undocumented#Data'>data</a> is detected if
Iterates through <ahref='#Path_Verb_Array'>Verb_Array</a>, and associated <ahref='#Path_Point_Array'>Point_Array</a> and <ahref='#Path_Conic_Weight'>Conic_Weight</a>.
Provides options to treat open <ahref='SkPath_Overview#Contour'>Contours</a> as closed, and to ignore
<div><fiddle-embedname="2f53df9201769ab7e7c0e164a1334309"><div>Ignoring the actual <ahref='SkPath_Reference#Verb'>Verbs</a> and replacing them with <ahref='SkPath_Reference#Quad'>Quads</a> rounds the
<ahref='SkPath_Reference#Path'>path</a> of the <ahref='undocumented#Glyph'>glyph</a>.
Initializes <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> with an empty <ahref='SkPath_Reference#SkPath'>SkPath</a>. <ahref='#SkPath_Iter_next'>next()</a> on <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> returns
Call <ahref='#SkPath_Iter_setPath'>setPath</a> to initialize <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> at a later time.
Sets <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> to return elements of <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='#Conic_Weight'>conic weight</a> in
<ahref='#SkPath_Iter_const_SkPath_path'>path</a>. If <ahref='#SkPath_Iter_const_SkPath_forceClose'>forceClose</a> is true, <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> will add <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> and <ahref='#SkPath_kClose_Verb'>kClose_Verb</a> after each
open <ahref='SkPath_Overview#Contour'>contour</a>. <ahref='#SkPath_Iter_const_SkPath_path'>path</a> is not altered.
Sets <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> to return elements of <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='#Conic_Weight'>conic weight</a> in
<ahref='#SkPath_Iter_setPath_path'>path</a>. If <ahref='#SkPath_Iter_setPath_forceClose'>forceClose</a> is true, <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> will add <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> and <ahref='#SkPath_kClose_Verb'>kClose_Verb</a> after each
open <ahref='SkPath_Overview#Contour'>contour</a>. <ahref='#SkPath_Iter_setPath_path'>path</a> is not altered.
Returns next <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> in <ahref='#Verb_Array'>verb array</a>, and advances <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a>.
Zero to four <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> are stored in <ahref='#SkPath_Iter_next_pts'>pts</a>, depending on the returned <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a>.
If <ahref='#SkPath_Iter_next_doConsumeDegenerates'>doConsumeDegenerates</a> is true, skip consecutive <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> entries, returning
only the last in the series; and skip very small <ahref='undocumented#Line'>lines</a>, <ahref='SkPath_Reference#Quad'>quads</a>, and <ahref='SkPath_Reference#Conic'>conics</a>; and
skip <ahref='#SkPath_kClose_Verb'>kClose_Verb</a> following <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>.
if <ahref='#SkPath_Iter_next_doConsumeDegenerates'>doConsumeDegenerates</a> is true and <ahref='#SkPath_Iter_next_exact'>exact</a> is true, only skip <ahref='undocumented#Line'>lines</a>, <ahref='SkPath_Reference#Quad'>quads</a>, and
<ahref='SkPath_Reference#Conic'>conics</a> with zero lengths.
<td>storage for <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='undocumented#Data'>data</a> describing returned <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a></td>
<div><fiddle-embedname="00ae8984856486bdb626d0ed6587855a"><div>skip degenerate skips the first in a <ahref='#SkPath_kMove_Verb'>kMove_Verb</a> pair, the <ahref='#SkPath_kMove_Verb'>kMove_Verb</a>
followed by the <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, the zero length <ahref='undocumented#Line'>Line</a> and the very small <ahref='undocumented#Line'>Line</a>.
skip none shows all of the <ahref='SkPath_Reference#Verb'>Verbs</a> and <ahref='SkPoint_Reference#Point'>Points</a> in <ahref='SkPath_Reference#Path'>Path</a>.
Returns <ahref='SkPath_Reference#Conic'>conic</a> weight if <ahref='#SkPath_Iter_next'>next()</a> returned <ahref='#SkPath_kConic_Verb'>kConic_Verb</a>.
If <ahref='#SkPath_Iter_next'>next()</a> has not been called, or <ahref='#SkPath_Iter_next'>next()</a> did not return <ahref='#SkPath_kConic_Verb'>kConic_Verb</a>,
<ahref='SkPath_Reference#Conic'>conic</a> weight for <ahref='SkPath_Reference#Conic'>conic</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> returned by <ahref='#SkPath_Iter_next'>next()</a>
Returns true if last <ahref='#SkPath_kLine_Verb'>kLine_Verb</a> returned by <ahref='#SkPath_Iter_next'>next()</a> was generated
by <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>. When true, the end <ahref='SkPoint_Reference#Point'>point</a> returned by <ahref='#SkPath_Iter_next'>next()</a> is
also the start <ahref='SkPoint_Reference#Point'>point</a> of <ahref='SkPath_Overview#Contour'>contour</a>.
If <ahref='#SkPath_Iter_next'>next()</a> has not been called, or <ahref='#SkPath_Iter_next'>next()</a> did not return <ahref='#SkPath_kLine_Verb'>kLine_Verb</a>,
Returns true if subsequent calls to <ahref='#SkPath_Iter_next'>next()</a> return <ahref='#SkPath_kClose_Verb'>kClose_Verb</a> before returning
<ahref='#SkPath_kMove_Verb'>kMove_Verb</a>. if true, <ahref='SkPath_Overview#Contour'>contour</a><ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> is processing may end with <ahref='#SkPath_kClose_Verb'>kClose_Verb</a>, or
<ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> may have been initialized with force close set to true.
Iterates through <ahref='#Path_Verb_Array'>Verb_Array</a>, and associated <ahref='#Path_Point_Array'>Point_Array</a> and <ahref='#Path_Conic_Weight'>Conic_Weight</a>.
<ahref='#Path_Verb_Array'>Verb_Array</a>, <ahref='#Path_Point_Array'>Point_Array</a>, and <ahref='#Path_Conic_Weight'>Conic_Weight</a> are returned unaltered.
Initializes <ahref='#SkPath_RawIter'>RawIter</a> with an empty <ahref='SkPath_Reference#SkPath'>SkPath</a>. <ahref='#SkPath_RawIter_next'>next()</a> on <ahref='#SkPath_RawIter'>RawIter</a> returns <ahref='#SkPath_kDone_Verb'>kDone_Verb</a>.
Call <ahref='#SkPath_RawIter_setPath'>setPath</a> to initialize <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> at a later time.
Sets <ahref='#SkPath_RawIter'>RawIter</a> to return elements of <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='#Conic_Weight'>conic weight</a> in <ahref='#SkPath_RawIter_copy_const_SkPath_path'>path</a>.
Sets <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Iter'>Iter</a> to return elements of <ahref='#Verb_Array'>verb array</a>, <ahref='SkPath_Reference#Point_Array'>SkPoint array</a>, and <ahref='#Conic_Weight'>conic weight</a> in
Returns next <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a> in <ahref='#Verb_Array'>verb array</a>, and advances <ahref='#SkPath_RawIter'>RawIter</a>.
Zero to four <ahref='SkPoint_Reference#SkPoint'>SkPoint</a> are stored in <ahref='#SkPath_RawIter_next_pts'>pts</a>, depending on the returned <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a>.
<td>storage for <ahref='SkPoint_Reference#SkPoint'>SkPoint</a><ahref='undocumented#Data'>data</a> describing returned <ahref='SkPath_Reference#SkPath'>SkPath</a>::<ahref='#SkPath_Verb'>Verb</a></td>
Returns <ahref='SkPath_Reference#Conic'>conic</a> weight if <ahref='#SkPath_RawIter_next'>next()</a> returned <ahref='#SkPath_kConic_Verb'>kConic_Verb</a>.
If <ahref='#SkPath_RawIter_next'>next()</a> has not been called, or <ahref='#SkPath_RawIter_next'>next()</a> did not return <ahref='#SkPath_kConic_Verb'>kConic_Verb</a>,
<ahref='SkPath_Reference#Conic'>conic</a> weight for <ahref='SkPath_Reference#Conic'>conic</a><ahref='SkPoint_Reference#SkPoint'>SkPoint</a> returned by <ahref='#SkPath_RawIter_next'>next()</a>