<ahref="#Path">Path</a> contains <ahref="#Line">Lines</a> and <ahref="#Curve">Curves</a> which can be stroked or filled. <ahref="#Contour">Contour</a> is
composed of a series of connected <ahref="#Line">Lines</a> and <ahref="#Curve">Curves</a>. <ahref="#Path">Path</a> may contain zero,
Each <ahref="undocumented#Line">Line</a> and <ahref="undocumented#Curve">Curve</a> are described by <ahref="#Verb">Verb</a>, <ahref="#Point">Points</a>, and optional <ahref="#Conic_Weight">Conic Weight</a>.
Each pair of connected <ahref="#Line">Lines</a> and <ahref="#Curve">Curves</a> share common <ahref="undocumented#Point">Point</a>; for instance, <ahref="#Path">Path</a>
containing two connected <ahref="#Line">Lines</a> are described the <ahref="#Verb">Verb</a> sequence:
<ahref="#SkPath_kMove_Verb">SkPath::kMove Verb</a>, <ahref="#SkPath_kLine_Verb">SkPath::kLine Verb</a>, <ahref="#SkPath_kLine_Verb">SkPath::kLine Verb</a>; and a <ahref="undocumented#Point">Point</a> sequence
<ahref="#Path">Path</a> components <ahref="#Arc">Arc</a>, <ahref="SkRect_Reference#Rect">Rect</a>, <ahref="undocumented#Round_Rect">Round Rect</a>, <ahref="undocumented#Circle">Circle</a>, and <ahref="undocumented#Oval">Oval</a> are composed of
<div><fiddle-embedname="93887af0c1dac49521972698cf04069c"><div><ahref="#Path">Path</a> contains three <ahref="#Contour">Contours</a>: <ahref="undocumented#Line">Line</a>, <ahref="undocumented#Circle">Circle</a>, and <ahref="#Quad">Quad</a>. <ahref="undocumented#Line">Line</a> is stroked but
not filled. <ahref="undocumented#Circle">Circle</a> is stroked and filled; <ahref="undocumented#Circle">Circle</a> stroke forms a loop. <ahref="#Quad">Quad</a>
is stroked and filled, but since it is not closed, <ahref="#Quad">Quad</a> does not stroke a loop.</div></fiddle-embed></div>
<div><fiddle-embedname="36a995442c081ee779ecab2962d36e69"><div><ahref="#Path">Path</a> is drawn filled, then stroked, then stroked and filled.</div></fiddle-embed></div>
<ahref="#Contour">Contour</a> contains one or more <ahref="#Verb">Verbs</a>, and as many <ahref="#Point">Points</a> as
are required to satisfy <ahref="#Verb_Array">Verb Array</a>. First <ahref="#Verb">Verb</a> in <ahref="#Path">Path</a> is always
<ahref="#SkPath_kMove_Verb">SkPath::kMove Verb</a>; each <ahref="#SkPath_kMove_Verb">SkPath::kMove Verb</a> that follows starts a new <ahref="#Contour">Contour</a>.
<div><fiddle-embedname="0374f2dcd7effeb1dd435205a6c2de6f"><div>Each <ahref="#SkPath_moveTo">SkPath::moveTo</a> starts a new <ahref="#Contour">Contour</a>, and content after <ahref="#SkPath_close">SkPath::close()</a>
<ahref="#SkPath_moveTo">SkPath::moveTo</a>, the first <ahref="undocumented#Point">Point</a> of the third <ahref="#Contour">Contour</a> starts at the last <ahref="undocumented#Point">Point</a>
of the second <ahref="#Contour">Contour</a>.</div></fiddle-embed></div>
If final <ahref="#Verb">Verb</a> in <ahref="#Contour">Contour</a> is <ahref="#SkPath_kClose_Verb">SkPath::kClose Verb</a>, <ahref="undocumented#Line">Line</a> connects <ahref="#Last_Point">Last Point</a> in
<ahref="#Contour">Contour</a> with first <ahref="undocumented#Point">Point</a>. A closed <ahref="#Contour">Contour</a>, stroked, draws
<ahref="#Stroke_Join">Paint Stroke Join</a> at <ahref="#Last_Point">Last Point</a> and first <ahref="undocumented#Point">Point</a>. Without <ahref="#SkPath_kClose_Verb">SkPath::kClose Verb</a>
as final <ahref="#Verb">Verb</a>, <ahref="#Last_Point">Last Point</a> and first <ahref="undocumented#Point">Point</a> are not connected; <ahref="#Contour">Contour</a>
remains open. An open <ahref="#Contour">Contour</a>, stroked, draws <ahref="#Stroke_Cap">Paint Stroke Cap</a> at
<ahref="#Last_Point">Last Point</a> and first <ahref="undocumented#Point">Point</a>.
<div><fiddle-embedname="7a1f39b12d2cd8b7f5b1190879259cb2"><div><ahref="#Path">Path</a> is drawn stroked, with an open <ahref="#Contour">Contour</a> and a closed <ahref="#Contour">Contour</a>.</div></fiddle-embed></div>
<ahref="#Quad">Quadratic Beziers</a>, <ahref="#Conic">Conics</a>, and <ahref="#Cubic">Cubic Beziers</a>. <ahref="#Path">Path</a> contours may be open or
| <ahref="#SkPath_addRoundRect">addRoundRect</a> | Adds one <ahref="#Contour">Contour</a> containing <ahref="undocumented#Round_Rect">Round Rect</a> with common corner radii. |
| <ahref="#SkPath_conservativelyContainsRect">conservativelyContainsRect</a> | Returns true if <ahref="SkRect_Reference#Rect">Rect</a> may be inside. |
| <ahref="#SkPath_isInterpolatable">isInterpolatable</a> | Returns if pair <ahref="#SkPath_contains">contains</a> equal counts of <ahref="#Verb_Array">Verb Array</a> and <ahref="#Weight">Weights</a>. |
| <ahref="#SkPath_isNestedFillRects">isNestedFillRects</a> | Returns if describes <ahref="SkRect_Reference#Rect">Rect</a> pair, one inside the other. |
<ahref="#Verb">Verb</a> instructs <ahref="#Path">Path</a> how to interpret one or more <ahref="undocumented#Point">Point</a> and optional <ahref="#Conic_Weight">Conic Weight</a>;
<td><aname="SkPath_kMove_Verb"><code><strong>SkPath::kMove_Verb </strong></code></a></td><td>0</td><td>Starts new <ahref="#Contour">Contour</a> at next <ahref="undocumented#Point">Point</a>.</td>
<td><aname="SkPath_kLine_Verb"><code><strong>SkPath::kLine_Verb </strong></code></a></td><td>1</td><td>Adds <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to next <ahref="undocumented#Point">Point</a>.
<td><aname="SkPath_kQuad_Verb"><code><strong>SkPath::kQuad_Verb </strong></code></a></td><td>2</td><td>Adds <ahref="#Quad">Quad</a> from <ahref="#Last_Point">Last Point</a>, using control <ahref="undocumented#Point">Point</a>, and end <ahref="undocumented#Point">Point</a>.
<ahref="#Quad">Quad</a> is a parabolic section within tangents from <ahref="#Last_Point">Last Point</a> to control <ahref="undocumented#Point">Point</a>,
<td><aname="SkPath_kConic_Verb"><code><strong>SkPath::kConic_Verb </strong></code></a></td><td>3</td><td>Adds <ahref="#Conic">Conic</a> from <ahref="#Last_Point">Last Point</a>, using control <ahref="undocumented#Point">Point</a>, end <ahref="undocumented#Point">Point</a>, and <ahref="#Conic_Weight">Conic Weight</a>.
<ahref="#Conic">Conic</a> is a elliptical, parabolic, or hyperbolic section within tangents
from <ahref="#Last_Point">Last Point</a> to control <ahref="undocumented#Point">Point</a>, and control <ahref="undocumented#Point">Point</a> to end <ahref="undocumented#Point">Point</a>, constrained
<td><aname="SkPath_kCubic_Verb"><code><strong>SkPath::kCubic_Verb </strong></code></a></td><td>4</td><td>Adds <ahref="#Cubic">Cubic</a> from <ahref="#Last_Point">Last Point</a>, using two control <ahref="#Point">Points</a>, and end <ahref="undocumented#Point">Point</a>.
<ahref="#Cubic">Cubic</a> is a third-order <ahref="undocumented#Bezier">Bezier</a> section within tangents from <ahref="#Last_Point">Last Point</a> to
first control <ahref="undocumented#Point">Point</a>, and from second control <ahref="undocumented#Point">Point</a> to end <ahref="undocumented#Point">Point</a>.</td>
<td><aname="SkPath_kDone_Verb"><code><strong>SkPath::kDone_Verb </strong></code></a></td><td>6</td><td>Terminates <ahref="#Path">Path</a>. Not in <ahref="#Verb_Array">Verb Array</a>, but returned by <ahref="#Path">Path</a> iterator.</td>
When <ahref="#Path">Path</a><ahref="#SkPath_contains">contains</a> multiple overlapping <ahref="#Contour">Contours</a>, <ahref="#Direction">Direction</a> together with
Closed <ahref="#Contour">Contours</a> like <ahref="SkRect_Reference#Rect">Rect</a>, <ahref="undocumented#Round_Rect">Round Rect</a>, <ahref="undocumented#Circle">Circle</a>, and <ahref="undocumented#Oval">Oval</a> added with
<td><aname="SkPath_kCW_Direction"><code><strong>SkPath::kCW_Direction </strong></code></a></td><td>0</td><td><ahref="#Contour">Contour</a> travels in a clockwise direction</td>
<td><aname="SkPath_kCCW_Direction"><code><strong>SkPath::kCCW_Direction </strong></code></a></td><td>1</td><td><ahref="#Contour">Contour</a> travels in a counterclockwise direction</td>
<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
<div><fiddle-embedname="01ad6be9b7d15a2217daea273eb3d466"><div>delete calls <ahref="#Path">Path</a><ahref="undocumented#Destructor">Destructor</a>, but copy of original in path2 is unaffected.</div></fiddle-embed></div>
<ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, <ahref="#Weight">Weights</a>, and <ahref="#Fill_Type">Fill Type</a> to copy</td>
Compares <ahref="#SkPath_equal_operator_a">a</a> and <ahref="#SkPath_equal_operator_b">b</a>; returns true if <ahref="#Fill_Type">Fill Type</a>, <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a>
<div><fiddle-embedname="31883f51bb357f2ac5990d88f8b82e02"><div>Rewind removes <ahref="#Verb_Array">Verb Array</a> but leaves storage; since storage is not compared,
<ahref="#Path">Path</a> pair are equivalent.</div>
Compares <ahref="#SkPath_not_equal_operator_a">a</a> and <ahref="#SkPath_not_equal_operator_b">b</a>; returns true if <ahref="#Fill_Type">Fill Type</a>, <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a>
Interpolate between <ahref="#Path">Paths</a> with equal sized <ahref="SkPath_Reference#Point_Array">Point Arrays</a>.
Copy <ahref="#Verb_Array">Verb Array</a> and <ahref="#Weight">Weights</a> to <ahref="#SkPath_interpolate_out">out</a>,
and set <ahref="#SkPath_interpolate_out">out</a><ahref="#Point_Array">Point Array</a> to a weighted average of this <ahref="#Point_Array">Point Array</a> and <ahref="#SkPath_interpolate_ending">ending</a>
<ahref="#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="#Point_Array">Point Array</a>) and
one (this <ahref="#Point_Array">Point Array</a>); will work with values outside of this
range.
<ahref="#SkPath_interpolate">interpolate</a> returns false and leaves <ahref="#SkPath_interpolate_out">out</a> unchanged if <ahref="#Point_Array">Point Array</a> is not
the same size as <ahref="#SkPath_interpolate_ending">ending</a><ahref="#Point_Array">Point Array</a>. Call <ahref="#SkPath_isInterpolatable">isInterpolatable</a> to check <ahref="#Path">Path</a>
compatibility prior to calling <ahref="#SkPath_interpolate">interpolate</a>.
<ahref="#Fill_Type">Fill Type</a> selects the rule used to fill <ahref="#Path">Path</a>. <ahref="#Path">Path</a> set to <ahref="#SkPath_kWinding_FillType">kWinding FillType</a>
fills if the sum of <ahref="#Contour">Contour</a> edges is not zero, where clockwise edges add one, and
counterclockwise edges subtract one. <ahref="#Path">Path</a> set to <ahref="#SkPath_kEvenOdd_FillType">kEvenOdd FillType</a> fills if the
number of <ahref="#Contour">Contour</a> edges is odd. Each <ahref="#Fill_Type">Fill Type</a> has an inverse variant that
<td><aname="SkPath_kWinding_FillType"><code><strong>SkPath::kWinding_FillType </strong></code></a></td><td>0</td><td>Specifies fill as area is enclosed by a non-zero sum of <ahref="#Contour">Contour</a><ahref="#Direction">Directions</a>.</td>
<td><aname="SkPath_kEvenOdd_FillType"><code><strong>SkPath::kEvenOdd_FillType </strong></code></a></td><td>1</td><td>Specifies fill as area enclosed by an odd number of <ahref="#Contour">Contours</a>.</td>
<td><aname="SkPath_kInverseWinding_FillType"><code><strong>SkPath::kInverseWinding_FillType </strong></code></a></td><td>2</td><td>Specifies fill as area is enclosed by a zero sum of <ahref="#Contour">Contour</a><ahref="#Direction">Directions</a>.</td>
<td><aname="SkPath_kInverseEvenOdd_FillType"><code><strong>SkPath::kInverseEvenOdd_FillType </strong></code></a></td><td>3</td><td>Specifies fill as area enclosed by an even number of <ahref="#Contour">Contours</a>.</td>
Returns <ahref="#SkPath_FillType">FillType</a>, the rule used to fill <ahref="#Path">Path</a>. <ahref="#SkPath_FillType">FillType</a> of a new <ahref="#Path">Path</a> is
<div><fiddle-embedname="b4a91cd7f50b2a0a0d1bec6d0ac823d2"><div>If empty <ahref="#Path">Path</a> is set to inverse <ahref="#SkPath_FillType">FillType</a>, it fills all pixels.</div></fiddle-embed></div>
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="#Path">Path</a> drawn normally and through its inverse touches every pixel once.</div></fiddle-embed></div>
<ahref="#Path">Path</a> is convex if it <ahref="#SkPath_contains">contains</a> one <ahref="#Contour">Contour</a> and <ahref="#Contour">Contour</a> loops no more than
Initially <ahref="#Path">Path</a><ahref="#Convexity">Convexity</a> is <ahref="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>. <ahref="#Path">Path</a><ahref="#Convexity">Convexity</a> is computed
<td><aname="SkPath_kUnknown_Convexity"><code><strong>SkPath::kUnknown_Convexity </strong></code></a></td><td>0</td><td>Indicates <ahref="#Convexity">Convexity</a> has not been determined.</td>
<td><aname="SkPath_kConvex_Convexity"><code><strong>SkPath::kConvex_Convexity </strong></code></a></td><td>1</td><td><ahref="#Path">Path</a> has one <ahref="#Contour">Contour</a> made of a simple geometry without indentations.</td>
<td><aname="SkPath_kConcave_Convexity"><code><strong>SkPath::kConcave_Convexity </strong></code></a></td><td>2</td><td><ahref="#Path">Path</a> has more than one <ahref="#Contour">Contour</a>, or a geometry with indentations.</td>
<div><fiddle-embedname="bc19da9de880e3f339707247686efc0a"><div><ahref="#Convexity">Convexity</a> is unknown unless <ahref="#SkPath_getConvexity">getConvexity</a> is called without a subsequent call
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="#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 path is
one of: <ahref="#SkPath_kUnknown_Convexity">kUnknown Convexity</a>, <ahref="#SkPath_kConvex_Convexity">kConvex Convexity</a>, or <ahref="#SkPath_kConcave_Convexity">kConcave Convexity</a></td>
Computes <ahref="#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 path has not been altered, <ahref="#Convexity">Convexity</a> is not recomputed.
<ahref="#SkPath_addRoundRect">addRoundRect</a>, <ahref="#SkPath_addRRect">addRRect</a>. <ahref="#Path">Path</a> constructed with <ahref="#SkPath_conicTo">conicTo</a> or <ahref="#SkPath_rConicTo">rConicTo</a> will not
return true though <ahref="#Path">Path</a> draws <ahref="undocumented#Oval">Oval</a>.
<ahref="#SkPath_isOval_rect">rect</a> receives bounds of <ahref="undocumented#Oval">Oval</a>.
<ahref="#SkPath_isOval_dir">dir</a> receives <ahref="#SkPath_Direction">Direction</a> of <ahref="undocumented#Oval">Oval</a>: <ahref="#SkPath_kCW_Direction">kCW Direction</a> if clockwise, <ahref="#SkPath_kCCW_Direction">kCCW Direction</a> if
counterclockwise.
<ahref="#SkPath_isOval_start">start</a> receives <ahref="#SkPath_isOval_start">start</a> of <ahref="undocumented#Oval">Oval</a>: 0 for top, 1 for right, 2 for bottom, 3 for left.
<ahref="#SkPath_isOval_rect">rect</a>, <ahref="#SkPath_isOval_dir">dir</a>, and <ahref="#SkPath_isOval_start">start</a> are unmodified if <ahref="undocumented#Oval">Oval</a> is not found.
Triggers performance optimizations on some <ahref="undocumented#GPU_Surface">GPU Surface</a> implementations.
is not empty, not <ahref="SkRect_Reference#Rect">Rect</a>, and not <ahref="undocumented#Oval">Oval</a>. <ahref="#Path">Path</a> constructed with other calls
<ahref="#SkPath_isRRect_rrect">rrect</a> receives bounds of <ahref="undocumented#Round_Rect">Round Rect</a>.
<ahref="#SkPath_isRRect_dir">dir</a> receives <ahref="#SkPath_Direction">Direction</a> of <ahref="undocumented#Oval">Oval</a>: <ahref="#SkPath_kCW_Direction">kCW Direction</a> if clockwise, <ahref="#SkPath_kCCW_Direction">kCCW Direction</a> if
counterclockwise.
<ahref="#SkPath_isRRect_start">start</a> receives <ahref="#SkPath_isRRect_start">start</a> of <ahref="undocumented#Round_Rect">Round Rect</a>: 0 for top, 1 for right, 2 for bottom, 3 for left.
<ahref="#SkPath_isRRect_rrect">rrect</a>, <ahref="#SkPath_isRRect_dir">dir</a>, and <ahref="#SkPath_isRRect_start">start</a> are unmodified if <ahref="undocumented#Round_Rect">Round Rect</a> is not found.
Triggers performance optimizations on some <ahref="undocumented#GPU_Surface">GPU Surface</a> implementations.
Removes <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a>, and sets <ahref="#SkPath_FillType">FillType</a> to <ahref="#SkPath_kWinding_FillType">kWinding FillType</a>.
Internal storage associated with <ahref="#Path">Path</a> is released.
Removes <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Weight">Weights</a>, and sets <ahref="#SkPath_FillType">FillType</a> to <ahref="#SkPath_kWinding_FillType">kWinding FillType</a>.
Internal storage associated with <ahref="#Path">Path</a> is retained.
Empty <ahref="#Path">Path</a> may have <ahref="#SkPath_FillType">FillType</a> but has no <ahref="undocumented#SkPoint">SkPoint</a>, <ahref="#SkPath_Verb">Verb</a>, or <ahref="#Conic_Weight">Conic Weight</a>.
<ahref="#SkPath_empty_constructor">SkPath()</a> constructs empty <ahref="#Path">Path</a>; <ahref="#SkPath_reset">reset</a> and (<ahref="#SkPath_rewind">rewind</a>) make <ahref="#Path">Path</a> empty.
<ahref="#Contour">Contour</a> is closed if <ahref="#Path">Path</a><ahref="#SkPath_Verb">Verb</a> array was last modified by <ahref="#SkPath_close">close</a>. When stroked,
closed <ahref="#Contour">Contour</a> draws <ahref="#Stroke_Join">Paint Stroke Join</a> instead of <ahref="#Stroke_Cap">Paint Stroke Cap</a> at first and last <ahref="undocumented#Point">Point</a>.
<div><fiddle-embedname="03b740ab94b9017800a52e30b5e7fee7"><div><ahref="#SkPath_close">close</a> has no effect if <ahref="#Path">Path</a> is empty; <ahref="#SkPath_isLastContourClosed">isLastContourClosed</a> returns
false until <ahref="#Path">Path</a> has geometry followed by <ahref="#SkPath_close">close</a>.</div>
<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>.
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;
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</td>
<div><fiddle-embedname="1d50896c528cd4581966646b7d96acff"><div>As single precision floats: 100, 100.00001, and 100.00002 have different bit representations
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;
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</td>
If <ahref="#Path">Path</a><ahref="#SkPath_contains">contains</a> one <ahref="undocumented#Line">Line</a> and <ahref="#SkPath_isLine_line">line</a> is not nullptr, <ahref="#SkPath_isLine_line">line</a> is set to
<ahref="#Point_Array">Point Array</a><ahref="#SkPath_contains">contains</a><ahref="#Point">Points</a> satisfying the allocated <ahref="#Point">Points</a> for
each <ahref="#SkPath_Verb">Verb</a> in <ahref="#Verb_Array">Verb Array</a>. For instance, <ahref="#Path">Path</a> containing one <ahref="#Contour">Contour</a> with <ahref="undocumented#Line">Line</a>
one <ahref="undocumented#Point">Point</a> for move, one <ahref="undocumented#Point">Point</a> for <ahref="undocumented#Line">Line</a>, two <ahref="#Point">Points</a> for <ahref="#Quad">Quad</a>; totaling four <ahref="#Point">Points</a>.
<ahref="#Point_Array">Point Array</a> may be read directly from <ahref="#Path">Path</a> with <ahref="#SkPath_getPoints">getPoints</a>, or inspected with
Returns number of <ahref="#SkPath_getPoints_points">points</a> in <ahref="#Path">Path</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="undocumented#Point">Point</a> at <ahref="#SkPath_getPoint_index">index</a> in <ahref="#Point_Array">Point Array</a>. Valid range for <ahref="#SkPath_getPoint_index">index</a> is
0 to <ahref="#SkPath_countPoints">countPoints</a> - 1.
<ahref="#Verb_Array">Verb Array</a> may be read directly from <ahref="#Path">Path</a> with <ahref="#SkPath_getVerbs">getVerbs</a>, or inspected with <ahref="#SkPath_Iter">Iter</a>,
Returns the number of <ahref="#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>,
<ahref="#SkPath_kCubic_Verb">kCubic Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>; added to <ahref="#Path">Path</a>.
Returns the number of <ahref="#SkPath_getVerbs_verbs">verbs</a> in the path. 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="#Point_Array">Point Array</a>, <ahref="#Weight">Weights</a>, and <ahref="#Fill_Type">Fill Type</a> with <ahref="#SkPath_swap_other">other</a>.
Cached state is also exchanged. <ahref="#SkPath_swap">swap</a> internally exchanges pointers, so
<ahref="SkRect_Reference#Rect">Rect</a> returned includes all <ahref="#Point">Points</a> added to <ahref="#Path">Path</a>, including <ahref="#Point">Points</a> associated with
<div><fiddle-embedname="9160aa6d1476bd87d927cfc8a4bf25e7"><div>Bounds of upright <ahref="undocumented#Circle">Circle</a> can be predicted from center and radius.
Behaves identically to <ahref="#SkPath_getBounds">getBounds</a> when <ahref="#Path">Path</a><ahref="#SkPath_contains">contains</a>
only lines. If <ahref="#Path">Path</a><ahref="#SkPath_contains">contains</a> curves, computed bounds includes
the maximum extent of the <ahref="#Quad">Quad</a>, <ahref="#Conic">Conic</a>, or <ahref="#Cubic">Cubic</a>; is slower than <ahref="#SkPath_getBounds">getBounds</a>;
and unlike <ahref="#SkPath_getBounds">getBounds</a>, does not cache the result.
Returns true if <ahref="#SkPath_conservativelyContainsRect_rect">rect</a> is empty, that is, it has zero width or height; and
the <ahref="undocumented#Point">Point</a> or <ahref="undocumented#Line">Line</a> described by <ahref="#SkPath_conservativelyContainsRect_rect">rect</a> is contained by <ahref="#Path">Path</a>.
<div><fiddle-embedname="41638d13e40fa449ece354dde5fb1941"><div><ahref="SkRect_Reference#Rect">Rect</a> is drawn in blue if it is contained by red <ahref="#Path">Path</a>.</div></fiddle-embed></div>
Adds beginning of <ahref="#Contour">Contour</a> at <ahref="undocumented#Point">Point</a> (<ahref="#SkPath_moveTo_x">x</a>, <ahref="#SkPath_moveTo_y">y</a>).
Otherwise, start <ahref="#Contour">Contour</a> at <ahref="#Last_Point">Last Point</a><ahref="#SkPath_offset">offset</a> 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="#Path">Path</a> is empty, or last <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="#Point_Array">Point 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="#Point_Array">Point Array</a>.
Adds <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to <ahref="undocumented#Point">Point</a><ahref="#SkPath_lineTo_2_p">p</a>. If <ahref="#Path">Path</a> is empty, or last <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="#Point_Array">Point 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="undocumented#Point">Point</a><ahref="#SkPath_lineTo_2_p">p</a> to <ahref="#Point_Array">Point Array</a>.
Adds <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rLineTo_dx">dx</a>, <ahref="#SkPath_rLineTo_dy">dy</a>). If <ahref="#Path">Path</a> is empty, or last <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="#Point_Array">Point 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="#Point_Array">Point Array</a>.
<ahref="undocumented#Line">Line</a> end is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rLineTo_dx">dx</a>, <ahref="#SkPath_rLineTo_dy">dy</a>).
<ahref="#Quad">Quad</a> describes a quadratic <ahref="undocumented#Bezier">Bezier</a>, a second-order curve identical to a section
of a parabola. <ahref="#Quad">Quad</a> begins at a start <ahref="undocumented#Point">Point</a>, curves towards a control <ahref="undocumented#Point">Point</a>,
Adds <ahref="#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="#Path">Path</a> is empty, or last <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="#Point_Array">Point 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="#Quad">Quad</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Point">Point</a><ahref="#SkPath_quadTo_2_p1">p1</a>, to <ahref="undocumented#Point">Point</a><ahref="#SkPath_quadTo_2_p2">p2</a>.
If <ahref="#Path">Path</a> is empty, or last <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="#Point_Array">Point Array</a>, if needed;
then appends <ahref="#SkPath_kQuad_Verb">kQuad Verb</a> to <ahref="#Verb_Array">Verb Array</a>; and <ahref="#Point">Points</a><ahref="#SkPath_quadTo_2_p1">p1</a>, <ahref="#SkPath_quadTo_2_p2">p2</a>
Adds <ahref="#Quad">Quad</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rQuadTo_dx1">dx1</a>, <ahref="#SkPath_rQuadTo_dy1">dy1</a>), to <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rQuadTo_dx2">dx2</a>, <ahref="#SkPath_rQuadTo_dy2">dy2</a>).
If <ahref="#Path">Path</a> is empty, or last <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="#Quad">Quad</a>.
control and <ahref="#Quad">Quad</a> end to <ahref="#Point_Array">Point Array</a>.
<ahref="#Quad">Quad</a> control is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rQuadTo_dx1">dx1</a>, <ahref="#SkPath_rQuadTo_dy1">dy1</a>).
<ahref="#Quad">Quad</a> end is <ahref="#Last_Point">Last Point</a> plus <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rQuadTo_dx2">dx2</a>, <ahref="#SkPath_rQuadTo_dy2">dy2</a>).
Each <ahref="#Conic">Conic</a> in <ahref="#Path">Path</a> adds two <ahref="#Point">Points</a> and one <ahref="#Conic_Weight">Conic Weight</a>. <ahref="#Weight">Conic Weights</a> in <ahref="#Path">Path</a>
may be inspected with <ahref="#SkPath_Iter">Iter</a>, or with <ahref="#SkPath_RawIter">RawIter</a>.
<ahref="#Conic_Weight">Weight</a> determines both the strength of the control <ahref="undocumented#Point">Point</a> and the type of <ahref="#Conic">Conic</a>.
If <ahref="#Conic_Weight">Weight</a> is exactly one, then <ahref="#Conic">Conic</a> is identical to <ahref="#Quad">Quad</a>; it is always a
<div><fiddle-embedname="2aadded3d20dfef34d1c8abe28c7bc8d"><div>When <ahref="#Conic_Weight">Conic Weight</a> is one, <ahref="#Quad">Quad</a> is added to path; the two are identical.</div>
Adds <ahref="#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="#Path">Path</a> is empty, or last <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="#Point_Array">Point 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="#Point_Array">Point Array</a>; and <ahref="#SkPath_conicTo_w">w</a> to <ahref="#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
Adds <ahref="#Conic">Conic</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Point">Point</a><ahref="#SkPath_conicTo_2_p1">p1</a>, to <ahref="undocumented#Point">Point</a><ahref="#SkPath_conicTo_2_p2">p2</a>, weighted by <ahref="#SkPath_conicTo_2_w">w</a>.
If <ahref="#Path">Path</a> is empty, or last <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="#Point_Array">Point 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="#Point">Points</a><ahref="#SkPath_conicTo_2_p1">p1</a>, <ahref="#SkPath_conicTo_2_p2">p2</a> to <ahref="#Point_Array">Point Array</a>; and <ahref="#SkPath_conicTo_2_w">w</a> to <ahref="#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="#Point">Points</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
<div><fiddle-embedname="22d25e03b19d5bae92118877e462361b"><div><ahref="#Conic">Conics</a> and arcs use identical representations. As the arc sweep increases
Adds <ahref="#Conic">Conic</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Vector">Vector</a> (<ahref="#SkPath_rConicTo_dx1">dx1</a>, <ahref="#SkPath_rConicTo_dy1">dy1</a>), to <ahref="undocumented#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="#Path">Path</a> is empty, or last <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="#Conic">Conic</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="undocumented#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="undocumented#Vector">Vector</a> (<ahref="#SkPath_rConicTo_dx2">dx2</a>, <ahref="#SkPath_rConicTo_dy2">dy2</a>).
<ahref="#Cubic">Cubic</a> begins at a start <ahref="undocumented#Point">Point</a>, curving towards the first control <ahref="undocumented#Point">Point</a>;
Adds <ahref="#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="#Path">Path</a> is empty, or last <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="#Point_Array">Point 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="#Cubic">Cubic</a> from <ahref="#Last_Point">Last Point</a> towards <ahref="undocumented#Point">Point</a><ahref="#SkPath_cubicTo_2_p1">p1</a>, then towards <ahref="undocumented#Point">Point</a><ahref="#SkPath_cubicTo_2_p2">p2</a>, ending at
<ahref="undocumented#Point">Point</a><ahref="#SkPath_cubicTo_2_p3">p3</a>. If <ahref="#Path">Path</a> is empty, or last <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="#Point_Array">Point Array</a>, if needed;
then appends <ahref="#SkPath_kCubic_Verb">kCubic Verb</a> to <ahref="#Verb_Array">Verb Array</a>; and <ahref="#Point">Points</a><ahref="#SkPath_cubicTo_2_p1">p1</a>, <ahref="#SkPath_cubicTo_2_p2">p2</a>, <ahref="#SkPath_cubicTo_2_p3">p3</a>
<ahref="#Arc">Arc</a> can be constructed in a number of ways. <ahref="#Arc">Arc</a> may be described by part of <ahref="undocumented#Oval">Oval</a> and angles,
All <ahref="#Arc">Arc</a> draws are implemented by one or more <ahref="#Conic">Conic</a> draws. When <ahref="#Conic_Weight">Conic Weight</a> is less than one,
<ahref="#Conic">Conic</a> describes an <ahref="#Arc">Arc</a> of some <ahref="undocumented#Oval">Oval</a> or <ahref="undocumented#Circle">Circle</a>.
describes <ahref="#Arc">Arc</a> as a piece of <ahref="undocumented#Oval">Oval</a>, beginning at start angle, sweeping clockwise or counterclockwise,
which may continue <ahref="#Contour">Contour</a> or start a new one. This construction is similar to <ahref="undocumented#PostScript">PostScript</a> and
<ahref="undocumented#HTML_Canvas">HTML Canvas</a> arcs. Variation <ahref="#SkPath_addArc">addArc</a> always starts new <ahref="#Contour">Contour</a>. Canvas::drawArc draws without
describes <ahref="#Arc">Arc</a> as tangent to the line (x0, y0), (x1, y1) and tangent to the line (x1, y1), (x2, y2)
where (x0, y0) is the last <ahref="undocumented#Point">Point</a> added to <ahref="#Path">Path</a>. This construction is similar to <ahref="undocumented#PostScript">PostScript</a> and
describes <ahref="#Arc">Arc</a> as part of <ahref="undocumented#Oval">Oval</a> with radii (rx, ry), beginning at
last <ahref="undocumented#Point">Point</a> added to <ahref="#Path">Path</a> and ending at (x, y). More than one <ahref="#Arc">Arc</a> satisfies this criteria,
<ahref="#SkPath_conicTo">conicTo</a> describes <ahref="#Arc">Arc</a> of less than 180 degrees as a pair of tangent lines and <ahref="#Conic_Weight">Conic Weight</a>.
<ahref="#SkPath_conicTo">conicTo</a> can represent any <ahref="#Arc">Arc</a> with a sweep less than 180 degrees at any rotation. All <ahref="#SkPath_arcTo">arcTo</a>
constructions are converted to <ahref="#Conic">Conic</a> data when added to <ahref="#Path">Path</a>.
5 describes an arc from <ahref="undocumented#Oval">Oval</a> center, arc start <ahref="undocumented#Point">Point</a> and arc end <ahref="undocumented#Point">Point</a>.
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>. <ahref="#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="#Arc">Arc</a> clockwise.
<ahref="#SkPath_arcTo">arcTo</a> adds <ahref="undocumented#Line">Line</a> connecting <ahref="#Path">Path</a> last <ahref="undocumented#Point">Point</a> to initial <ahref="#Arc">Arc</a><ahref="undocumented#Point">Point</a> if <ahref="#SkPath_arcTo_forceMoveTo">forceMoveTo</a>
is false and <ahref="#Path">Path</a> is not empty. Otherwise, added <ahref="#Contour">Contour</a> begins with first point
of <ahref="#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 contour when <ahref="#SkPath_arcTo_forceMoveTo">forceMoveTo</a> is false and when <ahref="#Path">Path</a>
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>, after appending <ahref="undocumented#Line">Line</a> if needed. <ahref="#Arc">Arc</a> is implemented by <ahref="#Conic">Conic</a>
weighted to describe part of <ahref="undocumented#Circle">Circle</a>. <ahref="#Arc">Arc</a> is contained by tangent from
last <ahref="#Path">Path</a> point (x0, y0) 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="#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 lines.
If last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> does not start <ahref="#Arc">Arc</a>, <ahref="#SkPath_arcTo">arcTo</a> appends connecting <ahref="undocumented#Line">Line</a> to <ahref="#Path">Path</a>.
The length of <ahref="undocumented#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="#Arc">Arc</a>.
<ahref="#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="#Path">Path</a><ahref="undocumented#Point">Point</a> to (<ahref="#SkPath_arcTo_2_x1">x1</a>, <ahref="#SkPath_arcTo_2_y1">y1</a>).
<ahref="#SkPath_arcTo">arcTo</a> implements the functionality of <ahref="#Arct">PostScript Arct</a> and <ahref="undocumented#HTML_Canvas_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="#Conic">Conic</a> in <ahref="#Path">Path</a>.</div>
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>, after appending <ahref="undocumented#Line">Line</a> if needed. <ahref="#Arc">Arc</a> is implemented by <ahref="#Conic">Conic</a>
weighted to describe part of <ahref="undocumented#Circle">Circle</a>. <ahref="#Arc">Arc</a> is contained by tangent from
last <ahref="#Path">Path</a> point 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="#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 lines.
If last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> does not start <ahref="#Arc">Arc</a>, <ahref="#SkPath_arcTo">arcTo</a> appends connecting <ahref="undocumented#Line">Line</a> to <ahref="#Path">Path</a>.
The length of <ahref="undocumented#Vector">Vector</a> from <ahref="#SkPath_arcTo_3_p1">p1</a> to <ahref="#SkPath_arcTo_3_p2">p2</a> does not affect <ahref="#Arc">Arc</a>.
<ahref="#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="#Path">Path</a><ahref="undocumented#Point">Point</a> to <ahref="#SkPath_arcTo_3_p1">p1</a>.
<ahref="#SkPath_arcTo">arcTo</a> implements the functionality of <ahref="#Arct">PostScript Arct</a> and <ahref="undocumented#HTML_Canvas_ArcTo">HTML Canvas ArcTo</a>.
<div><fiddle-embedname="0c056264a361579c18e5d02d3172d4d4"><div>Because tangent lines are parallel, <ahref="#SkPath_arcTo">arcTo</a> appends line from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> to
<ahref="#SkPath_arcTo_3_p1">p1</a>, but does not append a circular <ahref="#Conic">Conic</a>.</div>
Four <ahref="undocumented#Oval">Oval</a> parts with radii (rx, ry) start at last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> and ends at (x, y).
<ahref="#SkPath_ArcSize">ArcSize</a> and <ahref="#SkPath_Direction">Direction</a> select one of the four <ahref="undocumented#Oval">Oval</a> parts.
<td><aname="SkPath_kSmall_ArcSize"><code><strong>SkPath::kSmall_ArcSize </strong></code></a></td><td>0</td><td>smaller of <ahref="#Arc">Arc</a> pair</td>
<td><aname="SkPath_kLarge_ArcSize"><code><strong>SkPath::kLarge_ArcSize </strong></code></a></td><td>1</td><td>larger of <ahref="#Arc">Arc</a> pair</td>
<div><fiddle-embedname="8e40c546eecd9cc213200717240898ba"><div><ahref="#Arc">Arc</a> begins at top of <ahref="undocumented#Oval">Oval</a> pair and ends at bottom. <ahref="#Arc">Arc</a> can take four routes to get there.
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>. <ahref="#Arc">Arc</a> is implemented by one or more <ahref="#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="#Arc">Arc</a>
curves from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> to (<ahref="#SkPath_arcTo_4_x">x</a>, <ahref="#SkPath_arcTo_4_y">y</a>), choosing one of four possible routes:
clockwise or counterclockwise, and smaller or larger.
<ahref="#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="#Path">Path</a><ahref="undocumented#Point">Point</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="#Path">Path</a><ahref="undocumented#Point">Point</a> and (<ahref="#SkPath_arcTo_4_x">x</a>, <ahref="#SkPath_arcTo_4_y">y</a>) if both are greater than zero but
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>. <ahref="#Arc">Arc</a> is implemented by one or more <ahref="#Conic">Conic</a> weighted to describe part of <ahref="undocumented#Oval">Oval</a>
with radii (<ahref="#SkPath_arcTo_5_r">r</a>.fX, <ahref="#SkPath_arcTo_5_r">r</a>.fY) rotated by <ahref="#SkPath_arcTo_5_xAxisRotate">xAxisRotate</a> degrees. <ahref="#Arc">Arc</a> curves from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> to
(<ahref="#SkPath_arcTo_5_xy">xy</a>.fX, <ahref="#SkPath_arcTo_5_xy">xy</a>.fY), choosing one of four possible routes: clockwise or counterclockwise,
<ahref="#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="#Path">Path</a><ahref="undocumented#Point">Point</a> equals (x, y). <ahref="#SkPath_arcTo">arcTo</a> scales radii <ahref="#SkPath_arcTo_5_r">r</a> to fit last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> and
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>, relative to last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a>. <ahref="#Arc">Arc</a> is implemented by one or
more <ahref="#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="#Arc">Arc</a> curves from last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> (x0, y0) to end <ahref="undocumented#Point">Point</a>:
<ahref="#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="undocumented#Point">Point</a>
if either radii are zero, or if last <ahref="#Path">Path</a><ahref="undocumented#Point">Point</a> equals end <ahref="undocumented#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="#Path">Path</a><ahref="undocumented#Point">Point</a> and end <ahref="undocumented#Point">Point</a> if both are
greater than zero but too small to describe an arc.
Append <ahref="#SkPath_kClose_Verb">kClose Verb</a> to <ahref="#Path">Path</a>. A closed <ahref="#Contour">Contour</a> connects the first and last <ahref="undocumented#Point">Point</a>
with <ahref="#SkPaint_kFill_Style">SkPaint::kFill Style</a>. With <ahref="#SkPaint_kStroke_Style">SkPaint::kStroke Style</a>, open <ahref="#Contour">Contour</a> draws
<ahref="#Stroke_Cap">Paint Stroke Cap</a> at <ahref="#Contour">Contour</a> start and end; closed <ahref="#Contour">Contour</a> draws
<ahref="#Stroke_Join">Paint Stroke Join</a> at <ahref="#Contour">Contour</a> start and end.
<ahref="#SkPath_close">close</a> has no effect if <ahref="#Path">Path</a> is empty or last <ahref="#Path">Path</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="#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="#Conic">Conic</a> with <ahref="#Quad">Quad</a> array. <ahref="#Conic">Conic</a> is constructed from start <ahref="undocumented#Point">Point</a><ahref="#SkPath_ConvertConicToQuads_p0">p0</a>,
control <ahref="undocumented#Point">Point</a><ahref="#SkPath_ConvertConicToQuads_p1">p1</a>, end <ahref="undocumented#Point">Point</a><ahref="#SkPath_ConvertConicToQuads_p2">p2</a>, and weight <ahref="#SkPath_ConvertConicToQuads_w">w</a>.
<ahref="#Quad">Quad</a> array is stored in <ahref="#SkPath_ConvertConicToQuads_pts">pts</a>; this storage is supplied by caller.
Maximum <ahref="#Quad">Quad</a> count is 2 to the <ahref="#SkPath_ConvertConicToQuads_pow2">pow2</a>.
Every third point in array shares last <ahref="undocumented#Point">Point</a> of previous <ahref="#Quad">Quad</a> and first <ahref="undocumented#Point">Point</a> of
next <ahref="#Quad">Quad</a>. Maximum <ahref="#SkPath_ConvertConicToQuads_pts">pts</a> storage size is given by:
<ahref="#Conic_Weight">Conic Weight</a> determines the amount of influence <ahref="#Conic">Conic</a> control point has on the curve.
<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.
<div><fiddle-embedname="3ba94448a4ba48f926e643baeb5b1016"><div>A pair of <ahref="#Quad">Quad</a> curves are drawn in red on top of the elliptical <ahref="#Conic">Conic</a> curve in black.
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="#Path">Path</a> bounds. <ahref="#Path">Path</a> bounds may include <ahref="#SkPath_kMove_Verb">kMove Verb</a> points
that do not alter the area drawn by the returned <ahref="#SkPath_isRect_rect">rect</a>.
<div><fiddle-embedname="063a5f0a8de1fe998d227393e0866557"><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 line segments.</div>
setting <ahref="#SkPath_isNestedFillRects_rect">rect</a>[0] to outer <ahref="SkRect_Reference#Rect">Rect</a>, and <ahref="#SkPath_isNestedFillRects_rect">rect</a>[1] to inner <ahref="SkRect_Reference#Rect">Rect</a>;
setting <ahref="#SkPath_isNestedFillRects_dirs">dirs</a>[0] to <ahref="#SkPath_Direction">Direction</a> of outer <ahref="SkRect_Reference#Rect">Rect</a>, and <ahref="#SkPath_isNestedFillRects_dirs">dirs</a>[1] to <ahref="#SkPath_Direction">Direction</a> of inner
Add <ahref="SkRect_Reference#Rect">Rect</a> to <ahref="#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>,
starting with top-left corner of <ahref="SkRect_Reference#Rect">Rect</a>; followed by top-right, bottom-right,
<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.</div></fiddle-embed></div>
Add <ahref="SkRect_Reference#Rect">Rect</a> to <ahref="#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.
appending <ahref="#SkPath_kMove_Verb">kMove Verb</a>, three <ahref="#SkPath_kLine_Verb">kLine Verb</a>, and <ahref="#SkPath_kClose_Verb">kClose Verb</a>,
<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.</div></fiddle-embed></div>
Add <ahref="undocumented#Oval">Oval</a> to path, 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_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>.fRight, <ahref="#SkPath_addOval_oval">oval</a>.centerY()) 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>.
Add <ahref="undocumented#Oval">Oval</a> to <ahref="#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>.
Add <ahref="undocumented#Circle">Circle</a> centered at (<ahref="#SkPath_addCircle_x">x</a>, <ahref="#SkPath_addCircle_y">y</a>) of size <ahref="#SkPath_addCircle_radius">radius</a> to <ahref="#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:
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>.
Append <ahref="#Arc">Arc</a> to <ahref="#Path">Path</a>, as the start of new <ahref="#Contour">Contour</a>. <ahref="#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="#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="undocumented#Oval">Oval</a> instead of <ahref="#Arc">Arc</a>. Otherwise, <ahref="#SkPath_addArc_sweepAngle">sweepAngle</a> values are treated
modulo 360, and <ahref="#Arc">Arc</a> may or may not draw depending on numeric rounding.
Append <ahref="undocumented#Round_Rect">Round Rect</a> to <ahref="#Path">Path</a>, creating a new closed <ahref="#Contour">Contour</a>. <ahref="undocumented#Round_Rect">Round Rect</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="undocumented#Round_Rect">Round Rect</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="undocumented#Round_Rect">Round Rect</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
After appending, <ahref="#Path">Path</a> may be empty, or may contain: <ahref="SkRect_Reference#Rect">Rect</a>, <ahref="undocumented#Oval">Oval</a>, or RoundRect.
<div><fiddle-embedname="24736f685f265cf533f1700c042db353"><div>If either radius is zero, path <ahref="#SkPath_contains">contains</a><ahref="SkRect_Reference#Rect">Rect</a> and is drawn red.
Append <ahref="undocumented#Round_Rect">Round Rect</a> to <ahref="#Path">Path</a>, creating a new closed <ahref="#Contour">Contour</a>. <ahref="undocumented#Round_Rect">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="undocumented#Round_Rect">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="undocumented#Round_Rect">Round Rect</a> starts at the
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
After appending, <ahref="#Path">Path</a> may be empty, or may contain: <ahref="SkRect_Reference#Rect">Rect</a>, <ahref="undocumented#Oval">Oval</a>, or RoundRect.
Add <ahref="#SkPath_addRRect_rrect">rrect</a> to <ahref="#Path">Path</a>, creating a new closed <ahref="#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="#Path">Path</a> may be empty, or may contain: <ahref="SkRect_Reference#Rect">Rect</a>, <ahref="undocumented#Oval">Oval</a>, or <ahref="undocumented#Round_Rect">Round Rect</a>.
Add <ahref="#SkPath_addRRect_2_rrect">rrect</a> to <ahref="#Path">Path</a>, creating a new closed <ahref="#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 point of <ahref="#SkPath_addRRect_2_rrect">rrect</a> to add.
After appending, <ahref="#Path">Path</a> may be empty, or may contain: <ahref="SkRect_Reference#Rect">Rect</a>, <ahref="undocumented#Oval">Oval</a>, or <ahref="undocumented#Round_Rect">Round Rect</a>.
Add <ahref="#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="#Contour">Contour</a> added starts at <ahref="#SkPath_addPoly_pts">pts</a>[0], then adds a line for every additional <ahref="undocumented#Point">Point</a>
in <ahref="#SkPath_addPoly_pts">pts</a> array. If <ahref="#SkPath_close">close</a> is true,appends <ahref="#SkPath_kClose_Verb">kClose Verb</a> to <ahref="#Path">Path</a>, connecting
<ahref="#SkPath_addPoly_pts">pts</a>[<ahref="#SkPath_addPoly_count">count</a> - 1] and <ahref="#SkPath_addPoly_pts">pts</a>[0].
<ahref="#SkPath_AddPathMode">AddPathMode</a> chooses how <ahref="#SkPath_addPath">addPath</a> appends. Adding one <ahref="#Path">Path</a> to another can extend
the last <ahref="#Contour">Contour</a> or start a new <ahref="#Contour">Contour</a>.
<td><aname="SkPath_kAppend_AddPathMode"><code><strong>SkPath::kAppend_AddPathMode </strong></code></a></td><td>Path Verbs, Points, and Conic_Weights are appended to destination unaltered.</td><td>Since <ahref="#Path">Path</a><ahref="#Verb_Array">Verb Array</a> begins with <ahref="#SkPath_kMove_Verb">kMove Verb</a> if src is not empty, this
<td><aname="SkPath_kExtend_AddPathMode"><code><strong>SkPath::kExtend_AddPathMode </strong></code></a></td><td>If destination is closed or empty, start a new Contour. If destination</td><td>is not empty, add <ahref="undocumented#Line">Line</a> from <ahref="#Last_Point">Last Point</a> to added <ahref="#Path">Path</a> first <ahref="undocumented#Point">Point</a>. Skip added
The left column uses <ahref="#SkPath_kAppend_AddPathMode">kAppend AddPathMode</a>; the right uses <ahref="#SkPath_kExtend_AddPathMode">kExtend AddPathMode</a>.
Append <ahref="#SkPath_addPath_src">src</a> to <ahref="#Path">Path</a>, <ahref="#SkPath_offset">offset</a> 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="#Point_Array">Point Array</a>, and <ahref="#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
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="#Point_Array">Point Array</a>, and <ahref="#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
Append <ahref="#SkPath_addPath_3_src">src</a> to <ahref="#Path">Path</a>, transformed by <ahref="#SkPath_addPath_3_matrix">matrix</a>. Transformed curves may have different
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="#Point_Array">Point Array</a>, and <ahref="#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
Offset <ahref="#Point_Array">Point Array</a> by (<ahref="#SkPath_offset_2_dx">dx</a>, <ahref="#SkPath_offset_2_dy">dy</a>). <ahref="#Path">Path</a> is replaced by <ahref="#SkPath_offset">offset</a> data.
Transformed <ahref="#Path">Path</a> replaces <ahref="#SkPath_transform_dst">dst</a>; if <ahref="#SkPath_transform_dst">dst</a> is nullptr, original data
<ahref="#Path">Path</a> is defined cumulatively, often by adding a segment to the end of last
<ahref="#Contour">Contour</a>. <ahref="#Last_Point">Last Point</a> of <ahref="#Contour">Contour</a> is shared as first <ahref="undocumented#Point">Point</a> of added <ahref="undocumented#Line">Line</a> or <ahref="undocumented#Curve">Curve</a>.
<ahref="#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="#Path">Path</a> in <ahref="#SkPath_getLastPt_lastPt">lastPt</a>. Returns false if <ahref="#Point_Array">Point Array</a> is empty,
storing (0, 0) if <ahref="#SkPath_getLastPt_lastPt">lastPt</a> is not nullptr.
Set <ahref="#Last_Point">Last Point</a> to (<ahref="#SkPath_setLastPt_x">x</a>, <ahref="#SkPath_setLastPt_y">y</a>). If <ahref="#Point_Array">Point Array</a> is empty, append <ahref="#SkPath_kMove_Verb">kMove Verb</a> to
<ahref="#Verb_Array">Verb Array</a> and (<ahref="#SkPath_setLastPt_x">x</a>, <ahref="#SkPath_setLastPt_y">y</a>) to <ahref="#Point_Array">Point Array</a>.
instance, if <ahref="#Path">Path</a> only <ahref="#SkPath_contains">contains</a><ahref="#Line">Lines</a>, only the <ahref="#SkPath_kLine_SegmentMask">kLine SegmentMask</a> bit is set.
<td><aname="SkPath_kQuad_SegmentMask"><code><strong>SkPath::kQuad_SegmentMask </strong></code></a></td><td>2</td><td>Set if <ahref="#Verb_Array">Verb Array</a><ahref="#SkPath_contains">contains</a><ahref="#SkPath_kQuad_Verb">kQuad Verb</a>. Note that <ahref="#SkPath_conicTo">conicTo</a> may add a <ahref="#Quad">Quad</a>.</td>
<div><fiddle-embedname="0972a1bd6e012c7519d3998afc32e69f"><div>When <ahref="#SkPath_conicTo">conicTo</a> has a weight of one, <ahref="#Quad">Quad</a> is added to <ahref="#Path">Path</a>.</div>
if <ahref="#Path">Path</a><ahref="#SkPath_contains">contains</a> one or more <ahref="#Verb">Verbs</a> of that type.
Returns zero if <ahref="#Path">Path</a><ahref="#SkPath_contains">contains</a> no <ahref="#Line">Lines</a>, or <ahref="#Curve">Curves</a>: <ahref="#Quad">Quads</a>, <ahref="#Conic">Conics</a>, or <ahref="#Cubic">Cubics</a>.
| <ahref="#SkPath_FillType">FillType</a> | <ahref="#SkPath_contains">contains</a> returns true if <ahref="undocumented#Point">Point</a> is enclosed by |
| <ahref="#SkPath_kWinding_FillType">kWinding FillType</a> | a non-zero sum of <ahref="#Contour">Contour</a><ahref="#Direction">Directions</a>. |
| <ahref="#SkPath_kEvenOdd_FillType">kEvenOdd FillType</a> | an odd number of <ahref="#Contour">Contours</a>. |
| <ahref="#SkPath_kInverseWinding_FillType">kInverseWinding FillType</a> | a zero sum of <ahref="#Contour">Contour</a><ahref="#Direction">Directions</a>. |
| <ahref="#SkPath_kInverseEvenOdd_FillType">kInverseEvenOdd FillType</a> | and even number of <ahref="#Contour">Contours</a>. |
Writes text representation of <ahref="#Path">Path</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="#Path">Path</a>.
Set <ahref="#SkPath_dump_dumpAsHex">dumpAsHex</a> true to generate exact binary representations
Initializes <ahref="#Path">Path</a> from <ahref="#SkPath_readFromMemory_buffer">buffer</a> of size <ahref="#SkPath_readFromMemory_length">length</a>. Returns zero if the <ahref="#SkPath_readFromMemory_buffer">buffer</a> is
data is inconsistent, or the <ahref="#SkPath_readFromMemory_length">length</a> is too small.
<ahref="#Generation_ID">Generation ID</a> provides a quick way to check if <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, or
<ahref="#Conic_Weight">Conic Weight</a> has changed. <ahref="#Generation_ID">Generation ID</a> is not a hash; identical <ahref="#Path">Paths</a> will
Iterates through <ahref="#Verb_Array">Verb Array</a>, and associated <ahref="#Point_Array">Point Array</a> and <ahref="#Conic_Weight">Conic Weight</a>.
Provides options to treat open <ahref="#Contour">Contours</a> as closed, and to ignore
<div><fiddle-embedname="3ca8417e2a1466bf5b3ac97780a8070c"><div>Ignoring the actual <ahref="#Verb">Verbs</a> and replacing them with <ahref="#Quad">Quads</a> rounds the
Initializes <ahref="#SkPath_Iter_Iter">Iter</a> with an empty <ahref="#Path">Path</a>. <ahref="#SkPath_Iter_next">next</a> on <ahref="#SkPath_Iter_Iter">Iter</a> returns <ahref="#SkPath_kDone_Verb">kDone Verb</a>.
Call <ahref="#SkPath_Iter_setPath">setPath</a> to initialize <ahref="#SkPath_Iter_Iter">Iter</a> at a later time.
Sets <ahref="#SkPath_Iter_Iter">Iter</a> to return elements of <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> in <ahref="#SkPath_Iter_Iter_2_path">path</a>.
If <ahref="#SkPath_Iter_Iter_2_forceClose">forceClose</a> is true, <ahref="#SkPath_Iter_Iter">Iter</a> will add <ahref="#SkPath_kLine_Verb">kLine Verb</a> and <ahref="#SkPath_kClose_Verb">kClose Verb</a> after each
open <ahref="#Contour">Contour</a>. <ahref="#SkPath_Iter_Iter_2_path">path</a> is not altered.
Sets <ahref="#SkPath_Iter_Iter">Iter</a> to return elements of <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point 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_Iter_Iter">Iter</a> will add <ahref="#SkPath_kLine_Verb">kLine Verb</a> and <ahref="#SkPath_kClose_Verb">kClose Verb</a> after each
open <ahref="#Contour">Contour</a>. <ahref="#SkPath_Iter_setPath_path">path</a> is not altered.
Returns <ahref="#SkPath_Iter_next">next</a><ahref="#SkPath_Verb">Verb</a> in <ahref="#Verb_Array">Verb Array</a>, and advances <ahref="#SkPath_Iter_Iter">Iter</a>.
Zero to four <ahref="#Point">Points</a> are stored in <ahref="#SkPath_Iter_next_pts">pts</a>, depending on the returned <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="#Line">Lines</a>, <ahref="#Quad">Quads</a>, and <ahref="#Conic">Conics</a>; and
if <ahref="#SkPath_Iter_next_doConsumeDegenerates">doConsumeDegenerates</a> is true and <ahref="#SkPath_Iter_next_exact">exact</a> is true, only skip <ahref="#Line">Lines</a>, <ahref="#Quad">Quads</a>, and
<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>.
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>,
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="#Contour">Contour</a><ahref="#SkPath_Iter_Iter">Iter</a> is processing may end with <ahref="#SkPath_kClose_Verb">kClose Verb</a>, or
<ahref="#SkPath_Iter_Iter">Iter</a> may have been initialized with force <ahref="#SkPath_close">close</a> set to true.
Iterates through <ahref="#Verb_Array">Verb Array</a>, and associated <ahref="#Point_Array">Point Array</a> and <ahref="#Conic_Weight">Conic Weight</a>.
<ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> are returned unaltered.
Initializes <ahref="#SkPath_RawIter_RawIter">RawIter</a> with an empty <ahref="#Path">Path</a>. <ahref="#SkPath_RawIter_next">next</a> on <ahref="#SkPath_RawIter_RawIter">RawIter</a> returns <ahref="#SkPath_kDone_Verb">kDone Verb</a>.
Call <ahref="#SkPath_RawIter_setPath">setPath</a> to initialize <ahref="#SkPath_Iter">Iter</a> at a later time.
Sets <ahref="#SkPath_RawIter_RawIter">RawIter</a> to return elements of <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> in <ahref="#SkPath_RawIter_RawIter_2_path">path</a>.
Sets <ahref="#SkPath_Iter">Iter</a> to return elements of <ahref="#Verb_Array">Verb Array</a>, <ahref="#Point_Array">Point Array</a>, and <ahref="#Conic_Weight">Conic Weight</a> in <ahref="#SkPath_RawIter_setPath_path">path</a>.
Returns <ahref="#SkPath_RawIter_next">next</a><ahref="#SkPath_Verb">Verb</a> in <ahref="#Verb_Array">Verb Array</a>, and advances <ahref="#SkPath_RawIter_RawIter">RawIter</a>.
Zero to four <ahref="#Point">Points</a> are stored in <ahref="#SkPath_RawIter_next_pts">pts</a>, depending on the returned <ahref="#SkPath_Verb">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>,