1SkPath Reference 2=== 3 4 5<a name='SkPath'></a> 6 7--- 8 9<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 10class <a href='SkPath_Reference#SkPath'>SkPath</a> { 11 12 enum <a href='#SkPath_Direction'>Direction</a> : int { 13 <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, 14 <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>, 15 }; 16 17 <a href='#SkPath_empty_constructor'>SkPath()</a>; 18 <a href='#SkPath_copy_const_SkPath'>SkPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>); 19 <a href='#SkPath_destructor'>~SkPath()</a>; 20 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_copy_operator'>operator=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>); 21 friend bool <a href='#SkPath_equal_operator'>operator==</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& a, const <a href='SkPath_Reference#SkPath'>SkPath</a>& b); 22 friend bool <a href='#SkPath_notequal_operator'>operator!=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& a, const <a href='SkPath_Reference#SkPath'>SkPath</a>& b); 23 bool <a href='#SkPath_isInterpolatable'>isInterpolatable</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& compare) const; 24 bool <a href='#SkPath_interpolate'>interpolate</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& ending, <a href='undocumented#SkScalar'>SkScalar</a> weight, <a href='SkPath_Reference#SkPath'>SkPath</a>* out) const; 25 26 enum <a href='#SkPath_FillType'>FillType</a> { 27 <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>, 28 <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a>, 29 <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a>, 30 <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a>, 31 }; 32 33 <a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_getFillType'>getFillType</a>() const; 34 void <a href='#SkPath_setFillType'>setFillType</a>(<a href='#SkPath_FillType'>FillType</a> ft); 35 bool <a href='#SkPath_isInverseFillType'>isInverseFillType</a>() const; 36 void <a href='#SkPath_toggleInverseFillType'>toggleInverseFillType</a>(); 37 38 enum <a href='#SkPath_Convexity'>Convexity</a> : uint8_t { 39 <a href='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>, 40 <a href='#SkPath_kConvex_Convexity'>kConvex_Convexity</a>, 41 <a href='#SkPath_kConcave_Convexity'>kConcave_Convexity</a>, 42 }; 43 44 <a href='#SkPath_Convexity'>Convexity</a> <a href='#SkPath_getConvexity'>getConvexity</a>() const; 45 <a href='#SkPath_Convexity'>Convexity</a> <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a>() const; 46 void <a href='#SkPath_setConvexity'>setConvexity</a>(<a href='#SkPath_Convexity'>Convexity</a> convexity); 47 bool <a href='#SkPath_isConvex'>isConvex</a>() const; 48 bool <a href='#SkPath_isOval'>isOval</a>(<a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const; 49 bool <a href='#SkPath_isRRect'>isRRect</a>(<a href='SkRRect_Reference#SkRRect'>SkRRect</a>* rrect) const; 50 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_reset'>reset()</a>; 51 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rewind'>rewind()</a>; 52 bool <a href='#SkPath_isEmpty'>isEmpty</a>() const; 53 bool <a href='#SkPath_isLastContourClosed'>isLastContourClosed</a>() const; 54 bool <a href='#SkPath_isFinite'>isFinite</a>() const; 55 bool <a href='#SkPath_isVolatile'>isVolatile</a>() const; 56 void <a href='#SkPath_setIsVolatile'>setIsVolatile</a>(bool <a href='#SkPath_isVolatile'>isVolatile</a>); 57 static bool <a href='#SkPath_IsLineDegenerate'>IsLineDegenerate</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, bool exact); 58 static bool <a href='#SkPath_IsQuadDegenerate'>IsQuadDegenerate</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, 59 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p3, bool exact); 60 static bool <a href='#SkPath_IsCubicDegenerate'>IsCubicDegenerate</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, 61 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p3, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p4, bool exact); 62 bool <a href='#SkPath_isLine'>isLine</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='undocumented#Line'>line</a>[2]) const; 63 int <a href='#SkPath_countPoints'>countPoints</a>() const; 64 <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_getPoint'>getPoint</a>(int index) const; 65 int <a href='#SkPath_getPoints'>getPoints</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='SkPoint_Reference#Point'>points</a>[], int max) const; 66 int <a href='#SkPath_countVerbs'>countVerbs</a>() const; 67 int <a href='#SkPath_getVerbs'>getVerbs</a>(uint8_t <a href='SkPath_Reference#Verb'>verbs</a>[], int max) const; 68 void <a href='#SkPath_swap'>swap</a>(<a href='SkPath_Reference#SkPath'>SkPath</a>& other); 69 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPath_getBounds'>getBounds</a>() const; 70 void <a href='#SkPath_updateBoundsCache'>updateBoundsCache</a>() const; 71 <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPath_computeTightBounds'>computeTightBounds</a>() const; 72 bool <a href='#SkPath_conservativelyContainsRect'>conservativelyContainsRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>) const; 73 void <a href='#SkPath_incReserve'>incReserve</a>(int extraPtCount); 74 void <a href='#SkPath_shrinkToFit'>shrinkToFit</a>(); 75 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_moveTo'>moveTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y); 76 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_moveTo'>moveTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p); 77 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rMoveTo'>rMoveTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy); 78 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_lineTo'>lineTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y); 79 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_lineTo'>lineTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p); 80 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rLineTo'>rLineTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy); 81 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_quadTo'>quadTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x1, <a href='undocumented#SkScalar'>SkScalar</a> y1, <a href='undocumented#SkScalar'>SkScalar</a> x2, <a href='undocumented#SkScalar'>SkScalar</a> y2); 82 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_quadTo'>quadTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2); 83 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rQuadTo'>rQuadTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx1, <a href='undocumented#SkScalar'>SkScalar</a> dy1, <a href='undocumented#SkScalar'>SkScalar</a> dx2, <a href='undocumented#SkScalar'>SkScalar</a> dy2); 84 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_conicTo'>conicTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x1, <a href='undocumented#SkScalar'>SkScalar</a> y1, <a href='undocumented#SkScalar'>SkScalar</a> x2, <a href='undocumented#SkScalar'>SkScalar</a> y2, 85 <a href='undocumented#SkScalar'>SkScalar</a> w); 86 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_conicTo'>conicTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, <a href='undocumented#SkScalar'>SkScalar</a> w); 87 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rConicTo'>rConicTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx1, <a href='undocumented#SkScalar'>SkScalar</a> dy1, <a href='undocumented#SkScalar'>SkScalar</a> dx2, <a href='undocumented#SkScalar'>SkScalar</a> dy2, 88 <a href='undocumented#SkScalar'>SkScalar</a> w); 89 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_cubicTo'>cubicTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x1, <a href='undocumented#SkScalar'>SkScalar</a> y1, <a href='undocumented#SkScalar'>SkScalar</a> x2, <a href='undocumented#SkScalar'>SkScalar</a> y2, 90 <a href='undocumented#SkScalar'>SkScalar</a> x3, <a href='undocumented#SkScalar'>SkScalar</a> y3); 91 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_cubicTo'>cubicTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p3); 92 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rCubicTo'>rCubicTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx1, <a href='undocumented#SkScalar'>SkScalar</a> dy1, <a href='undocumented#SkScalar'>SkScalar</a> dx2, <a href='undocumented#SkScalar'>SkScalar</a> dy2, 93 <a href='undocumented#SkScalar'>SkScalar</a> dx3, <a href='undocumented#SkScalar'>SkScalar</a> dy3); 94 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='undocumented#Oval'>oval</a>, <a href='undocumented#SkScalar'>SkScalar</a> startAngle, <a href='undocumented#SkScalar'>SkScalar</a> sweepAngle, bool forceMoveTo); 95 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x1, <a href='undocumented#SkScalar'>SkScalar</a> y1, <a href='undocumented#SkScalar'>SkScalar</a> x2, <a href='undocumented#SkScalar'>SkScalar</a> y2, <a href='undocumented#SkScalar'>SkScalar</a> radius); 96 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> p2, <a href='undocumented#SkScalar'>SkScalar</a> radius); 97 98 enum <a href='#SkPath_ArcSize'>ArcSize</a> { 99 <a href='#SkPath_kSmall_ArcSize'>kSmall_ArcSize</a>, 100 <a href='#SkPath_kLarge_ArcSize'>kLarge_ArcSize</a>, 101 }; 102 103 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> rx, <a href='undocumented#SkScalar'>SkScalar</a> ry, <a href='undocumented#SkScalar'>SkScalar</a> xAxisRotate, <a href='#SkPath_ArcSize'>ArcSize</a> largeArc, 104 <a href='#SkPath_Direction'>Direction</a> sweep, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y); 105 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> r, <a href='undocumented#SkScalar'>SkScalar</a> xAxisRotate, <a href='#SkPath_ArcSize'>ArcSize</a> largeArc, <a href='#SkPath_Direction'>Direction</a> sweep, 106 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> xy); 107 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rArcTo'>rArcTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> rx, <a href='undocumented#SkScalar'>SkScalar</a> ry, <a href='undocumented#SkScalar'>SkScalar</a> xAxisRotate, <a href='#SkPath_ArcSize'>ArcSize</a> largeArc, 108 <a href='#SkPath_Direction'>Direction</a> sweep, <a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy); 109 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_close'>close()</a>; 110 static bool <a href='#SkPath_IsInverseFillType'>IsInverseFillType</a>(<a href='#SkPath_FillType'>FillType</a> fill); 111 static <a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_ConvertToNonInverseFillType'>ConvertToNonInverseFillType</a>(<a href='#SkPath_FillType'>FillType</a> fill); 112 static int <a href='#SkPath_ConvertConicToQuads'>ConvertConicToQuads</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p0, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, 113 <a href='undocumented#SkScalar'>SkScalar</a> w, <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[], int pow2); 114 bool <a href='#SkPath_isRect'>isRect</a>(<a href='SkRect_Reference#SkRect'>SkRect</a>* <a href='SkRect_Reference#Rect'>rect</a>, bool* isClosed = nullptr, <a href='#SkPath_Direction'>Direction</a>* direction = nullptr) const; 115 bool <a href='#SkPath_isNestedFillRects'>isNestedFillRects</a>(<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='SkRect_Reference#Rect'>rect</a>[2], <a href='#SkPath_Direction'>Direction</a> dirs[2] = nullptr) const; 116 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRect'>addRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>); 117 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRect'>addRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>, <a href='#SkPath_Direction'>Direction</a> dir, unsigned start); 118 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRect'>addRect</a>(<a href='undocumented#SkScalar'>SkScalar</a> left, <a href='undocumented#SkScalar'>SkScalar</a> top, <a href='undocumented#SkScalar'>SkScalar</a> right, <a href='undocumented#SkScalar'>SkScalar</a> bottom, 119 <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>); 120 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addOval'>addOval</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='undocumented#Oval'>oval</a>, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>); 121 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addOval'>addOval</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='undocumented#Oval'>oval</a>, <a href='#SkPath_Direction'>Direction</a> dir, unsigned start); 122 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addCircle'>addCircle</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, <a href='undocumented#SkScalar'>SkScalar</a> radius, 123 <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>); 124 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addArc'>addArc</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='undocumented#Oval'>oval</a>, <a href='undocumented#SkScalar'>SkScalar</a> startAngle, <a href='undocumented#SkScalar'>SkScalar</a> sweepAngle); 125 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRoundRect'>addRoundRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>, <a href='undocumented#SkScalar'>SkScalar</a> rx, <a href='undocumented#SkScalar'>SkScalar</a> ry, 126 <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>); 127 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRoundRect'>addRoundRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>, const <a href='undocumented#SkScalar'>SkScalar</a> radii[], 128 <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>); 129 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRRect'>addRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>); 130 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRRect'>addRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, <a href='#SkPath_Direction'>Direction</a> dir, unsigned start); 131 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPoly'>addPoly</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[], int count, bool close); 132 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPoly'>addPoly</a>(const std::initializer_list<<a href='SkPoint_Reference#SkPoint'>SkPoint</a>>& list, bool close); 133 134 enum <a href='#SkPath_AddPathMode'>AddPathMode</a> { 135 <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>, 136 <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>, 137 }; 138 139 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPath'>addPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy, 140 <a href='#SkPath_AddPathMode'>AddPathMode</a> mode = <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>); 141 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPath'>addPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='#SkPath_AddPathMode'>AddPathMode</a> mode = <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>); 142 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPath'>addPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>& <a href='SkMatrix_Reference#Matrix'>matrix</a>, 143 <a href='#SkPath_AddPathMode'>AddPathMode</a> mode = <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>); 144 <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_reverseAddPath'>reverseAddPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src); 145 void <a href='#SkPath_offset'>offset</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst) const; 146 void <a href='#SkPath_offset'>offset</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy); 147 void <a href='#SkPath_transform'>transform</a>(const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>& <a href='SkMatrix_Reference#Matrix'>matrix</a>, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst) const; 148 void <a href='#SkPath_transform'>transform</a>(const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>& <a href='SkMatrix_Reference#Matrix'>matrix</a>); 149 bool <a href='#SkPath_getLastPt'>getLastPt</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a>* lastPt) const; 150 void <a href='#SkPath_setLastPt'>setLastPt</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y); 151 void <a href='#SkPath_setLastPt'>setLastPt</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p); 152 153 enum <a href='#SkPath_SegmentMask'>SegmentMask</a> { 154 <a href='#SkPath_kLine_SegmentMask'>kLine_SegmentMask</a> = 1 << 0, 155 <a href='#SkPath_kQuad_SegmentMask'>kQuad_SegmentMask</a> = 1 << 1, 156 <a href='#SkPath_kConic_SegmentMask'>kConic_SegmentMask</a> = 1 << 2, 157 <a href='#SkPath_kCubic_SegmentMask'>kCubic_SegmentMask</a> = 1 << 3, 158 }; 159 160 uint32_t <a href='#SkPath_getSegmentMasks'>getSegmentMasks</a>() const; 161 162 enum <a href='#SkPath_Verb'>Verb</a> { 163 <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, 164 <a href='#SkPath_kLine_Verb'>kLine_Verb</a>, 165 <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a>, 166 <a href='#SkPath_kConic_Verb'>kConic_Verb</a>, 167 <a href='#SkPath_kCubic_Verb'>kCubic_Verb</a>, 168 <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, 169 <a href='#SkPath_kDone_Verb'>kDone_Verb</a>, 170 }; 171 172 bool <a href='#SkPath_contains'>contains</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y) const; 173 void <a href='#SkPath_dump'>dump</a>(<a href='SkWStream_Reference#SkWStream'>SkWStream</a>* <a href='SkStream_Reference#Stream'>stream</a>, bool forceClose, bool dumpAsHex) const; 174 void <a href='#SkPath_dump'>dump()</a> const; 175 void <a href='#SkPath_dumpHex'>dumpHex</a>() const; 176 size_t <a href='#SkPath_writeToMemory'>writeToMemory</a>(void* buffer) const; 177 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkData'>SkData</a>> <a href='#SkPath_serialize'>serialize()</a> const; 178 size_t <a href='#SkPath_readFromMemory'>readFromMemory</a>(const void* buffer, size_t length); 179 uint32_t <a href='#SkPath_getGenerationID'>getGenerationID</a>() const; 180 bool <a href='#SkPath_isValid'>isValid</a>() const; 181}; 182 183</pre> 184 185<a href='SkPath_Reference#Path'>Paths</a> contain geometry. <a href='SkPath_Reference#Path'>Paths</a> may be empty, or contain one or more <a href='SkPath_Reference#Verb'>Verbs</a> that 186outline a figure. <a href='SkPath_Reference#Path'>Path</a> always starts with a move verb to a <a href='#Cartesian_Coordinate'>Cartesian_Coordinate</a>, 187and may be followed by additional <a href='SkPath_Reference#Verb'>verbs</a> that add <a href='undocumented#Line'>lines</a> or <a href='undocumented#Curve'>curves</a>. 188Adding a close verb makes the geometry into a continuous loop, a closed <a href='SkPath_Overview#Contour'>contour</a>. 189<a href='SkPath_Reference#Path'>Paths</a> may contain any number of <a href='SkPath_Overview#Contour'>contours</a>, each beginning with a move verb. 190 191<a href='SkPath_Reference#Path'>Path</a> <a href='SkPath_Overview#Contour'>contours</a> may contain only a move verb, or may also contain <a href='undocumented#Line'>lines</a>, 192<a href='#Path_Quad'>Quadratic_Beziers</a>, <a href='SkPath_Reference#Conic'>Conics</a>, and <a href='#Path_Cubic'>Cubic_Beziers</a>. <a href='SkPath_Reference#Path'>Path</a> <a href='SkPath_Overview#Contour'>contours</a> may be open or 193closed. 194 195When used to draw a filled area, <a href='SkPath_Reference#Path'>Path</a> describes whether the fill is inside or 196outside the geometry. <a href='SkPath_Reference#Path'>Path</a> also describes the winding rule used to fill 197overlapping <a href='SkPath_Overview#Contour'>contours</a>. 198 199Internally, <a href='SkPath_Reference#Path'>Path</a> lazily computes metrics likes bounds and convexity. Call 200<a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_updateBoundsCache'>updateBoundsCache</a> to make <a href='SkPath_Reference#Path'>Path</a> thread safe. 201 202<a name='Verb'></a> 203 204<a name='SkPath_Verb'></a> 205 206--- 207 208<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 209 enum <a href='#SkPath_Verb'>Verb</a> { 210 <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, 211 <a href='#SkPath_kLine_Verb'>kLine_Verb</a>, 212 <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a>, 213 <a href='#SkPath_kConic_Verb'>kConic_Verb</a>, 214 <a href='#SkPath_kCubic_Verb'>kCubic_Verb</a>, 215 <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, 216 <a href='#SkPath_kDone_Verb'>kDone_Verb</a>, 217 }; 218</pre> 219 220<a href='#SkPath_Verb'>Verb</a> instructs <a href='SkPath_Reference#Path'>Path</a> how to interpret one or more <a href='SkPoint_Reference#Point'>Point</a> and optional <a href='#Path_Conic_Weight'>Conic_Weight</a>; 221manage <a href='SkPath_Overview#Contour'>Contour</a>, and terminate <a href='SkPath_Reference#Path'>Path</a>. 222 223### Constants 224 225<table style='border-collapse: collapse; width: 62.5em'> 226 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th> 227<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th> 228<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr> 229 <tr style='background-color: #f0f0f0; '> 230 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kMove_Verb'><code>SkPath::kMove_Verb</code></a></td> 231 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td> 232 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 233Consecutive <a href='#SkPath_kMove_Verb'>kMove_Verb</a> are preserved but all but the last <a href='#SkPath_kMove_Verb'>kMove_Verb</a> is 234ignored. <a href='#SkPath_kMove_Verb'>kMove_Verb</a> after other <a href='SkPath_Reference#Verb'>Verbs</a> implicitly closes the previous <a href='SkPath_Overview#Contour'>Contour</a> 235if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kFill_Style'>kFill_Style</a> is set when drawn; otherwise, stroke is drawn open. 236<a href='#SkPath_kMove_Verb'>kMove_Verb</a> as the last <a href='#SkPath_Verb'>Verb</a> is preserved but ignored. 237</td> 238 </tr> 239 <tr> 240 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kLine_Verb'><code>SkPath::kLine_Verb</code></a></td> 241 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td> 242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 243<a href='undocumented#Line'>Line</a> is a straight segment from <a href='SkPoint_Reference#Point'>Point</a> to <a href='SkPoint_Reference#Point'>Point</a>. Consecutive <a href='#SkPath_kLine_Verb'>kLine_Verb</a> 244extend <a href='SkPath_Overview#Contour'>Contour</a>. <a href='#SkPath_kLine_Verb'>kLine_Verb</a> at same position as prior <a href='#SkPath_kMove_Verb'>kMove_Verb</a> is 245preserved, and draws <a href='SkPoint_Reference#Point'>Point</a> if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kStroke_Style'>kStroke_Style</a> is set, and 246<a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Cap'>Cap</a> is <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a> or <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kRound_Cap'>kRound_Cap</a>. <a href='#SkPath_kLine_Verb'>kLine_Verb</a> 247at same position as prior <a href='undocumented#Line'>line</a> or <a href='undocumented#Curve'>curve</a> <a href='#SkPath_Verb'>Verb</a> is preserved but is ignored. 248</td> 249 </tr> 250 <tr style='background-color: #f0f0f0; '> 251 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kQuad_Verb'><code>SkPath::kQuad_Verb</code></a></td> 252 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td> 253 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 254Adds <a href='SkPath_Reference#Quad'>Quad</a> from <a href='#Path_Last_Point'>Last_Point</a>, using control <a href='SkPoint_Reference#Point'>Point</a>, and end <a href='SkPoint_Reference#Point'>Point</a>. 255<a href='SkPath_Reference#Quad'>Quad</a> is a parabolic section within tangents from <a href='#Path_Last_Point'>Last_Point</a> to control <a href='SkPoint_Reference#Point'>Point</a>, 256and control <a href='SkPoint_Reference#Point'>Point</a> to end <a href='SkPoint_Reference#Point'>Point</a>. 257</td> 258 </tr> 259 <tr> 260 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kConic_Verb'><code>SkPath::kConic_Verb</code></a></td> 261 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td> 262 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 263Adds <a href='SkPath_Reference#Conic'>Conic</a> from <a href='#Path_Last_Point'>Last_Point</a>, using control <a href='SkPoint_Reference#Point'>Point</a>, end <a href='SkPoint_Reference#Point'>Point</a>, and <a href='#Path_Conic_Weight'>Conic_Weight</a>. 264<a href='SkPath_Reference#Conic'>Conic</a> is a elliptical, parabolic, or hyperbolic section within tangents 265from <a href='#Path_Last_Point'>Last_Point</a> to control <a href='SkPoint_Reference#Point'>Point</a>, and control <a href='SkPoint_Reference#Point'>Point</a> to end <a href='SkPoint_Reference#Point'>Point</a>, constrained 266by <a href='#Path_Conic_Weight'>Conic_Weight</a>. <a href='#Path_Conic_Weight'>Conic_Weight</a> less than one is elliptical; equal to one is 267parabolic (and identical to <a href='SkPath_Reference#Quad'>Quad</a>); greater than one hyperbolic. 268</td> 269 </tr> 270 <tr style='background-color: #f0f0f0; '> 271 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kCubic_Verb'><code>SkPath::kCubic_Verb</code></a></td> 272 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>4</td> 273 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 274Adds <a href='SkPath_Reference#Cubic'>Cubic</a> from <a href='#Path_Last_Point'>Last_Point</a>, using two control <a href='SkPoint_Reference#Point'>Points</a>, and end <a href='SkPoint_Reference#Point'>Point</a>. 275<a href='SkPath_Reference#Cubic'>Cubic</a> is a third-order <a href='#Bezier_Curve'>Bezier_Curve</a> section within tangents from <a href='#Path_Last_Point'>Last_Point</a> 276to first control <a href='SkPoint_Reference#Point'>Point</a>, and from second control <a href='SkPoint_Reference#Point'>Point</a> to end <a href='SkPoint_Reference#Point'>Point</a>. 277</td> 278 </tr> 279 <tr> 280 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kClose_Verb'><code>SkPath::kClose_Verb</code></a></td> 281 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>5</td> 282 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 283Closes <a href='SkPath_Overview#Contour'>Contour</a>, connecting <a href='#Path_Last_Point'>Last_Point</a> to <a href='#SkPath_kMove_Verb'>kMove_Verb</a> <a href='SkPoint_Reference#Point'>Point</a>. Consecutive 284<a href='#SkPath_kClose_Verb'>kClose_Verb</a> are preserved but only first has an effect. <a href='#SkPath_kClose_Verb'>kClose_Verb</a> after 285<a href='#SkPath_kMove_Verb'>kMove_Verb</a> has no effect. 286</td> 287 </tr> 288 <tr style='background-color: #f0f0f0; '> 289 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kDone_Verb'><code>SkPath::kDone_Verb</code></a></td> 290 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>6</td> 291 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 292Not in <a href='#Path_Verb_Array'>Verb_Array</a>, but returned by <a href='SkPath_Reference#Path'>Path</a> iterator. 293</td> 294 </tr> 295Each <a href='#SkPath_Verb'>Verb</a> has zero or more <a href='SkPoint_Reference#Point'>Points</a> stored in <a href='SkPath_Reference#Path'>Path</a>. 296<a href='SkPath_Reference#Path'>Path</a> iterator returns complete <a href='undocumented#Curve'>curve</a> descriptions, duplicating shared <a href='SkPoint_Reference#Point'>Points</a> 297for consecutive entries. 298 299</table> 300 301| <a href='#SkPath_Verb'>Verb</a> | Allocated <a href='SkPoint_Reference#Point'>Points</a> | Iterated <a href='SkPoint_Reference#Point'>Points</a> | <a href='SkPath_Reference#Conic_Weight'>Weights</a> | 302| --- | --- | --- | --- | 303| <a href='#SkPath_kMove_Verb'>kMove_Verb</a> | 1 | 1 | 0 | 304| <a href='#SkPath_kLine_Verb'>kLine_Verb</a> | 1 | 2 | 0 | 305| <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a> | 2 | 3 | 0 | 306| <a href='#SkPath_kConic_Verb'>kConic_Verb</a> | 2 | 3 | 1 | 307| <a href='#SkPath_kCubic_Verb'>kCubic_Verb</a> | 3 | 4 | 0 | 308| <a href='#SkPath_kClose_Verb'>kClose_Verb</a> | 0 | 1 | 0 | 309| <a href='#SkPath_kDone_Verb'>kDone_Verb</a> | -- | 0 | 0 | 310 311### Example 312 313<div><fiddle-embed name="799096fdc1298aa815934a74e76570ca"> 314 315#### Example Output 316 317~~~~ 318verb count: 7 319verbs: kMove_Verb kLine_Verb kQuad_Verb kClose_Verb kMove_Verb kCubic_Verb kConic_Verb 320~~~~ 321 322</fiddle-embed></div> 323 324<a name='Direction'></a> 325 326<a name='SkPath_Direction'></a> 327 328--- 329 330<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 331 enum <a href='#SkPath_Direction'>Direction</a> : int { 332 <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, 333 <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>, 334 }; 335</pre> 336 337<a href='#SkPath_Direction'>Direction</a> describes whether <a href='SkPath_Overview#Contour'>Contour</a> is clockwise or counterclockwise. 338When <a href='SkPath_Reference#Path'>Path</a> contains multiple overlapping <a href='SkPath_Overview#Contour'>Contours</a>, <a href='#SkPath_Direction'>Direction</a> together with 339<a href='#Path_Fill_Type'>Fill_Type</a> determines whether overlaps are filled or form holes. 340 341<a href='#SkPath_Direction'>Direction</a> also determines how <a href='SkPath_Overview#Contour'>Contour</a> is measured. For instance, dashing 342measures along <a href='SkPath_Reference#Path'>Path</a> to determine where to start and stop stroke; <a href='#SkPath_Direction'>Direction</a> 343will change dashed results as it steps clockwise or counterclockwise. 344 345Closed <a href='SkPath_Overview#Contour'>Contours</a> like <a href='SkRect_Reference#Rect'>Rect</a>, <a href='#RRect'>Round_Rect</a>, <a href='undocumented#Circle'>Circle</a>, and <a href='undocumented#Oval'>Oval</a> added with 346<a href='#SkPath_kCW_Direction'>kCW_Direction</a> travel clockwise; the same added with <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a> 347travel counterclockwise. 348 349### Constants 350 351<table style='border-collapse: collapse; width: 62.5em'> 352 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th> 353<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th> 354<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr> 355 <tr style='background-color: #f0f0f0; '> 356 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kCW_Direction'><code>SkPath::kCW_Direction</code></a></td> 357 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td> 358 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 359contour travels clockwise</td> 360 </tr> 361 <tr> 362 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kCCW_Direction'><code>SkPath::kCCW_Direction</code></a></td> 363 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td> 364 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 365contour travels counterclockwise</td> 366 </tr> 367</table> 368 369### Example 370 371<div><fiddle-embed name="4bbae00b40ed2cfcd0007921ad693a7b"></fiddle-embed></div> 372 373### See Also 374 375<a href='#SkPath_arcTo'>arcTo</a> <a href='#SkPath_rArcTo'>rArcTo</a> <a href='#SkPath_isRect'>isRect</a> <a href='#SkPath_isNestedFillRects'>isNestedFillRects</a> <a href='#SkPath_addRect'>addRect</a> <a href='#SkPath_addOval'>addOval</a> 376 377<a name='SkPath_empty_constructor'></a> 378 379--- 380 381<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 382<a href='#SkPath_empty_constructor'>SkPath()</a> 383</pre> 384 385Constructs an empty <a href='SkPath_Reference#SkPath'>SkPath</a>. By default, <a href='SkPath_Reference#SkPath'>SkPath</a> has no <a href='SkPath_Reference#Verb'>verbs</a>, no <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and no <a href='SkPath_Reference#Conic_Weight'>weights</a>. 386<a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a> is set to <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>. 387 388### Return Value 389 390empty <a href='SkPath_Reference#SkPath'>SkPath</a> 391 392### Example 393 394<div><fiddle-embed name="0a0026fca638d1cd75c0ab884e3ee1c6"> 395 396#### Example Output 397 398~~~~ 399path is empty 400~~~~ 401 402</fiddle-embed></div> 403 404### See Also 405 406<a href='#SkPath_reset'>reset</a> <a href='#SkPath_rewind'>rewind</a> 407 408<a name='SkPath_copy_const_SkPath'></a> 409 410--- 411 412<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 413<a href='#SkPath_copy_const_SkPath'>SkPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>) 414</pre> 415 416Constructs a copy of an existing <a href='#SkPath_copy_const_SkPath_path'>path</a>. 417Copy constructor makes two <a href='SkPath_Reference#Path'>paths</a> identical by value. Internally, <a href='#SkPath_copy_const_SkPath_path'>path</a> and 418the returned result share pointer values. The underlying <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a> 419and <a href='SkPath_Reference#Conic_Weight'>weights</a> are copied when modified. 420 421Creating a <a href='SkPath_Reference#SkPath'>SkPath</a> copy is very efficient and never allocates memory. 422<a href='SkPath_Reference#SkPath'>SkPath</a> are always copied by value from the interface; the underlying shared 423pointers are not exposed. 424 425### Parameters 426 427<table> <tr> <td><a name='SkPath_copy_const_SkPath_path'><code><strong>path</strong></code></a></td> 428 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to copy by value</td> 429 </tr> 430</table> 431 432### Return Value 433 434copy of <a href='SkPath_Reference#SkPath'>SkPath</a> 435 436### Example 437 438<div><fiddle-embed name="647312aacd946c8a6eabaca797140432"><div>Modifying one <a href='#SkPath_copy_const_SkPath_path'>path</a> does not effect another, even if they started as copies 439of each other. 440</div> 441 442#### Example Output 443 444~~~~ 445path verbs: 2 446path2 verbs: 3 447after reset 448path verbs: 0 449path2 verbs: 3 450~~~~ 451 452</fiddle-embed></div> 453 454### See Also 455 456<a href='#SkPath_copy_operator'>operator=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_copy_const_SkPath_path'>path</a>) 457 458<a name='SkPath_destructor'></a> 459 460--- 461 462<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 463<a href='#SkPath_destructor'>~SkPath()</a> 464</pre> 465 466Releases ownership of any shared <a href='undocumented#Data'>data</a> and deletes <a href='undocumented#Data'>data</a> if <a href='SkPath_Reference#SkPath'>SkPath</a> is sole owner. 467 468### Example 469 470<div><fiddle-embed name="01ad6be9b7d15a2217daea273eb3d466"><div>delete calls <a href='SkPath_Reference#Path'>Path</a> destructor, but copy of original in path2 is unaffected. 471</div></fiddle-embed></div> 472 473### See Also 474 475<a href='#SkPath_empty_constructor'>SkPath()</a> <a href='#SkPath_copy_const_SkPath'>SkPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>) <a href='#SkPath_copy_operator'>operator=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>) 476 477<a name='SkPath_copy_operator'></a> 478 479--- 480 481<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 482<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_copy_operator'>operator=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>) 483</pre> 484 485Constructs a copy of an existing <a href='#SkPath_copy_operator_path'>path</a>. 486<a href='SkPath_Reference#SkPath'>SkPath</a> assignment makes two <a href='SkPath_Reference#Path'>paths</a> identical by value. Internally, assignment 487shares pointer values. The underlying <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a> and <a href='SkPath_Reference#Conic_Weight'>weights</a> 488are copied when modified. 489 490Copying <a href='SkPath_Reference#SkPath'>SkPath</a> by assignment is very efficient and never allocates memory. 491<a href='SkPath_Reference#SkPath'>SkPath</a> are always copied by value from the interface; the underlying shared 492pointers are not exposed. 493 494### Parameters 495 496<table> <tr> <td><a name='SkPath_copy_operator_path'><code><strong>path</strong></code></a></td> 497 <td><a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, <a href='SkPath_Reference#Conic_Weight'>weights</a>, and <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a> to copy</td> 498 </tr> 499</table> 500 501### Return Value 502 503<a href='SkPath_Reference#SkPath'>SkPath</a> copied by value 504 505### Example 506 507<div><fiddle-embed name="bba288f5f77fc8e37e89d2ec08e0ac60"> 508 509#### Example Output 510 511~~~~ 512path1 bounds = 10, 20, 30, 40 513path2 bounds = 10, 20, 30, 40 514~~~~ 515 516</fiddle-embed></div> 517 518### See Also 519 520<a href='#SkPath_swap'>swap</a> <a href='#SkPath_copy_const_SkPath'>SkPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_copy_operator_path'>path</a>) 521 522<a name='SkPath_equal_operator'></a> 523 524--- 525 526<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 527bool <a href='#SkPath_equal_operator'>operator==</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& a, const <a href='SkPath_Reference#SkPath'>SkPath</a>& b) 528</pre> 529 530Compares <a href='#SkPath_equal_operator_a'>a</a> and <a href='#SkPath_equal_operator_b'>b</a>; returns true if <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a>, <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='SkPath_Reference#Conic_Weight'>weights</a> 531are equivalent. 532 533### Parameters 534 535<table> <tr> <td><a name='SkPath_equal_operator_a'><code><strong>a</strong></code></a></td> 536 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to compare</td> 537 </tr> 538 <tr> <td><a name='SkPath_equal_operator_b'><code><strong>b</strong></code></a></td> 539 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to compare</td> 540 </tr> 541</table> 542 543### Return Value 544 545true if <a href='SkPath_Reference#SkPath'>SkPath</a> pair are equivalent 546 547### Example 548 549<div><fiddle-embed name="31883f51bb357f2ac5990d88f8b82e02"><div><a href='#SkPath_rewind'>rewind()</a> removes <a href='#Path_Verb_Array'>Verb_Array</a> but leaves storage; since storage is not compared, 550<a href='SkPath_Reference#Path'>Path</a> pair are equivalent. 551</div> 552 553#### Example Output 554 555~~~~ 556empty one == two 557moveTo one != two 558rewind one == two 559reset one == two 560~~~~ 561 562</fiddle-embed></div> 563 564### See Also 565 566<a href='#SkPath_notequal_operator'>operator!=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_equal_operator_a'>a</a>, const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_equal_operator_b'>b</a>) <a href='#SkPath_copy_operator'>operator=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>) 567 568<a name='SkPath_notequal_operator'></a> 569 570--- 571 572<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 573bool <a href='#SkPath_notequal_operator'>operator!=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& a, const <a href='SkPath_Reference#SkPath'>SkPath</a>& b) 574</pre> 575 576Compares <a href='#SkPath_notequal_operator_a'>a</a> and <a href='#SkPath_notequal_operator_b'>b</a>; returns true if <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a>, <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='SkPath_Reference#Conic_Weight'>weights</a> 577are not equivalent. 578 579### Parameters 580 581<table> <tr> <td><a name='SkPath_notequal_operator_a'><code><strong>a</strong></code></a></td> 582 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to compare</td> 583 </tr> 584 <tr> <td><a name='SkPath_notequal_operator_b'><code><strong>b</strong></code></a></td> 585 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to compare</td> 586 </tr> 587</table> 588 589### Return Value 590 591true if <a href='SkPath_Reference#SkPath'>SkPath</a> pair are not equivalent 592 593### Example 594 595<div><fiddle-embed name="bbbda1cc818d96c9c0d2a06c0c48902b"><div><a href='SkPath_Reference#Path'>Path</a> pair are equal though their convexity is not equal. 596</div> 597 598#### Example Output 599 600~~~~ 601empty one == two 602add rect one == two 603setConvexity one == two 604convexity != 605~~~~ 606 607</fiddle-embed></div> 608 609<a name='Property'></a> 610 611<a name='SkPath_isInterpolatable'></a> 612 613--- 614 615<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 616bool <a href='#SkPath_isInterpolatable'>isInterpolatable</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& compare)const 617</pre> 618 619Returns true if <a href='SkPath_Reference#SkPath'>SkPath</a> contain equal <a href='SkPath_Reference#Verb'>verbs</a> and equal <a href='SkPath_Reference#Conic_Weight'>weights</a>. 620If <a href='SkPath_Reference#SkPath'>SkPath</a> contain one or more <a href='SkPath_Reference#Conic'>conics</a>, the <a href='SkPath_Reference#Conic_Weight'>weights</a> must match. 621 622<a href='#SkPath_conicTo'>conicTo</a>() may add different <a href='SkPath_Reference#Verb'>verbs</a> depending on <a href='#Conic_Weight'>conic weight</a>, so it is not 623trivial to interpolate a pair of <a href='SkPath_Reference#SkPath'>SkPath</a> containing <a href='SkPath_Reference#Conic'>conics</a> with different 624<a href='#Conic_Weight'>conic weight</a> values. 625 626### Parameters 627 628<table> <tr> <td><a name='SkPath_isInterpolatable_compare'><code><strong>compare</strong></code></a></td> 629 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to <a href='#SkPath_isInterpolatable_compare'>compare</a></td> 630 </tr> 631</table> 632 633### Return Value 634 635true if <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='#Verb_Array'>verb array</a> and <a href='SkPath_Reference#Conic_Weight'>weights</a> are equivalent 636 637### Example 638 639<div><fiddle-embed name="c81fc7dfaf785c3fb77209c7f2ebe5b8"> 640 641#### Example Output 642 643~~~~ 644paths are interpolatable 645~~~~ 646 647</fiddle-embed></div> 648 649### See Also 650 651<a href='#SkPath_isInterpolatable'>isInterpolatable</a> 652 653<a name='Interpolate'></a> 654 655<a name='SkPath_interpolate'></a> 656 657--- 658 659<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 660bool interpolate(const <a href='SkPath_Reference#SkPath'>SkPath</a>& ending, <a href='undocumented#SkScalar'>SkScalar</a> weight, <a href='SkPath_Reference#SkPath'>SkPath</a>* out)const 661</pre> 662 663Interpolates between <a href='SkPath_Reference#Path'>Paths</a> with <a href='#Path_Point_Array'>Point_Array</a> of equal <a href='undocumented#Size'>size</a>. 664Copy <a href='#Path_Verb_Array'>Verb_Array</a> and <a href='SkPath_Reference#Conic_Weight'>Weights</a> to <a href='#SkPath_interpolate_out'>out</a>, and set <a href='#SkPath_interpolate_out'>out</a> <a href='#Path_Point_Array'>Point_Array</a> to a weighted 665average of this <a href='#Path_Point_Array'>Point_Array</a> and <a href='#SkPath_interpolate_ending'>ending</a> <a href='#Path_Point_Array'>Point_Array</a>, using the formula: 666<code>(<a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a> * <a href='#SkPath_interpolate_weight'>weight</a>) + <a href='#SkPath_interpolate_ending'>ending</a> <a href='SkPoint_Reference#Point'>Point</a> * (1 - <a href='#SkPath_interpolate_weight'>weight</a>)</code>. 667 668<a href='#SkPath_interpolate_weight'>weight</a> is most useful when between zero (<a href='#SkPath_interpolate_ending'>ending</a> <a href='#Path_Point_Array'>Point_Array</a>) and 669one (this <a href='#Path_Point_Array'>Point_Array</a>); will work with values outside of this 670range. 671 672<a href='#SkPath_interpolate'>interpolate()</a> returns false and leaves <a href='#SkPath_interpolate_out'>out</a> unchanged if <a href='#Path_Point_Array'>Point_Array</a> is not 673the same <a href='undocumented#Size'>size</a> as <a href='#SkPath_interpolate_ending'>ending</a> <a href='#Path_Point_Array'>Point_Array</a>. Call <a href='#SkPath_isInterpolatable'>isInterpolatable</a> to check <a href='SkPath_Reference#Path'>Path</a> 674compatibility prior to calling <a href='#SkPath_interpolate'>interpolate()</a>. 675 676### Parameters 677 678<table> <tr> <td><a name='SkPath_interpolate_ending'><code><strong>ending</strong></code></a></td> 679 <td><a href='#Path_Point_Array'>Point_Array</a> averaged with this <a href='#Path_Point_Array'>Point_Array</a></td> 680 </tr> 681 <tr> <td><a name='SkPath_interpolate_weight'><code><strong>weight</strong></code></a></td> 682 <td>contribution of this <a href='#Path_Point_Array'>Point_Array</a>, and 683one minus contribution of <a href='#SkPath_interpolate_ending'>ending</a> <a href='#Path_Point_Array'>Point_Array</a> 684</td> 685 </tr> 686 <tr> <td><a name='SkPath_interpolate_out'><code><strong>out</strong></code></a></td> 687 <td><a href='SkPath_Reference#Path'>Path</a> replaced by interpolated averages</td> 688 </tr> 689</table> 690 691### Return Value 692 693true if <a href='SkPath_Reference#Path'>Paths</a> contain same number of <a href='SkPoint_Reference#Point'>Points</a> 694 695### Example 696 697<div><fiddle-embed name="404f11c5c9c9ca8a64822d484552a473"></fiddle-embed></div> 698 699### See Also 700 701<a href='#SkPath_isInterpolatable'>isInterpolatable</a> 702 703<a name='Fill_Type'></a> 704 705<a name='SkPath_FillType'></a> 706 707--- 708 709<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 710 enum <a href='#SkPath_FillType'>FillType</a> { 711 <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>, 712 <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a>, 713 <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a>, 714 <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a>, 715 }; 716</pre> 717 718<a href='#Path_Fill_Type'>Fill_Type</a> selects the rule used to fill <a href='SkPath_Reference#Path'>Path</a>. <a href='SkPath_Reference#Path'>Path</a> set to <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> 719fills if the sum of <a href='SkPath_Overview#Contour'>Contour</a> edges is not zero, where clockwise edges add one, and 720counterclockwise edges subtract one. <a href='SkPath_Reference#Path'>Path</a> set to <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> fills if the 721number of <a href='SkPath_Overview#Contour'>Contour</a> edges is odd. Each <a href='#Path_Fill_Type'>Fill_Type</a> has an inverse variant that 722reverses the rule: 723<a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> fills where the sum of <a href='SkPath_Overview#Contour'>Contour</a> edges is zero; 724<a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> fills where the number of <a href='SkPath_Overview#Contour'>Contour</a> edges is even. 725 726### Example 727 728<div><fiddle-embed name="71fc6c069c377d808799f2453edabaf5"><div>The top row has two clockwise rectangles. The second row has one clockwise and 729one counterclockwise rectangle. The even-odd variants draw the same. The 730winding variants draw the top rectangle overlap, which has a winding of 2, the 731same as the outer parts of the top rectangles, which have a winding of 1. 732</div></fiddle-embed></div> 733 734### Constants 735 736<table style='border-collapse: collapse; width: 62.5em'> 737 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th> 738<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th> 739<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr> 740 <tr style='background-color: #f0f0f0; '> 741 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kWinding_FillType'><code>SkPath::kWinding_FillType</code></a></td> 742 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td> 743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 744is enclosed by a non-zero sum of Contour Directions</td> 745 </tr> 746 <tr> 747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kEvenOdd_FillType'><code>SkPath::kEvenOdd_FillType</code></a></td> 748 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td> 749 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 750is enclosed by an odd number of Contours</td> 751 </tr> 752 <tr style='background-color: #f0f0f0; '> 753 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kInverseWinding_FillType'><code>SkPath::kInverseWinding_FillType</code></a></td> 754 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td> 755 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 756is enclosed by a zero sum of Contour Directions</td> 757 </tr> 758 <tr> 759 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kInverseEvenOdd_FillType'><code>SkPath::kInverseEvenOdd_FillType</code></a></td> 760 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td> 761 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 762is enclosed by an even number of Contours</td> 763 </tr> 764</table> 765 766### Example 767 768<div><fiddle-embed name="d2c33dc791cd165dcc2423226ba5b095"></fiddle-embed></div> 769 770### See Also 771 772<a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Style'>Style</a> <a href='#SkPath_Direction'>Direction</a> <a href='#SkPath_getFillType'>getFillType</a> <a href='#SkPath_setFillType'>setFillType</a> 773 774<a name='SkPath_getFillType'></a> 775 776--- 777 778<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 779<a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_getFillType'>getFillType</a>()const 780</pre> 781 782Returns <a href='#SkPath_FillType'>FillType</a>, the rule used to fill <a href='SkPath_Reference#SkPath'>SkPath</a>. <a href='#SkPath_FillType'>FillType</a> of a new <a href='SkPath_Reference#SkPath'>SkPath</a> is 783<a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>. 784 785### Return Value 786 787one of: <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>, <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a>, <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a>, 788 789<a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> 790 791### Example 792 793<div><fiddle-embed name="019af90e778914e8a109d6305ede4fc4"> 794 795#### Example Output 796 797~~~~ 798default path fill type is kWinding_FillType 799~~~~ 800 801</fiddle-embed></div> 802 803### See Also 804 805<a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_setFillType'>setFillType</a> <a href='#SkPath_isInverseFillType'>isInverseFillType</a> 806 807<a name='SkPath_setFillType'></a> 808 809--- 810 811<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 812void <a href='#SkPath_setFillType'>setFillType</a>(<a href='#SkPath_FillType'>FillType</a> ft) 813</pre> 814 815Sets <a href='#SkPath_FillType'>FillType</a>, the rule used to fill <a href='SkPath_Reference#SkPath'>SkPath</a>. While there is no check 816that <a href='#SkPath_setFillType_ft'>ft</a> is legal, values outside of <a href='#SkPath_FillType'>FillType</a> are not supported. 817 818### Parameters 819 820<table> <tr> <td><a name='SkPath_setFillType_ft'><code><strong>ft</strong></code></a></td> 821 <td>one of: <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>, <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a>, <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a>,</td> 822 </tr> 823</table> 824 825<a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> 826 827### Example 828 829<div><fiddle-embed name="b4a91cd7f50b2a0a0d1bec6d0ac823d2"><div>If empty <a href='SkPath_Reference#Path'>Path</a> is set to inverse <a href='#SkPath_FillType'>FillType</a>, it fills all pixels. 830</div></fiddle-embed></div> 831 832### See Also 833 834<a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_getFillType'>getFillType</a> <a href='#SkPath_toggleInverseFillType'>toggleInverseFillType</a> 835 836<a name='SkPath_isInverseFillType'></a> 837 838--- 839 840<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 841bool <a href='#SkPath_isInverseFillType'>isInverseFillType</a>()const 842</pre> 843 844Returns if <a href='#SkPath_FillType'>FillType</a> describes area outside <a href='SkPath_Reference#SkPath'>SkPath</a> geometry. The inverse fill area 845extends indefinitely. 846 847### Return Value 848 849true if <a href='#SkPath_FillType'>FillType</a> is <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> or <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> 850 851### Example 852 853<div><fiddle-embed name="2a2d39f5da611545caa18bbcea873ab2"> 854 855#### Example Output 856 857~~~~ 858default path fill type is inverse: false 859~~~~ 860 861</fiddle-embed></div> 862 863### See Also 864 865<a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_getFillType'>getFillType</a> <a href='#SkPath_setFillType'>setFillType</a> <a href='#SkPath_toggleInverseFillType'>toggleInverseFillType</a> 866 867<a name='SkPath_toggleInverseFillType'></a> 868 869--- 870 871<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 872void <a href='#SkPath_toggleInverseFillType'>toggleInverseFillType</a>() 873</pre> 874 875Replaces <a href='#SkPath_FillType'>FillType</a> with its inverse. The inverse of <a href='#SkPath_FillType'>FillType</a> describes the area 876unmodified by the original <a href='#SkPath_FillType'>FillType</a>. 877 878| <a href='#SkPath_FillType'>FillType</a> | toggled <a href='#SkPath_FillType'>FillType</a> | 879| --- | --- | 880| <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> | <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> | 881| <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> | <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> | 882| <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> | <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> | 883| <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> | <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> | 884 885### Example 886 887<div><fiddle-embed name="400facce23d417bc5043c5f58404afbd"><div><a href='SkPath_Reference#Path'>Path</a> drawn normally and through its inverse touches every <a href='undocumented#Pixel'>pixel</a> once. 888</div></fiddle-embed></div> 889 890### See Also 891 892<a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_getFillType'>getFillType</a> <a href='#SkPath_setFillType'>setFillType</a> <a href='#SkPath_isInverseFillType'>isInverseFillType</a> 893 894<a name='Convexity'></a> 895 896<a name='SkPath_Convexity'></a> 897 898--- 899 900<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 901 enum <a href='#SkPath_Convexity'>Convexity</a> : uint8_t { 902 <a href='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>, 903 <a href='#SkPath_kConvex_Convexity'>kConvex_Convexity</a>, 904 <a href='#SkPath_kConcave_Convexity'>kConcave_Convexity</a>, 905 }; 906</pre> 907 908<a href='SkPath_Reference#Path'>Path</a> is convex if it contains one <a href='SkPath_Overview#Contour'>Contour</a> and <a href='SkPath_Overview#Contour'>Contour</a> loops no more than 909360 degrees, and <a href='SkPath_Overview#Contour'>Contour</a> angles all have same <a href='#SkPath_Direction'>Direction</a>. Convex <a href='SkPath_Reference#Path'>Path</a> 910may have better performance and require fewer resources on <a href='#GPU_Surface'>GPU_Surface</a>. 911 912<a href='SkPath_Reference#Path'>Path</a> is concave when either at least one <a href='#SkPath_Direction'>Direction</a> change is clockwise and 913another is counterclockwise, or the sum of the changes in <a href='#SkPath_Direction'>Direction</a> is not 360 914degrees. 915 916Initially <a href='SkPath_Reference#Path'>Path</a> <a href='#SkPath_Convexity'>Convexity</a> is <a href='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>. <a href='SkPath_Reference#Path'>Path</a> <a href='#SkPath_Convexity'>Convexity</a> is computed 917if needed by destination <a href='SkSurface_Reference#Surface'>Surface</a>. 918 919### Constants 920 921<table style='border-collapse: collapse; width: 62.5em'> 922 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th> 923<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th> 924<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr> 925 <tr style='background-color: #f0f0f0; '> 926 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kUnknown_Convexity'><code>SkPath::kUnknown_Convexity</code></a></td> 927 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td> 928 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 929indicates Convexity has not been determined</td> 930 </tr> 931 <tr> 932 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kConvex_Convexity'><code>SkPath::kConvex_Convexity</code></a></td> 933 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td> 934 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 935one Contour made of a simple geometry without indentations</td> 936 </tr> 937 <tr style='background-color: #f0f0f0; '> 938 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kConcave_Convexity'><code>SkPath::kConcave_Convexity</code></a></td> 939 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td> 940 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 941more than one Contour, or a geometry with indentations</td> 942 </tr> 943</table> 944 945### Example 946 947<div><fiddle-embed name="ac49e8b810bd6ed5d84b4f5a3b40a0ec"></fiddle-embed></div> 948 949### See Also 950 951<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_Direction'>Direction</a> <a href='#SkPath_getConvexity'>getConvexity</a> <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a> <a href='#SkPath_setConvexity'>setConvexity</a> <a href='#SkPath_isConvex'>isConvex</a> 952 953<a name='SkPath_getConvexity'></a> 954 955--- 956 957<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 958<a href='#SkPath_Convexity'>Convexity</a> <a href='#SkPath_getConvexity'>getConvexity</a>()const 959</pre> 960 961Computes <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> if required, and returns stored value. 962<a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> is computed if stored value is <a href='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>, 963or if <a href='SkPath_Reference#SkPath'>SkPath</a> has been altered since <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> was computed or set. 964 965### Return Value 966 967computed or stored <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> 968 969### Example 970 971<div><fiddle-embed name="a8f36f2fa90003e3691fd0da0bb0c243"></fiddle-embed></div> 972 973### See Also 974 975<a href='#SkPath_Convexity'>Convexity</a> <a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_Direction'>Direction</a> <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a> <a href='#SkPath_setConvexity'>setConvexity</a> <a href='#SkPath_isConvex'>isConvex</a> 976 977<a name='SkPath_getConvexityOrUnknown'></a> 978 979--- 980 981<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 982<a href='#SkPath_Convexity'>Convexity</a> <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a>()const 983</pre> 984 985Returns last computed <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a>, or <a href='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a> if 986<a href='SkPath_Reference#SkPath'>SkPath</a> has been altered since <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> was computed or set. 987 988### Return Value 989 990stored <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> 991 992### Example 993 994<div><fiddle-embed name="111c59e9afadb940ab8f41bdc25378a4"><div><a href='#SkPath_Convexity'>Convexity</a> is unknown unless <a href='#SkPath_getConvexity'>getConvexity</a> is called without a subsequent call 995that alters the <a href='SkPath_Reference#Path'>path</a>. 996</div></fiddle-embed></div> 997 998### See Also 999 1000<a href='#SkPath_Convexity'>Convexity</a> <a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_Direction'>Direction</a> <a href='#SkPath_getConvexity'>getConvexity</a> <a href='#SkPath_setConvexity'>setConvexity</a> <a href='#SkPath_isConvex'>isConvex</a> 1001 1002<a name='SkPath_setConvexity'></a> 1003 1004--- 1005 1006<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1007void <a href='#SkPath_setConvexity'>setConvexity</a>(<a href='#SkPath_Convexity'>Convexity</a> convexity) 1008</pre> 1009 1010Stores <a href='#SkPath_setConvexity_convexity'>convexity</a> so that it is later returned by <a href='#SkPath_getConvexity'>getConvexity</a>() or <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a>(). 1011<a href='#SkPath_setConvexity_convexity'>convexity</a> may differ from <a href='#SkPath_getConvexity'>getConvexity</a>(), although setting an incorrect value may 1012cause incorrect or inefficient drawing. 1013 1014If <a href='#SkPath_setConvexity_convexity'>convexity</a> is <a href='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>: <a href='#SkPath_getConvexity'>getConvexity</a>() will 1015compute <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a>, and <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a>() will return <a href='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>. 1016 1017If <a href='#SkPath_setConvexity_convexity'>convexity</a> is <a href='#SkPath_kConvex_Convexity'>kConvex_Convexity</a> or <a href='#SkPath_kConcave_Convexity'>kConcave_Convexity</a>, <a href='#SkPath_getConvexity'>getConvexity</a>() 1018and <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a>() will return <a href='#SkPath_setConvexity_convexity'>convexity</a> until the <a href='SkPath_Reference#Path'>path</a> is 1019altered. 1020 1021### Parameters 1022 1023<table> <tr> <td><a name='SkPath_setConvexity_convexity'><code><strong>convexity</strong></code></a></td> 1024 <td>one of: <a href='#SkPath_kUnknown_Convexity'>kUnknown_Convexity</a>, <a href='#SkPath_kConvex_Convexity'>kConvex_Convexity</a>, or <a href='#SkPath_kConcave_Convexity'>kConcave_Convexity</a></td> 1025 </tr> 1026</table> 1027 1028### Example 1029 1030<div><fiddle-embed name="875e32b4b1cb48d739325705fc0fa42c"></fiddle-embed></div> 1031 1032### See Also 1033 1034<a href='#SkPath_Convexity'>Convexity</a> <a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_Direction'>Direction</a> <a href='#SkPath_getConvexity'>getConvexity</a> <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a> <a href='#SkPath_isConvex'>isConvex</a> 1035 1036<a name='SkPath_isConvex'></a> 1037 1038--- 1039 1040<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1041bool <a href='#SkPath_isConvex'>isConvex</a>()const 1042</pre> 1043 1044Computes <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> if required, and returns true if value is <a href='#SkPath_kConvex_Convexity'>kConvex_Convexity</a>. 1045If <a href='#SkPath_setConvexity'>setConvexity</a>() was called with <a href='#SkPath_kConvex_Convexity'>kConvex_Convexity</a> or <a href='#SkPath_kConcave_Convexity'>kConcave_Convexity</a>, and 1046the <a href='SkPath_Reference#Path'>path</a> has not been altered, <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> is not recomputed. 1047 1048### Return Value 1049 1050true if <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> stored or computed is <a href='#SkPath_kConvex_Convexity'>kConvex_Convexity</a> 1051 1052### Example 1053 1054<div><fiddle-embed name="d8be8b6e59de244e4cbf58ec9554557b"><div>Concave shape is erroneously considered convex after a forced call to 1055<a href='#SkPath_setConvexity'>setConvexity</a>. 1056</div></fiddle-embed></div> 1057 1058### See Also 1059 1060<a href='#SkPath_Convexity'>Convexity</a> <a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_Direction'>Direction</a> <a href='#SkPath_getConvexity'>getConvexity</a> <a href='#SkPath_getConvexityOrUnknown'>getConvexityOrUnknown</a> <a href='#SkPath_setConvexity'>setConvexity</a> 1061 1062<a name='SkPath_isOval'></a> 1063 1064--- 1065 1066<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1067bool <a href='#SkPath_isOval'>isOval</a>(<a href='SkRect_Reference#SkRect'>SkRect</a>* bounds)const 1068</pre> 1069 1070Returns true if this <a href='SkPath_Reference#Path'>path</a> is recognized as an <a href='undocumented#Oval'>oval</a> or <a href='undocumented#Circle'>circle</a>. 1071 1072<a href='#SkPath_isOval_bounds'>bounds</a> receives <a href='#SkPath_isOval_bounds'>bounds</a> of <a href='undocumented#Oval'>oval</a>. 1073 1074<a href='#SkPath_isOval_bounds'>bounds</a> is unmodified if <a href='undocumented#Oval'>oval</a> is not found. 1075 1076### Parameters 1077 1078<table> <tr> <td><a name='SkPath_isOval_bounds'><code><strong>bounds</strong></code></a></td> 1079 <td>storage for bounding <a href='SkRect_Reference#SkRect'>SkRect</a> of <a href='undocumented#Oval'>oval</a>; may be nullptr</td> 1080 </tr> 1081</table> 1082 1083### Return Value 1084 1085true if <a href='SkPath_Reference#SkPath'>SkPath</a> is recognized as an <a href='undocumented#Oval'>oval</a> or <a href='undocumented#Circle'>circle</a> 1086 1087### Example 1088 1089<div><fiddle-embed name="a51256952b183ee0f7004f2c87cbbf5b"></fiddle-embed></div> 1090 1091### See Also 1092 1093<a href='undocumented#Oval'>Oval</a> <a href='#SkPath_addCircle'>addCircle</a> <a href='#SkPath_addOval'>addOval</a> 1094 1095<a name='SkPath_isRRect'></a> 1096 1097--- 1098 1099<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1100bool <a href='#SkPath_isRRect'>isRRect</a>(<a href='SkRRect_Reference#SkRRect'>SkRRect</a>* rrect)const 1101</pre> 1102 1103Returns true if <a href='SkPath_Reference#Path'>path</a> is representable as <a href='SkRRect_Reference#SkRRect'>SkRRect</a>. 1104Returns false if <a href='SkPath_Reference#Path'>path</a> is representable as <a href='undocumented#Oval'>oval</a>, <a href='undocumented#Circle'>circle</a>, or <a href='SkRect_Reference#SkRect'>SkRect</a>. 1105 1106<a href='#SkPath_isRRect_rrect'>rrect</a> receives bounds of <a href='SkRRect_Reference#SkRRect'>SkRRect</a>. 1107 1108<a href='#SkPath_isRRect_rrect'>rrect</a> is unmodified if <a href='SkRRect_Reference#SkRRect'>SkRRect</a> is not found. 1109 1110### Parameters 1111 1112<table> <tr> <td><a name='SkPath_isRRect_rrect'><code><strong>rrect</strong></code></a></td> 1113 <td>storage for bounding <a href='SkRect_Reference#SkRect'>SkRect</a> of <a href='SkRRect_Reference#SkRRect'>SkRRect</a>; may be nullptr</td> 1114 </tr> 1115</table> 1116 1117### Return Value 1118 1119true if <a href='SkPath_Reference#SkPath'>SkPath</a> contains only <a href='SkRRect_Reference#SkRRect'>SkRRect</a> 1120 1121### Example 1122 1123<div><fiddle-embed name="2aa939b90d96aff436b145a96305132c"><div>Draw rounded rectangle and its bounds. 1124</div></fiddle-embed></div> 1125 1126### See Also 1127 1128<a href='#RRect'>Round_Rect</a> <a href='#SkPath_addRoundRect'>addRoundRect</a> <a href='#SkPath_addRRect'>addRRect</a> 1129 1130<a name='SkPath_reset'></a> 1131 1132--- 1133 1134<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1135<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_reset'>reset()</a> 1136</pre> 1137 1138Sets <a href='SkPath_Reference#SkPath'>SkPath</a> to its initial state. 1139Removes verb array, <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array, and <a href='SkPath_Reference#Conic_Weight'>weights</a>, and sets <a href='#SkPath_FillType'>FillType</a> to <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>. 1140Internal storage associated with <a href='SkPath_Reference#SkPath'>SkPath</a> is released. 1141 1142### Return Value 1143 1144reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 1145 1146### Example 1147 1148<div><fiddle-embed name="8cdca35d2964bbbecb93d79a13f71c65"></fiddle-embed></div> 1149 1150### See Also 1151 1152<a href='#SkPath_rewind'>rewind()</a> 1153 1154<a name='SkPath_rewind'></a> 1155 1156--- 1157 1158<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1159<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rewind'>rewind()</a> 1160</pre> 1161 1162Sets <a href='SkPath_Reference#SkPath'>SkPath</a> to its initial state, preserving internal storage. 1163Removes verb array, <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array, and <a href='SkPath_Reference#Conic_Weight'>weights</a>, and sets <a href='#SkPath_FillType'>FillType</a> to <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>. 1164Internal storage associated with <a href='SkPath_Reference#SkPath'>SkPath</a> is retained. 1165 1166Use <a href='#SkPath_rewind'>rewind()</a> instead of <a href='#SkPath_reset'>reset()</a> if <a href='SkPath_Reference#SkPath'>SkPath</a> storage will be reused and performance 1167is critical. 1168 1169### Return Value 1170 1171reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 1172 1173### Example 1174 1175<div><fiddle-embed name="f1fedbb89da9c2a33a91805175663012"><div>Although path1 retains its internal storage, it is indistinguishable from 1176a newly initialized <a href='SkPath_Reference#Path'>path</a>. 1177</div></fiddle-embed></div> 1178 1179### See Also 1180 1181<a href='#SkPath_reset'>reset()</a> 1182 1183<a name='SkPath_isEmpty'></a> 1184 1185--- 1186 1187<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1188bool <a href='#SkPath_isEmpty'>isEmpty</a>()const 1189</pre> 1190 1191Returns if <a href='SkPath_Reference#SkPath'>SkPath</a> is empty. 1192Empty <a href='SkPath_Reference#SkPath'>SkPath</a> may have <a href='#SkPath_FillType'>FillType</a> but has no <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a>, or <a href='SkPath_Reference#Conic'>conic</a> weight. 1193<a href='#SkPath_empty_constructor'>SkPath()</a> constructs empty <a href='SkPath_Reference#SkPath'>SkPath</a>; <a href='#SkPath_reset'>reset()</a> and <a href='#SkPath_rewind'>rewind()</a> make <a href='SkPath_Reference#SkPath'>SkPath</a> empty. 1194 1195### Return Value 1196 1197true if the <a href='SkPath_Reference#Path'>path</a> contains no <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> array 1198 1199### Example 1200 1201<div><fiddle-embed name="0b34e6d55d11586744adeb889d2a12f4"> 1202 1203#### Example Output 1204 1205~~~~ 1206initial path is empty 1207after moveTo path is not empty 1208after rewind path is empty 1209after lineTo path is not empty 1210after reset path is empty 1211~~~~ 1212 1213</fiddle-embed></div> 1214 1215### See Also 1216 1217<a href='#SkPath_empty_constructor'>SkPath()</a> <a href='#SkPath_reset'>reset()</a> <a href='#SkPath_rewind'>rewind()</a> 1218 1219<a name='SkPath_isLastContourClosed'></a> 1220 1221--- 1222 1223<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1224bool <a href='#SkPath_isLastContourClosed'>isLastContourClosed</a>()const 1225</pre> 1226 1227Returns if <a href='SkPath_Overview#Contour'>contour</a> is closed. 1228<a href='SkPath_Overview#Contour'>Contour</a> is closed if <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> array was last modified by <a href='#SkPath_close'>close()</a>. When stroked, 1229closed <a href='SkPath_Overview#Contour'>contour</a> draws <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Join'>Join</a> instead of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Cap'>Cap</a> at first and last <a href='SkPoint_Reference#SkPoint'>SkPoint</a>. 1230 1231### Return Value 1232 1233true if the last <a href='SkPath_Overview#Contour'>contour</a> ends with a <a href='#SkPath_kClose_Verb'>kClose_Verb</a> 1234 1235### Example 1236 1237<div><fiddle-embed name="03b740ab94b9017800a52e30b5e7fee7"><div><a href='#SkPath_close'>close()</a> has no effect if <a href='SkPath_Reference#Path'>Path</a> is empty; <a href='#SkPath_isLastContourClosed'>isLastContourClosed</a>() returns 1238false until <a href='SkPath_Reference#Path'>Path</a> has geometry followed by <a href='#SkPath_close'>close()</a>. 1239</div> 1240 1241#### Example Output 1242 1243~~~~ 1244initial last contour is not closed 1245after close last contour is not closed 1246after lineTo last contour is not closed 1247after close last contour is closed 1248~~~~ 1249 1250</fiddle-embed></div> 1251 1252### See Also 1253 1254<a href='#SkPath_close'>close()</a> 1255 1256<a name='SkPath_isFinite'></a> 1257 1258--- 1259 1260<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1261bool <a href='#SkPath_isFinite'>isFinite</a>()const 1262</pre> 1263 1264Returns true for finite <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array values between negative <a href='undocumented#SK_ScalarMax'>SK_ScalarMax</a> and 1265positive <a href='undocumented#SK_ScalarMax'>SK_ScalarMax</a>. Returns false for any <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array value of 1266<a href='undocumented#SK_ScalarInfinity'>SK_ScalarInfinity</a>, <a href='undocumented#SK_ScalarNegativeInfinity'>SK_ScalarNegativeInfinity</a>, or <a href='undocumented#SK_ScalarNaN'>SK_ScalarNaN</a>. 1267 1268### Return Value 1269 1270true if all <a href='SkPoint_Reference#SkPoint'>SkPoint</a> values are finite 1271 1272### Example 1273 1274<div><fiddle-embed name="dd4e4dd2aaa8039b2430729c6b3af817"> 1275 1276#### Example Output 1277 1278~~~~ 1279initial path is finite 1280after line path is finite 1281after scale path is not finite 1282~~~~ 1283 1284</fiddle-embed></div> 1285 1286### See Also 1287 1288<a href='undocumented#SkScalar'>SkScalar</a> 1289 1290<a name='SkPath_isVolatile'></a> 1291 1292--- 1293 1294<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1295bool <a href='#SkPath_isVolatile'>isVolatile</a>()const 1296</pre> 1297 1298Returns true if the <a href='SkPath_Reference#Path'>path</a> is volatile; it will not be altered or discarded 1299by the caller after it is drawn. <a href='SkPath_Reference#SkPath'>SkPath</a> by default have volatile set false, allowing 1300<a href='SkSurface_Reference#SkSurface'>SkSurface</a> to attach a cache of <a href='undocumented#Data'>data</a> which speeds repeated drawing. If true, <a href='SkSurface_Reference#SkSurface'>SkSurface</a> 1301may not speed repeated drawing. 1302 1303### Return Value 1304 1305true if caller will alter <a href='SkPath_Reference#SkPath'>SkPath</a> after drawing 1306 1307### Example 1308 1309<div><fiddle-embed name="c722ebe8ac991d77757799ce29e509e1"> 1310 1311#### Example Output 1312 1313~~~~ 1314volatile by default is false 1315~~~~ 1316 1317</fiddle-embed></div> 1318 1319### See Also 1320 1321<a href='#SkPath_setIsVolatile'>setIsVolatile</a> 1322 1323<a name='Volatile'></a> 1324 1325<a name='SkPath_setIsVolatile'></a> 1326 1327--- 1328 1329<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1330void <a href='#SkPath_setIsVolatile'>setIsVolatile</a>(bool <a href='#SkPath_isVolatile'>isVolatile</a>) 1331</pre> 1332 1333Specifies whether <a href='SkPath_Reference#SkPath'>SkPath</a> is volatile; whether it will be altered or discarded 1334by the caller after it is drawn. <a href='SkPath_Reference#SkPath'>SkPath</a> by default have volatile set false, allowing 1335<a href='undocumented#SkBaseDevice'>SkBaseDevice</a> to attach a cache of <a href='undocumented#Data'>data</a> which speeds repeated drawing. 1336 1337Mark temporary <a href='SkPath_Reference#Path'>paths</a>, discarded or modified after use, as volatile 1338to inform <a href='undocumented#SkBaseDevice'>SkBaseDevice</a> that the <a href='SkPath_Reference#Path'>path</a> need not be cached. 1339 1340Mark animating <a href='SkPath_Reference#SkPath'>SkPath</a> volatile to improve performance. 1341Mark unchanging <a href='SkPath_Reference#SkPath'>SkPath</a> non-volatile to improve repeated rendering. 1342 1343<a href='undocumented#Raster_Surface'>raster surface</a> <a href='SkPath_Reference#SkPath'>SkPath</a> draws are affected by volatile for some shadows. 1344<a href='undocumented#GPU_Surface'>GPU surface</a> <a href='SkPath_Reference#SkPath'>SkPath</a> draws are affected by volatile for some shadows and concave geometries. 1345 1346### Parameters 1347 1348<table> <tr> <td><a name='SkPath_setIsVolatile_isVolatile'><code><strong>isVolatile</strong></code></a></td> 1349 <td>true if caller will alter <a href='SkPath_Reference#SkPath'>SkPath</a> after drawing</td> 1350 </tr> 1351</table> 1352 1353### Example 1354 1355<div><fiddle-embed name="2049ff5141f0c80aac497618622b28af"></fiddle-embed></div> 1356 1357### See Also 1358 1359<a href='#SkPath_setIsVolatile_isVolatile'>isVolatile</a> 1360 1361<a name='SkPath_IsLineDegenerate'></a> 1362 1363--- 1364 1365<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1366static bool <a href='#SkPath_IsLineDegenerate'>IsLineDegenerate</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, bool exact) 1367</pre> 1368 1369Tests if <a href='undocumented#Line'>line</a> between <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pair is degenerate. 1370<a href='undocumented#Line'>Line</a> with no length or that moves a very short distance is degenerate; it is 1371treated as a <a href='SkPoint_Reference#Point'>point</a>. 1372 1373<a href='#SkPath_IsLineDegenerate_exact'>exact</a> changes the equality test. If true, returns true only if <a href='#SkPath_IsLineDegenerate_p1'>p1</a> equals <a href='#SkPath_IsLineDegenerate_p2'>p2</a>. 1374If false, returns true if <a href='#SkPath_IsLineDegenerate_p1'>p1</a> equals or nearly equals <a href='#SkPath_IsLineDegenerate_p2'>p2</a>. 1375 1376### Parameters 1377 1378<table> <tr> <td><a name='SkPath_IsLineDegenerate_p1'><code><strong>p1</strong></code></a></td> 1379 <td><a href='undocumented#Line'>line</a> start <a href='SkPoint_Reference#Point'>point</a></td> 1380 </tr> 1381 <tr> <td><a name='SkPath_IsLineDegenerate_p2'><code><strong>p2</strong></code></a></td> 1382 <td><a href='undocumented#Line'>line</a> end <a href='SkPoint_Reference#Point'>point</a></td> 1383 </tr> 1384 <tr> <td><a name='SkPath_IsLineDegenerate_exact'><code><strong>exact</strong></code></a></td> 1385 <td>if false, allow nearly equals</td> 1386 </tr> 1387</table> 1388 1389### Return Value 1390 1391true if <a href='undocumented#Line'>line</a> is degenerate; its length is effectively zero 1392 1393### Example 1394 1395<div><fiddle-embed name="97a031f9186ade586928563840ce9116"><div>As single precision floats, 100 and 100.000001 have the same bit representation, 1396and are exactly equal. 100 and 100.0001 have different bit representations, and 1397are not exactly equal, but are nearly equal. 1398</div> 1399 1400#### Example Output 1401 1402~~~~ 1403line from (100,100) to (100,100) is degenerate, nearly 1404line from (100,100) to (100,100) is degenerate, exactly 1405line from (100,100) to (100.0001,100.0001) is degenerate, nearly 1406line from (100,100) to (100.0001,100.0001) is not degenerate, exactly 1407~~~~ 1408 1409</fiddle-embed></div> 1410 1411### See Also 1412 1413<a href='#SkPath_IsQuadDegenerate'>IsQuadDegenerate</a> <a href='#SkPath_IsCubicDegenerate'>IsCubicDegenerate</a> 1414 1415<a name='SkPath_IsQuadDegenerate'></a> 1416 1417--- 1418 1419<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1420static bool <a href='#SkPath_IsQuadDegenerate'>IsQuadDegenerate</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p3, bool exact) 1421</pre> 1422 1423Tests if <a href='SkPath_Reference#Quad'>quad</a> is degenerate. 1424<a href='SkPath_Reference#Quad'>Quad</a> with no length or that moves a very short distance is degenerate; it is 1425treated as a <a href='SkPoint_Reference#Point'>point</a>. 1426 1427### Parameters 1428 1429<table> <tr> <td><a name='SkPath_IsQuadDegenerate_p1'><code><strong>p1</strong></code></a></td> 1430 <td><a href='SkPath_Reference#Quad'>quad</a> start <a href='SkPoint_Reference#Point'>point</a></td> 1431 </tr> 1432 <tr> <td><a name='SkPath_IsQuadDegenerate_p2'><code><strong>p2</strong></code></a></td> 1433 <td><a href='SkPath_Reference#Quad'>quad</a> control <a href='SkPoint_Reference#Point'>point</a></td> 1434 </tr> 1435 <tr> <td><a name='SkPath_IsQuadDegenerate_p3'><code><strong>p3</strong></code></a></td> 1436 <td><a href='SkPath_Reference#Quad'>quad</a> end <a href='SkPoint_Reference#Point'>point</a></td> 1437 </tr> 1438 <tr> <td><a name='SkPath_IsQuadDegenerate_exact'><code><strong>exact</strong></code></a></td> 1439 <td>if true, returns true only if <a href='#SkPath_IsQuadDegenerate_p1'>p1</a>, <a href='#SkPath_IsQuadDegenerate_p2'>p2</a>, and <a href='#SkPath_IsQuadDegenerate_p3'>p3</a> are equal;</td> 1440 </tr> 1441</table> 1442 1443if false, returns true if <a href='#SkPath_IsQuadDegenerate_p1'>p1</a>, <a href='#SkPath_IsQuadDegenerate_p2'>p2</a>, and <a href='#SkPath_IsQuadDegenerate_p3'>p3</a> are equal or nearly equal 1444 1445### Return Value 1446 1447true if <a href='SkPath_Reference#Quad'>quad</a> is degenerate; its length is effectively zero 1448 1449### Example 1450 1451<div><fiddle-embed name="a2b255a7dac1926cc3a247d318d63c62"><div>As single precision floats: 100, 100.00001, and 100.00002 have different bit representations 1452but nearly the same value. Translating all three by 1000 gives them the same bit representation; 1453the fractional portion of the number can not be represented by the float and is lost. 1454</div> 1455 1456#### Example Output 1457 1458~~~~ 1459quad (100,100), (100.00001,100.00001), (100.00002,100.00002) is degenerate, nearly 1460quad (1100,1100), (1100,1100), (1100,1100) is degenerate, nearly 1461quad (100,100), (100.00001,100.00001), (100.00002,100.00002) is not degenerate, exactly 1462quad (1100,1100), (1100,1100), (1100,1100) is degenerate, exactly 1463~~~~ 1464 1465</fiddle-embed></div> 1466 1467### See Also 1468 1469<a href='#SkPath_IsLineDegenerate'>IsLineDegenerate</a> <a href='#SkPath_IsCubicDegenerate'>IsCubicDegenerate</a> 1470 1471<a name='SkPath_IsCubicDegenerate'></a> 1472 1473--- 1474 1475<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1476static bool <a href='#SkPath_IsCubicDegenerate'>IsCubicDegenerate</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p3, 1477 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p4, bool exact) 1478</pre> 1479 1480Tests if <a href='SkPath_Reference#Cubic'>cubic</a> is degenerate. 1481<a href='SkPath_Reference#Cubic'>Cubic</a> with no length or that moves a very short distance is degenerate; it is 1482treated as a <a href='SkPoint_Reference#Point'>point</a>. 1483 1484### Parameters 1485 1486<table> <tr> <td><a name='SkPath_IsCubicDegenerate_p1'><code><strong>p1</strong></code></a></td> 1487 <td><a href='SkPath_Reference#Cubic'>cubic</a> start <a href='SkPoint_Reference#Point'>point</a></td> 1488 </tr> 1489 <tr> <td><a name='SkPath_IsCubicDegenerate_p2'><code><strong>p2</strong></code></a></td> 1490 <td><a href='SkPath_Reference#Cubic'>cubic</a> control <a href='SkPoint_Reference#Point'>point</a> 1</td> 1491 </tr> 1492 <tr> <td><a name='SkPath_IsCubicDegenerate_p3'><code><strong>p3</strong></code></a></td> 1493 <td><a href='SkPath_Reference#Cubic'>cubic</a> control <a href='SkPoint_Reference#Point'>point</a> 2</td> 1494 </tr> 1495 <tr> <td><a name='SkPath_IsCubicDegenerate_p4'><code><strong>p4</strong></code></a></td> 1496 <td><a href='SkPath_Reference#Cubic'>cubic</a> end <a href='SkPoint_Reference#Point'>point</a></td> 1497 </tr> 1498 <tr> <td><a name='SkPath_IsCubicDegenerate_exact'><code><strong>exact</strong></code></a></td> 1499 <td>if true, returns true only if <a href='#SkPath_IsCubicDegenerate_p1'>p1</a>, <a href='#SkPath_IsCubicDegenerate_p2'>p2</a>, <a href='#SkPath_IsCubicDegenerate_p3'>p3</a>, and <a href='#SkPath_IsCubicDegenerate_p4'>p4</a> are equal;</td> 1500 </tr> 1501</table> 1502 1503if false, returns true if <a href='#SkPath_IsCubicDegenerate_p1'>p1</a>, <a href='#SkPath_IsCubicDegenerate_p2'>p2</a>, <a href='#SkPath_IsCubicDegenerate_p3'>p3</a>, and <a href='#SkPath_IsCubicDegenerate_p4'>p4</a> are equal or nearly equal 1504 1505### Return Value 1506 1507true if <a href='SkPath_Reference#Cubic'>cubic</a> is degenerate; its length is effectively zero 1508 1509### Example 1510 1511<div><fiddle-embed name="6b97099acdae80b16df0c4241f593991"> 1512 1513#### Example Output 1514 1515~~~~ 15160.00024414062 is degenerate 15170.00024414065 is length 1518~~~~ 1519 1520</fiddle-embed></div> 1521 1522<a name='SkPath_isLine'></a> 1523 1524--- 1525 1526<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1527bool <a href='#SkPath_isLine'>isLine</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='undocumented#Line'>line</a>[2])const 1528</pre> 1529 1530Returns true if <a href='SkPath_Reference#SkPath'>SkPath</a> contains only one <a href='#SkPath_isLine_line'>line</a>; 1531<a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> array has two entries: <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, <a href='#SkPath_kLine_Verb'>kLine_Verb</a>. 1532If <a href='SkPath_Reference#SkPath'>SkPath</a> contains one <a href='#SkPath_isLine_line'>line</a> and <a href='#SkPath_isLine_line'>line</a> is not nullptr, <a href='#SkPath_isLine_line'>line</a> is set to 1533<a href='#SkPath_isLine_line'>line</a> start <a href='SkPoint_Reference#Point'>point</a> and <a href='#SkPath_isLine_line'>line</a> end <a href='SkPoint_Reference#Point'>point</a>. 1534Returns false if <a href='SkPath_Reference#SkPath'>SkPath</a> is not one <a href='#SkPath_isLine_line'>line</a>; <a href='#SkPath_isLine_line'>line</a> is unaltered. 1535 1536### Parameters 1537 1538<table> <tr> <td><a name='SkPath_isLine_line'><code><strong>line</strong></code></a></td> 1539 <td>storage for <a href='#SkPath_isLine_line'>line</a>. May be nullptr</td> 1540 </tr> 1541</table> 1542 1543### Return Value 1544 1545true if <a href='SkPath_Reference#SkPath'>SkPath</a> contains exactly one <a href='#SkPath_isLine_line'>line</a> 1546 1547### Example 1548 1549<div><fiddle-embed name="1ad07d56e4258e041606d50cad969392"> 1550 1551#### Example Output 1552 1553~~~~ 1554empty is not line 1555zero line is line (0,0) (0,0) 1556line is line (10,10) (20,20) 1557second move is not line 1558~~~~ 1559 1560</fiddle-embed></div> 1561 1562<a name='Point_Array'></a> 1563 1564<a href='#Path_Point_Array'>Point_Array</a> contains <a href='SkPoint_Reference#Point'>Points</a> satisfying the allocated <a href='SkPoint_Reference#Point'>Points</a> for 1565each <a href='#SkPath_Verb'>Verb</a> in <a href='#Path_Verb_Array'>Verb_Array</a>. For instance, <a href='SkPath_Reference#Path'>Path</a> containing one <a href='SkPath_Overview#Contour'>Contour</a> with <a href='undocumented#Line'>Line</a> 1566and <a href='SkPath_Reference#Quad'>Quad</a> is described by <a href='#Path_Verb_Array'>Verb_Array</a>: <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, <a href='#SkPath_kLine_Verb'>kLine_Verb</a>, <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a>; and 1567one <a href='SkPoint_Reference#Point'>Point</a> for move, one <a href='SkPoint_Reference#Point'>Point</a> for <a href='undocumented#Line'>Line</a>, two <a href='SkPoint_Reference#Point'>Points</a> for <a href='SkPath_Reference#Quad'>Quad</a>; totaling four <a href='SkPoint_Reference#Point'>Points</a>. 1568 1569<a href='#Path_Point_Array'>Point_Array</a> may be read directly from <a href='SkPath_Reference#Path'>Path</a> with <a href='#SkPath_getPoints'>getPoints</a>, or inspected with 1570<a href='#SkPath_getPoint'>getPoint</a>, with <a href='#SkPath_Iter'>Iter</a>, or with <a href='#SkPath_RawIter'>RawIter</a>. 1571 1572<a name='SkPath_getPoints'></a> 1573 1574--- 1575 1576<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1577int <a href='#SkPath_getPoints'>getPoints</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='SkPoint_Reference#Point'>points</a>[], int max)const 1578</pre> 1579 1580Returns number of <a href='#SkPath_getPoints_points'>points</a> in <a href='SkPath_Reference#SkPath'>SkPath</a>. Up to <a href='#SkPath_getPoints_max'>max</a> <a href='#SkPath_getPoints_points'>points</a> are copied. 1581<a href='#SkPath_getPoints_points'>points</a> may be nullptr; then, <a href='#SkPath_getPoints_max'>max</a> must be zero. 1582If <a href='#SkPath_getPoints_max'>max</a> is greater than number of <a href='#SkPath_getPoints_points'>points</a>, excess <a href='#SkPath_getPoints_points'>points</a> storage is unaltered. 1583 1584### Parameters 1585 1586<table> <tr> <td><a name='SkPath_getPoints_points'><code><strong>points</strong></code></a></td> 1587 <td>storage for <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. May be nullptr</td> 1588 </tr> 1589 <tr> <td><a name='SkPath_getPoints_max'><code><strong>max</strong></code></a></td> 1590 <td>maximum to copy; must be greater than or equal to zero</td> 1591 </tr> 1592</table> 1593 1594### Return Value 1595 1596<a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPath_Reference#Point_Array'>SkPoint array</a> length 1597 1598### Example 1599 1600<div><fiddle-embed name="9bc86efda08cbcd9c6f7c5f220294a24"> 1601 1602#### Example Output 1603 1604~~~~ 1605no points point count: 3 1606zero max point count: 3 1607too small point count: 3 (0,0) (20,20) 1608just right point count: 3 (0,0) (20,20) (-10,-10) 1609~~~~ 1610 1611</fiddle-embed></div> 1612 1613### See Also 1614 1615<a href='#SkPath_countPoints'>countPoints</a> <a href='#SkPath_getPoint'>getPoint</a> 1616 1617<a name='SkPath_countPoints'></a> 1618 1619--- 1620 1621<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1622int <a href='#SkPath_countPoints'>countPoints</a>()const 1623</pre> 1624 1625Returns the number of <a href='SkPoint_Reference#Point'>points</a> in <a href='SkPath_Reference#SkPath'>SkPath</a>. 1626<a href='SkPoint_Reference#SkPoint'>SkPoint</a> count is initially zero. 1627 1628### Return Value 1629 1630<a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array length 1631 1632### Example 1633 1634<div><fiddle-embed name="bca6379ccef62cb081b10db7381deb27"> 1635 1636#### Example Output 1637 1638~~~~ 1639empty point count: 0 1640zero line point count: 2 1641line point count: 2 1642second move point count: 3 1643~~~~ 1644 1645</fiddle-embed></div> 1646 1647### See Also 1648 1649<a href='#SkPath_getPoints'>getPoints</a> 1650 1651<a name='SkPath_getPoint'></a> 1652 1653--- 1654 1655<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1656<a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_getPoint'>getPoint</a>(int index)const 1657</pre> 1658 1659Returns <a href='SkPoint_Reference#SkPoint'>SkPoint</a> at <a href='#SkPath_getPoint_index'>index</a> in <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. Valid range for <a href='#SkPath_getPoint_index'>index</a> is 16600 to <a href='#SkPath_countPoints'>countPoints</a>() - 1. 1661Returns (0, 0) if <a href='#SkPath_getPoint_index'>index</a> is out of range. 1662 1663### Parameters 1664 1665<table> <tr> <td><a name='SkPath_getPoint_index'><code><strong>index</strong></code></a></td> 1666 <td><a href='SkPath_Reference#Point_Array'>SkPoint array</a> element selector</td> 1667 </tr> 1668</table> 1669 1670### Return Value 1671 1672<a href='SkPath_Reference#Point_Array'>SkPoint array</a> value or (0, 0) 1673 1674### Example 1675 1676<div><fiddle-embed name="42885f1df13de109adccc5d531f62111"> 1677 1678#### Example Output 1679 1680~~~~ 1681point 0: (-10,-10) 1682point 1: (10,10) 1683~~~~ 1684 1685</fiddle-embed></div> 1686 1687### See Also 1688 1689<a href='#SkPath_countPoints'>countPoints</a> <a href='#SkPath_getPoints'>getPoints</a> 1690 1691<a name='Verb_Array'></a> 1692 1693<a href='#Path_Verb_Array'>Verb_Array</a> always starts with <a href='#SkPath_kMove_Verb'>kMove_Verb</a>. 1694If <a href='#SkPath_kClose_Verb'>kClose_Verb</a> is not the last entry, it is always followed by <a href='#SkPath_kMove_Verb'>kMove_Verb</a>; 1695the quantity of <a href='#SkPath_kMove_Verb'>kMove_Verb</a> equals the <a href='SkPath_Overview#Contour'>Contour</a> count. 1696<a href='#Path_Verb_Array'>Verb_Array</a> does not include or count <a href='#SkPath_kDone_Verb'>kDone_Verb</a>; it is a convenience 1697returned when iterating through <a href='#Path_Verb_Array'>Verb_Array</a>. 1698 1699<a href='#Path_Verb_Array'>Verb_Array</a> may be read directly from <a href='SkPath_Reference#Path'>Path</a> with <a href='#SkPath_getVerbs'>getVerbs</a>, or inspected with <a href='#SkPath_Iter'>Iter</a>, 1700or with <a href='#SkPath_RawIter'>RawIter</a>. 1701 1702<a name='SkPath_countVerbs'></a> 1703 1704--- 1705 1706<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1707int <a href='#SkPath_countVerbs'>countVerbs</a>()const 1708</pre> 1709 1710Returns the number of <a href='SkPath_Reference#Verb'>verbs</a>: <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, <a href='#SkPath_kLine_Verb'>kLine_Verb</a>, <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a>, <a href='#SkPath_kConic_Verb'>kConic_Verb</a>, 1711<a href='#SkPath_kCubic_Verb'>kCubic_Verb</a>, and <a href='#SkPath_kClose_Verb'>kClose_Verb</a>; added to <a href='SkPath_Reference#SkPath'>SkPath</a>. 1712 1713### Return Value 1714 1715length of verb array 1716 1717### Example 1718 1719<div><fiddle-embed name="af0c66aea3ef81b709664c7007f48aae"> 1720 1721#### Example Output 1722 1723~~~~ 1724empty verb count: 0 1725round rect verb count: 10 1726~~~~ 1727 1728</fiddle-embed></div> 1729 1730### See Also 1731 1732<a href='#SkPath_getVerbs'>getVerbs</a> <a href='#SkPath_Iter'>Iter</a> <a href='#SkPath_RawIter'>RawIter</a> 1733 1734<a name='SkPath_getVerbs'></a> 1735 1736--- 1737 1738<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1739int <a href='#SkPath_getVerbs'>getVerbs</a>(uint8_t <a href='SkPath_Reference#Verb'>verbs</a>[], int max)const 1740</pre> 1741 1742Returns the number of <a href='#SkPath_getVerbs_verbs'>verbs</a> in the <a href='SkPath_Reference#Path'>path</a>. Up to <a href='#SkPath_getVerbs_max'>max</a> <a href='#SkPath_getVerbs_verbs'>verbs</a> are copied. The 1743<a href='#SkPath_getVerbs_verbs'>verbs</a> are copied as one byte per verb. 1744 1745### Parameters 1746 1747<table> <tr> <td><a name='SkPath_getVerbs_verbs'><code><strong>verbs</strong></code></a></td> 1748 <td>storage for <a href='#SkPath_getVerbs_verbs'>verbs</a>, may be nullptr</td> 1749 </tr> 1750 <tr> <td><a name='SkPath_getVerbs_max'><code><strong>max</strong></code></a></td> 1751 <td>maximum number to copy into <a href='#SkPath_getVerbs_verbs'>verbs</a></td> 1752 </tr> 1753</table> 1754 1755### Return Value 1756 1757the actual number of <a href='#SkPath_getVerbs_verbs'>verbs</a> in the <a href='SkPath_Reference#Path'>path</a> 1758 1759### Example 1760 1761<div><fiddle-embed name="2ec66880966a6133ddd9331ce7323438"> 1762 1763#### Example Output 1764 1765~~~~ 1766no verbs verb count: 3 1767zero max verb count: 3 1768too small verb count: 3 move line 1769just right verb count: 3 move line line 1770~~~~ 1771 1772</fiddle-embed></div> 1773 1774### See Also 1775 1776<a href='#SkPath_countVerbs'>countVerbs</a> <a href='#SkPath_getPoints'>getPoints</a> <a href='#SkPath_Iter'>Iter</a> <a href='#SkPath_RawIter'>RawIter</a> 1777 1778<a name='SkPath_swap'></a> 1779 1780--- 1781 1782<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1783void <a href='#SkPath_swap'>swap</a>(<a href='SkPath_Reference#SkPath'>SkPath</a>& other) 1784</pre> 1785 1786Exchanges the <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, <a href='SkPath_Reference#Conic_Weight'>weights</a>, and <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a> with <a href='#SkPath_swap_other'>other</a>. 1787Cached state is also exchanged. <a href='#SkPath_swap'>swap()</a> internally exchanges pointers, so 1788it is lightweight and does not allocate memory. 1789 1790<a href='#SkPath_swap'>swap()</a> usage has largely been replaced by <a href='#SkPath_copy_operator'>operator=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>). 1791<a href='SkPath_Reference#SkPath'>SkPath</a> do not copy their content on assignment until they are written to, 1792making assignment as efficient as <a href='#SkPath_swap'>swap()</a>. 1793 1794### Parameters 1795 1796<table> <tr> <td><a name='SkPath_swap_other'><code><strong>other</strong></code></a></td> 1797 <td><a href='SkPath_Reference#SkPath'>SkPath</a> exchanged by value</td> 1798 </tr> 1799</table> 1800 1801### Example 1802 1803<div><fiddle-embed name="4c5ebee2b5039e5faefa07ae63a15467"> 1804 1805#### Example Output 1806 1807~~~~ 1808path1 bounds = 0, 0, 0, 0 1809path2 bounds = 10, 20, 30, 40 1810~~~~ 1811 1812</fiddle-embed></div> 1813 1814### See Also 1815 1816<a href='#SkPath_copy_operator'>operator=</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>) 1817 1818<a name='SkPath_getBounds'></a> 1819 1820--- 1821 1822<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1823const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPath_getBounds'>getBounds</a>()const 1824</pre> 1825 1826Returns minimum and maximum axes values of <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array. 1827Returns (0, 0, 0, 0) if <a href='SkPath_Reference#SkPath'>SkPath</a> contains no <a href='SkPoint_Reference#Point'>points</a>. Returned bounds width and height may 1828be larger or smaller than area affected when <a href='SkPath_Reference#SkPath'>SkPath</a> is drawn. 1829 1830<a href='SkRect_Reference#SkRect'>SkRect</a> returned includes all <a href='SkPoint_Reference#SkPoint'>SkPoint</a> added to <a href='SkPath_Reference#SkPath'>SkPath</a>, including <a href='SkPoint_Reference#SkPoint'>SkPoint</a> associated with 1831<a href='#SkPath_kMove_Verb'>kMove_Verb</a> that define empty <a href='SkPath_Overview#Contour'>contours</a>. 1832 1833### Return Value 1834 1835bounds of all <a href='SkPoint_Reference#SkPoint'>SkPoint</a> in <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array 1836 1837### Example 1838 1839<div><fiddle-embed name="45c0fc3acb74fab99d544b80eadd10ad"><div>Bounds of upright <a href='undocumented#Circle'>Circle</a> can be predicted from center and radius. 1840Bounds of rotated <a href='undocumented#Circle'>Circle</a> includes control <a href='SkPoint_Reference#Point'>Points</a> outside of filled area. 1841</div> 1842 1843#### Example Output 1844 1845~~~~ 1846empty bounds = 0, 0, 0, 0 1847circle bounds = 25, 20, 75, 70 1848rotated circle bounds = 14.6447, 9.64466, 85.3553, 80.3553 1849~~~~ 1850 1851</fiddle-embed></div> 1852 1853### See Also 1854 1855<a href='#SkPath_computeTightBounds'>computeTightBounds</a> <a href='#SkPath_updateBoundsCache'>updateBoundsCache</a> 1856 1857<a name='Utility'></a> 1858 1859<a name='SkPath_updateBoundsCache'></a> 1860 1861--- 1862 1863<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1864void <a href='#SkPath_updateBoundsCache'>updateBoundsCache</a>()const 1865</pre> 1866 1867Updates internal bounds so that subsequent calls to <a href='#SkPath_getBounds'>getBounds</a>() are instantaneous. 1868Unaltered copies of <a href='SkPath_Reference#SkPath'>SkPath</a> may also access cached bounds through <a href='#SkPath_getBounds'>getBounds</a>(). 1869 1870For now, identical to calling <a href='#SkPath_getBounds'>getBounds</a>() and ignoring the returned value. 1871 1872Call to prepare <a href='SkPath_Reference#SkPath'>SkPath</a> subsequently drawn from multiple threads, 1873to avoid a race condition where each draw separately computes the bounds. 1874 1875### Example 1876 1877<div><fiddle-embed name="bb761cd858e6d0ca05627262cd22ff5e"> 1878 1879#### Example Output 1880 1881~~~~ 1882#Volatile 1883uncached avg: 0.18048 ms 1884cached avg: 0.182784 ms 1885~~~~ 1886 1887</fiddle-embed></div> 1888 1889### See Also 1890 1891<a href='#SkPath_getBounds'>getBounds</a> 1892 1893<a name='SkPath_computeTightBounds'></a> 1894 1895--- 1896 1897<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1898<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPath_computeTightBounds'>computeTightBounds</a>()const 1899</pre> 1900 1901Returns minimum and maximum axes values of the <a href='undocumented#Line'>lines</a> and <a href='undocumented#Curve'>curves</a> in <a href='SkPath_Reference#SkPath'>SkPath</a>. 1902Returns (0, 0, 0, 0) if <a href='SkPath_Reference#SkPath'>SkPath</a> contains no <a href='SkPoint_Reference#Point'>points</a>. 1903Returned bounds width and height may be larger or smaller than area affected 1904when <a href='SkPath_Reference#SkPath'>SkPath</a> is drawn. 1905 1906Includes <a href='SkPoint_Reference#SkPoint'>SkPoint</a> associated with <a href='#SkPath_kMove_Verb'>kMove_Verb</a> that define empty 1907<a href='SkPath_Overview#Contour'>contours</a>. 1908 1909Behaves identically to <a href='#SkPath_getBounds'>getBounds</a>() when <a href='SkPath_Reference#SkPath'>SkPath</a> contains 1910only <a href='undocumented#Line'>lines</a>. If <a href='SkPath_Reference#SkPath'>SkPath</a> contains <a href='undocumented#Curve'>curves</a>, computed bounds includes 1911the maximum extent of the <a href='SkPath_Reference#Quad'>quad</a>, <a href='SkPath_Reference#Conic'>conic</a>, or <a href='SkPath_Reference#Cubic'>cubic</a>; is slower than <a href='#SkPath_getBounds'>getBounds</a>(); 1912and unlike <a href='#SkPath_getBounds'>getBounds</a>(), does not cache the result. 1913 1914### Return Value 1915 1916tight bounds of <a href='undocumented#Curve'>curves</a> in <a href='SkPath_Reference#SkPath'>SkPath</a> 1917 1918### Example 1919 1920<div><fiddle-embed name="9a39c56e95b19a657133b7ad1fe0cf03"> 1921 1922#### Example Output 1923 1924~~~~ 1925empty bounds = 0, 0, 0, 0 1926circle bounds = 25, 20, 75, 70 1927rotated circle bounds = 25, 20, 75, 70 1928~~~~ 1929 1930</fiddle-embed></div> 1931 1932### See Also 1933 1934<a href='#SkPath_getBounds'>getBounds</a> 1935 1936<a name='SkPath_conservativelyContainsRect'></a> 1937 1938--- 1939 1940<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1941bool <a href='#SkPath_conservativelyContainsRect'>conservativelyContainsRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>)const 1942</pre> 1943 1944Returns true if <a href='#SkPath_conservativelyContainsRect_rect'>rect</a> is contained by <a href='SkPath_Reference#SkPath'>SkPath</a>. 1945May return false when <a href='#SkPath_conservativelyContainsRect_rect'>rect</a> is contained by <a href='SkPath_Reference#SkPath'>SkPath</a>. 1946 1947For now, only returns true if <a href='SkPath_Reference#SkPath'>SkPath</a> has one <a href='SkPath_Overview#Contour'>contour</a> and is convex. 1948<a href='#SkPath_conservativelyContainsRect_rect'>rect</a> may share <a href='SkPoint_Reference#Point'>points</a> and edges with <a href='SkPath_Reference#SkPath'>SkPath</a> and be contained. 1949Returns true if <a href='#SkPath_conservativelyContainsRect_rect'>rect</a> is empty, that is, it has zero width or height; and 1950the <a href='SkPoint_Reference#SkPoint'>SkPoint</a> or <a href='undocumented#Line'>line</a> described by <a href='#SkPath_conservativelyContainsRect_rect'>rect</a> is contained by <a href='SkPath_Reference#SkPath'>SkPath</a>. 1951 1952### Parameters 1953 1954<table> <tr> <td><a name='SkPath_conservativelyContainsRect_rect'><code><strong>rect</strong></code></a></td> 1955 <td><a href='SkRect_Reference#SkRect'>SkRect</a>, <a href='undocumented#Line'>line</a>, or <a href='SkPoint_Reference#SkPoint'>SkPoint</a> checked for containment</td> 1956 </tr> 1957</table> 1958 1959### Return Value 1960 1961true if <a href='#SkPath_conservativelyContainsRect_rect'>rect</a> is contained 1962 1963### Example 1964 1965<div><fiddle-embed name="41638d13e40fa449ece354dde5fb1941"><div><a href='SkRect_Reference#Rect'>Rect</a> is drawn in blue if it is contained by red <a href='SkPath_Reference#Path'>Path</a>. 1966</div></fiddle-embed></div> 1967 1968### See Also 1969 1970<a href='#SkPath_contains'>contains</a> <a href='undocumented#Op'>Op</a> <a href='SkRect_Reference#Rect'>Rect</a> <a href='#SkPath_Convexity'>Convexity</a> 1971 1972<a name='SkPath_incReserve'></a> 1973 1974--- 1975 1976<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 1977void <a href='#SkPath_incReserve'>incReserve</a>(int extraPtCount) 1978</pre> 1979 1980Grows <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='#Verb_Array'>verb array</a> and <a href='SkPath_Reference#Point_Array'>SkPoint array</a> to contain <a href='#SkPath_incReserve_extraPtCount'>extraPtCount</a> additional <a href='SkPoint_Reference#SkPoint'>SkPoint</a>. 1981May improve performance and use less memory by 1982reducing the number and <a href='undocumented#Size'>size</a> of allocations when creating <a href='SkPath_Reference#SkPath'>SkPath</a>. 1983 1984### Parameters 1985 1986<table> <tr> <td><a name='SkPath_incReserve_extraPtCount'><code><strong>extraPtCount</strong></code></a></td> 1987 <td>number of additional <a href='SkPoint_Reference#SkPoint'>SkPoint</a> to allocate</td> 1988 </tr> 1989</table> 1990 1991### Example 1992 1993<div><fiddle-embed name="f2260f2a170a54aef5bafe5b91c121b3"></fiddle-embed></div> 1994 1995### See Also 1996 1997<a href='#Path_Point_Array'>Point_Array</a> 1998 1999<a name='SkPath_shrinkToFit'></a> 2000 2001--- 2002 2003<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2004void <a href='#SkPath_shrinkToFit'>shrinkToFit</a>() 2005</pre> 2006 2007Shrinks <a href='SkPath_Reference#SkPath'>SkPath</a> verb array and <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array storage to discard unused capacity. 2008May reduce the heap overhead for <a href='SkPath_Reference#SkPath'>SkPath</a> known to be fully constructed. 2009 2010### See Also 2011 2012<a href='#SkPath_incReserve'>incReserve</a> 2013 2014<a name='Build'></a> 2015 2016<a name='SkPath_moveTo'></a> 2017 2018--- 2019 2020<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2021<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_moveTo'>moveTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y) 2022</pre> 2023 2024Adds beginning of <a href='SkPath_Overview#Contour'>contour</a> at <a href='SkPoint_Reference#SkPoint'>SkPoint</a> (<a href='#SkPath_moveTo_x'>x</a>, <a href='#SkPath_moveTo_y'>y</a>). 2025 2026### Parameters 2027 2028<table> <tr> <td><a name='SkPath_moveTo_x'><code><strong>x</strong></code></a></td> 2029 <td>x-axis value of <a href='SkPath_Overview#Contour'>contour</a> start</td> 2030 </tr> 2031 <tr> <td><a name='SkPath_moveTo_y'><code><strong>y</strong></code></a></td> 2032 <td>y-axis value of <a href='SkPath_Overview#Contour'>contour</a> start</td> 2033 </tr> 2034</table> 2035 2036### Return Value 2037 2038reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2039 2040### Example 2041 2042<div><fiddle-embed name="84101d341e934a535a41ad6cf42218ce"></fiddle-embed></div> 2043 2044### See Also 2045 2046<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_lineTo'>lineTo</a> <a href='#SkPath_rMoveTo'>rMoveTo</a> <a href='#SkPath_quadTo'>quadTo</a> <a href='#SkPath_conicTo'>conicTo</a> <a href='#SkPath_cubicTo'>cubicTo</a> <a href='#SkPath_close'>close()</a> 2047 2048<a name='SkPath_moveTo_2'></a> 2049 2050--- 2051 2052<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2053<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_moveTo'>moveTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p) 2054</pre> 2055 2056Adds beginning of <a href='SkPath_Overview#Contour'>contour</a> at <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_moveTo_2_p'>p</a>. 2057 2058### Parameters 2059 2060<table> <tr> <td><a name='SkPath_moveTo_2_p'><code><strong>p</strong></code></a></td> 2061 <td><a href='SkPath_Overview#Contour'>contour</a> start</td> 2062 </tr> 2063</table> 2064 2065### Return Value 2066 2067reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2068 2069### Example 2070 2071<div><fiddle-embed name="cb8d37990f6e7df3bcc85e7240c81274"></fiddle-embed></div> 2072 2073### See Also 2074 2075<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_lineTo'>lineTo</a> <a href='#SkPath_rMoveTo'>rMoveTo</a> <a href='#SkPath_quadTo'>quadTo</a> <a href='#SkPath_conicTo'>conicTo</a> <a href='#SkPath_cubicTo'>cubicTo</a> <a href='#SkPath_close'>close()</a> 2076 2077<a name='SkPath_rMoveTo'></a> 2078 2079--- 2080 2081<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2082<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rMoveTo'>rMoveTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy) 2083</pre> 2084 2085Adds beginning of <a href='SkPath_Overview#Contour'>contour</a> relative to <a href='#Last_Point'>last point</a>. 2086If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, starts <a href='SkPath_Overview#Contour'>contour</a> at (<a href='#SkPath_rMoveTo_dx'>dx</a>, <a href='#SkPath_rMoveTo_dy'>dy</a>). 2087Otherwise, start <a href='SkPath_Overview#Contour'>contour</a> at <a href='#Last_Point'>last point</a> offset by (<a href='#SkPath_rMoveTo_dx'>dx</a>, <a href='#SkPath_rMoveTo_dy'>dy</a>). 2088Function name stands for "relative move to". 2089 2090### Parameters 2091 2092<table> <tr> <td><a name='SkPath_rMoveTo_dx'><code><strong>dx</strong></code></a></td> 2093 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Overview#Contour'>contour</a> start on x-axis</td> 2094 </tr> 2095 <tr> <td><a name='SkPath_rMoveTo_dy'><code><strong>dy</strong></code></a></td> 2096 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Overview#Contour'>contour</a> start on y-axis</td> 2097 </tr> 2098</table> 2099 2100### Return Value 2101 2102reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2103 2104### Example 2105 2106<div><fiddle-embed name="63e32dec4b2d8440b427f368bf8313a4"></fiddle-embed></div> 2107 2108### See Also 2109 2110<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_lineTo'>lineTo</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_quadTo'>quadTo</a> <a href='#SkPath_conicTo'>conicTo</a> <a href='#SkPath_cubicTo'>cubicTo</a> <a href='#SkPath_close'>close()</a> 2111 2112<a name='SkPath_lineTo'></a> 2113 2114--- 2115 2116<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2117<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_lineTo'>lineTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y) 2118</pre> 2119 2120Adds <a href='undocumented#Line'>line</a> from <a href='#Last_Point'>last point</a> to (<a href='#SkPath_lineTo_x'>x</a>, <a href='#SkPath_lineTo_y'>y</a>). If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is 2121<a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) before adding <a href='undocumented#Line'>line</a>. 2122 2123<a href='#SkPath_lineTo'>lineTo</a>() appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed. 2124<a href='#SkPath_lineTo'>lineTo</a>() then appends <a href='#SkPath_kLine_Verb'>kLine_Verb</a> to <a href='#Verb_Array'>verb array</a> and (<a href='#SkPath_lineTo_x'>x</a>, <a href='#SkPath_lineTo_y'>y</a>) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2125 2126### Parameters 2127 2128<table> <tr> <td><a name='SkPath_lineTo_x'><code><strong>x</strong></code></a></td> 2129 <td>end of added <a href='undocumented#Line'>line</a> on x-axis</td> 2130 </tr> 2131 <tr> <td><a name='SkPath_lineTo_y'><code><strong>y</strong></code></a></td> 2132 <td>end of added <a href='undocumented#Line'>line</a> on y-axis</td> 2133 </tr> 2134</table> 2135 2136### Return Value 2137 2138reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2139 2140### Example 2141 2142<div><fiddle-embed name="e311cdd451edacec33b50cc22a4dd5dc"></fiddle-embed></div> 2143 2144### See Also 2145 2146<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_rLineTo'>rLineTo</a> <a href='#SkPath_addRect'>addRect</a> 2147 2148<a name='SkPath_lineTo_2'></a> 2149 2150--- 2151 2152<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2153<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_lineTo'>lineTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p) 2154</pre> 2155 2156Adds <a href='undocumented#Line'>line</a> from <a href='#Last_Point'>last point</a> to <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_lineTo_2_p'>p</a>. If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is 2157<a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) before adding <a href='undocumented#Line'>line</a>. 2158 2159<a href='#SkPath_lineTo'>lineTo</a>() first appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed. 2160<a href='#SkPath_lineTo'>lineTo</a>() then appends <a href='#SkPath_kLine_Verb'>kLine_Verb</a> to <a href='#Verb_Array'>verb array</a> and <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_lineTo_2_p'>p</a> to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2161 2162### Parameters 2163 2164<table> <tr> <td><a name='SkPath_lineTo_2_p'><code><strong>p</strong></code></a></td> 2165 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of added <a href='undocumented#Line'>line</a></td> 2166 </tr> 2167</table> 2168 2169### Return Value 2170 2171reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2172 2173### Example 2174 2175<div><fiddle-embed name="41001546a7f7927d08e5a818bcc304f5"></fiddle-embed></div> 2176 2177### See Also 2178 2179<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_rLineTo'>rLineTo</a> <a href='#SkPath_addRect'>addRect</a> 2180 2181<a name='SkPath_rLineTo'></a> 2182 2183--- 2184 2185<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2186<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rLineTo'>rLineTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy) 2187</pre> 2188 2189Adds <a href='undocumented#Line'>line</a> from <a href='#Last_Point'>last point</a> to <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rLineTo_dx'>dx</a>, <a href='#SkPath_rLineTo_dy'>dy</a>). If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is 2190<a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) before adding <a href='undocumented#Line'>line</a>. 2191 2192Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed; 2193then appends <a href='#SkPath_kLine_Verb'>kLine_Verb</a> to <a href='#Verb_Array'>verb array</a> and <a href='undocumented#Line'>line</a> end to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2194<a href='undocumented#Line'>Line</a> end is <a href='#Last_Point'>last point</a> plus <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rLineTo_dx'>dx</a>, <a href='#SkPath_rLineTo_dy'>dy</a>). 2195Function name stands for "relative <a href='undocumented#Line'>line</a> to". 2196 2197### Parameters 2198 2199<table> <tr> <td><a name='SkPath_rLineTo_dx'><code><strong>dx</strong></code></a></td> 2200 <td>offset from <a href='#Last_Point'>last point</a> to <a href='undocumented#Line'>line</a> end on x-axis</td> 2201 </tr> 2202 <tr> <td><a name='SkPath_rLineTo_dy'><code><strong>dy</strong></code></a></td> 2203 <td>offset from <a href='#Last_Point'>last point</a> to <a href='undocumented#Line'>line</a> end on y-axis</td> 2204 </tr> 2205</table> 2206 2207### Return Value 2208 2209reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2210 2211### Example 2212 2213<div><fiddle-embed name="6e0be0766b8ca320da51640326e608b3"></fiddle-embed></div> 2214 2215### See Also 2216 2217<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_lineTo'>lineTo</a> <a href='#SkPath_addRect'>addRect</a> 2218 2219<a name='Quad'></a> 2220 2221--- 2222 2223<a href='SkPath_Reference#Quad'>Quad</a> describes a <a href='#Path_Quad'>Quadratic_Bezier</a>, a second-order <a href='undocumented#Curve'>curve</a> identical to a section 2224of a parabola. <a href='SkPath_Reference#Quad'>Quad</a> begins at a start <a href='SkPoint_Reference#Point'>Point</a>, <a href='undocumented#Curve'>curves</a> towards a control <a href='SkPoint_Reference#Point'>Point</a>, 2225and then <a href='undocumented#Curve'>curves</a> to an end <a href='SkPoint_Reference#Point'>Point</a>. 2226 2227### Example 2228 2229<div><fiddle-embed name="78ad51fa1cd33eb84a6f99061e56e067"></fiddle-embed></div> 2230 2231<a href='SkPath_Reference#Quad'>Quad</a> is a special case of <a href='SkPath_Reference#Conic'>Conic</a> where <a href='#Path_Conic_Weight'>Conic_Weight</a> is set to one. 2232 2233<a href='SkPath_Reference#Quad'>Quad</a> is always contained by the triangle connecting its three <a href='SkPoint_Reference#Point'>Points</a>. <a href='SkPath_Reference#Quad'>Quad</a> 2234begins tangent to the <a href='undocumented#Line'>line</a> between start <a href='SkPoint_Reference#Point'>Point</a> and control <a href='SkPoint_Reference#Point'>Point</a>, and ends 2235tangent to the <a href='undocumented#Line'>line</a> between control <a href='SkPoint_Reference#Point'>Point</a> and end <a href='SkPoint_Reference#Point'>Point</a>. 2236 2237### Example 2238 2239<div><fiddle-embed name="4082f66a42df11bb20462b232b156bb6"></fiddle-embed></div> 2240 2241<a name='SkPath_quadTo'></a> 2242 2243--- 2244 2245<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2246<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_quadTo'>quadTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x1, <a href='undocumented#SkScalar'>SkScalar</a> y1, <a href='undocumented#SkScalar'>SkScalar</a> x2, <a href='undocumented#SkScalar'>SkScalar</a> y2) 2247</pre> 2248 2249Adds <a href='SkPath_Reference#Quad'>quad</a> from <a href='#Last_Point'>last point</a> towards (<a href='#SkPath_quadTo_x1'>x1</a>, <a href='#SkPath_quadTo_y1'>y1</a>), to (<a href='#SkPath_quadTo_x2'>x2</a>, <a href='#SkPath_quadTo_y2'>y2</a>). 2250If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) 2251before adding <a href='SkPath_Reference#Quad'>quad</a>. 2252 2253Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed; 2254then appends <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <a href='#Verb_Array'>verb array</a>; and (<a href='#SkPath_quadTo_x1'>x1</a>, <a href='#SkPath_quadTo_y1'>y1</a>), (<a href='#SkPath_quadTo_x2'>x2</a>, <a href='#SkPath_quadTo_y2'>y2</a>) 2255to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2256 2257### Parameters 2258 2259<table> <tr> <td><a name='SkPath_quadTo_x1'><code><strong>x1</strong></code></a></td> 2260 <td>control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Quad'>quad</a> on x-axis</td> 2261 </tr> 2262 <tr> <td><a name='SkPath_quadTo_y1'><code><strong>y1</strong></code></a></td> 2263 <td>control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Quad'>quad</a> on y-axis</td> 2264 </tr> 2265 <tr> <td><a name='SkPath_quadTo_x2'><code><strong>x2</strong></code></a></td> 2266 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Quad'>quad</a> on x-axis</td> 2267 </tr> 2268 <tr> <td><a name='SkPath_quadTo_y2'><code><strong>y2</strong></code></a></td> 2269 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Quad'>quad</a> on y-axis</td> 2270 </tr> 2271</table> 2272 2273### Return Value 2274 2275reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2276 2277### Example 2278 2279<div><fiddle-embed name="60ee3eb747474f5781b0f0dd3a17a866"></fiddle-embed></div> 2280 2281### See Also 2282 2283<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_conicTo'>conicTo</a> <a href='#SkPath_rQuadTo'>rQuadTo</a> 2284 2285<a name='SkPath_quadTo_2'></a> 2286 2287--- 2288 2289<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2290<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_quadTo'>quadTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2) 2291</pre> 2292 2293Adds <a href='SkPath_Reference#Quad'>quad</a> from <a href='#Last_Point'>last point</a> towards <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_quadTo_2_p1'>p1</a>, to <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_quadTo_2_p2'>p2</a>. 2294If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) 2295before adding <a href='SkPath_Reference#Quad'>quad</a>. 2296 2297Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed; 2298then appends <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <a href='#Verb_Array'>verb array</a>; and <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_quadTo_2_p1'>p1</a>, <a href='#SkPath_quadTo_2_p2'>p2</a> 2299to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2300 2301### Parameters 2302 2303<table> <tr> <td><a name='SkPath_quadTo_2_p1'><code><strong>p1</strong></code></a></td> 2304 <td>control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of added <a href='SkPath_Reference#Quad'>quad</a></td> 2305 </tr> 2306 <tr> <td><a name='SkPath_quadTo_2_p2'><code><strong>p2</strong></code></a></td> 2307 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of added <a href='SkPath_Reference#Quad'>quad</a></td> 2308 </tr> 2309</table> 2310 2311### Return Value 2312 2313reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2314 2315### Example 2316 2317<div><fiddle-embed name="82621c4df8da1e589d9e627494067826"></fiddle-embed></div> 2318 2319### See Also 2320 2321<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_conicTo'>conicTo</a> <a href='#SkPath_rQuadTo'>rQuadTo</a> 2322 2323<a name='SkPath_rQuadTo'></a> 2324 2325--- 2326 2327<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2328<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rQuadTo'>rQuadTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx1, <a href='undocumented#SkScalar'>SkScalar</a> dy1, <a href='undocumented#SkScalar'>SkScalar</a> dx2, <a href='undocumented#SkScalar'>SkScalar</a> dy2) 2329</pre> 2330 2331Adds <a href='SkPath_Reference#Quad'>quad</a> from <a href='#Last_Point'>last point</a> towards <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rQuadTo_dx1'>dx1</a>, <a href='#SkPath_rQuadTo_dy1'>dy1</a>), to <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rQuadTo_dx2'>dx2</a>, <a href='#SkPath_rQuadTo_dy2'>dy2</a>). 2332If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> 2333is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) before adding <a href='SkPath_Reference#Quad'>quad</a>. 2334 2335Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, 2336if needed; then appends <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <a href='#Verb_Array'>verb array</a>; and appends <a href='SkPath_Reference#Quad'>quad</a> 2337control and <a href='SkPath_Reference#Quad'>quad</a> end to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2338<a href='SkPath_Reference#Quad'>Quad</a> control is <a href='#Last_Point'>last point</a> plus <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rQuadTo_dx1'>dx1</a>, <a href='#SkPath_rQuadTo_dy1'>dy1</a>). 2339<a href='SkPath_Reference#Quad'>Quad</a> end is <a href='#Last_Point'>last point</a> plus <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rQuadTo_dx2'>dx2</a>, <a href='#SkPath_rQuadTo_dy2'>dy2</a>). 2340Function name stands for "relative <a href='SkPath_Reference#Quad'>quad</a> to". 2341 2342### Parameters 2343 2344<table> <tr> <td><a name='SkPath_rQuadTo_dx1'><code><strong>dx1</strong></code></a></td> 2345 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Quad'>quad</a> control on x-axis</td> 2346 </tr> 2347 <tr> <td><a name='SkPath_rQuadTo_dy1'><code><strong>dy1</strong></code></a></td> 2348 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Quad'>quad</a> control on y-axis</td> 2349 </tr> 2350 <tr> <td><a name='SkPath_rQuadTo_dx2'><code><strong>dx2</strong></code></a></td> 2351 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Quad'>quad</a> end on x-axis</td> 2352 </tr> 2353 <tr> <td><a name='SkPath_rQuadTo_dy2'><code><strong>dy2</strong></code></a></td> 2354 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Quad'>quad</a> end on y-axis</td> 2355 </tr> 2356</table> 2357 2358### Return Value 2359 2360reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2361 2362### Example 2363 2364<div><fiddle-embed name="1c1f4cdef1c572c9aa8fdf3e461191d0"></fiddle-embed></div> 2365 2366### See Also 2367 2368<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_conicTo'>conicTo</a> <a href='#SkPath_quadTo'>quadTo</a> 2369 2370<a name='Conic'></a> 2371 2372<a href='SkPath_Reference#Conic'>Conic</a> describes a conical section: a piece of an ellipse, or a piece of a 2373parabola, or a piece of a hyperbola. <a href='SkPath_Reference#Conic'>Conic</a> begins at a start <a href='SkPoint_Reference#Point'>Point</a>, 2374<a href='undocumented#Curve'>curves</a> towards a control <a href='SkPoint_Reference#Point'>Point</a>, and then <a href='undocumented#Curve'>curves</a> to an end <a href='SkPoint_Reference#Point'>Point</a>. The influence 2375of the control <a href='SkPoint_Reference#Point'>Point</a> is determined by <a href='#Path_Conic_Weight'>Conic_Weight</a>. 2376 2377Each <a href='SkPath_Reference#Conic'>Conic</a> in <a href='SkPath_Reference#Path'>Path</a> adds two <a href='SkPoint_Reference#Point'>Points</a> and one <a href='#Path_Conic_Weight'>Conic_Weight</a>. <a href='#Path_Conic_Weight'>Conic_Weights</a> in <a href='SkPath_Reference#Path'>Path</a> 2378may be inspected with <a href='#SkPath_Iter'>Iter</a>, or with <a href='#SkPath_RawIter'>RawIter</a>. 2379 2380<a name='Conic_Weight'></a> 2381 2382--- 2383 2384Weight determines both the strength of the control <a href='SkPoint_Reference#Point'>Point</a> and the type of <a href='SkPath_Reference#Conic'>Conic</a>. 2385Weight varies from zero to infinity. At zero, Weight causes the control <a href='SkPoint_Reference#Point'>Point</a> to 2386have no effect; <a href='SkPath_Reference#Conic'>Conic</a> is identical to a <a href='undocumented#Line'>line</a> segment from start <a href='SkPoint_Reference#Point'>Point</a> to end 2387<a href='SkPoint_Reference#Point'>point</a>. If Weight is less than one, <a href='SkPath_Reference#Conic'>Conic</a> follows an elliptical <a href='undocumented#Arc'>arc</a>. 2388If Weight is exactly one, then <a href='SkPath_Reference#Conic'>Conic</a> is identical to <a href='SkPath_Reference#Quad'>Quad</a>; <a href='SkPath_Reference#Conic'>Conic</a> follows a 2389parabolic <a href='undocumented#Arc'>arc</a>. If Weight is greater than one, <a href='SkPath_Reference#Conic'>Conic</a> follows a hyperbolic 2390<a href='undocumented#Arc'>arc</a>. If Weight is infinity, <a href='SkPath_Reference#Conic'>Conic</a> is identical to two <a href='undocumented#Line'>line</a> segments, connecting 2391start <a href='SkPoint_Reference#Point'>Point</a> to control <a href='SkPoint_Reference#Point'>Point</a>, and control <a href='SkPoint_Reference#Point'>Point</a> to end <a href='SkPoint_Reference#Point'>Point</a>. 2392 2393### Example 2394 2395<div><fiddle-embed name="2aadded3d20dfef34d1c8abe28c7bc8d"><div>When <a href='#Path_Conic_Weight'>Conic_Weight</a> is one, <a href='SkPath_Reference#Quad'>Quad</a> is added to <a href='SkPath_Reference#Path'>path</a>; the two are identical. 2396</div> 2397 2398#### Example Output 2399 2400~~~~ 2401move {0, 0}, 2402quad {0, 0}, {20, 30}, {50, 60}, 2403done 2404~~~~ 2405 2406</fiddle-embed></div> 2407 2408If weight is less than one, <a href='SkPath_Reference#Conic'>Conic</a> is an elliptical segment. 2409 2410### Example 2411 2412<div><fiddle-embed name="e88f554efacfa9f75f270fb1c0add5b4"><div>A 90 degree circular <a href='undocumented#Arc'>arc</a> has the weight <code>1 / <a href='undocumented#sqrt()'>sqrt</a>(2)</code>. 2413</div> 2414 2415#### Example Output 2416 2417~~~~ 2418move {0, 0}, 2419conic {0, 0}, {20, 0}, {20, 20}, weight = 0.707107 2420done 2421~~~~ 2422 2423</fiddle-embed></div> 2424 2425If weight is greater than one, <a href='SkPath_Reference#Conic'>Conic</a> is a hyperbolic segment. As weight gets large, 2426a hyperbolic segment can be approximated by straight <a href='undocumented#Line'>lines</a> connecting the 2427control <a href='SkPoint_Reference#Point'>Point</a> with the end <a href='SkPoint_Reference#Point'>Points</a>. 2428 2429### Example 2430 2431<div><fiddle-embed name="6fb11419e99297fe2fe666c296117fb9"> 2432 2433#### Example Output 2434 2435~~~~ 2436move {0, 0}, 2437line {0, 0}, {20, 0}, 2438line {20, 0}, {20, 20}, 2439done 2440~~~~ 2441 2442</fiddle-embed></div> 2443 2444<a name='SkPath_conicTo'></a> 2445 2446--- 2447 2448<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2449<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_conicTo'>conicTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x1, <a href='undocumented#SkScalar'>SkScalar</a> y1, <a href='undocumented#SkScalar'>SkScalar</a> x2, <a href='undocumented#SkScalar'>SkScalar</a> y2, <a href='undocumented#SkScalar'>SkScalar</a> w) 2450</pre> 2451 2452Adds <a href='SkPath_Reference#Conic'>conic</a> from <a href='#Last_Point'>last point</a> towards (<a href='#SkPath_conicTo_x1'>x1</a>, <a href='#SkPath_conicTo_y1'>y1</a>), to (<a href='#SkPath_conicTo_x2'>x2</a>, <a href='#SkPath_conicTo_y2'>y2</a>), weighted by <a href='#SkPath_conicTo_w'>w</a>. 2453If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) 2454before adding <a href='SkPath_Reference#Conic'>conic</a>. 2455 2456Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed. 2457 2458If <a href='#SkPath_conicTo_w'>w</a> is finite and not one, appends <a href='#SkPath_kConic_Verb'>kConic_Verb</a> to <a href='#Verb_Array'>verb array</a>; 2459and (<a href='#SkPath_conicTo_x1'>x1</a>, <a href='#SkPath_conicTo_y1'>y1</a>), (<a href='#SkPath_conicTo_x2'>x2</a>, <a href='#SkPath_conicTo_y2'>y2</a>) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>; and <a href='#SkPath_conicTo_w'>w</a> to <a href='SkPath_Reference#Conic_Weight'>conic weights</a>. 2460 2461If <a href='#SkPath_conicTo_w'>w</a> is one, appends <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <a href='#Verb_Array'>verb array</a>, and 2462(<a href='#SkPath_conicTo_x1'>x1</a>, <a href='#SkPath_conicTo_y1'>y1</a>), (<a href='#SkPath_conicTo_x2'>x2</a>, <a href='#SkPath_conicTo_y2'>y2</a>) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2463 2464If <a href='#SkPath_conicTo_w'>w</a> is not finite, appends <a href='#SkPath_kLine_Verb'>kLine_Verb</a> twice to <a href='#Verb_Array'>verb array</a>, and 2465(<a href='#SkPath_conicTo_x1'>x1</a>, <a href='#SkPath_conicTo_y1'>y1</a>), (<a href='#SkPath_conicTo_x2'>x2</a>, <a href='#SkPath_conicTo_y2'>y2</a>) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2466 2467### Parameters 2468 2469<table> <tr> <td><a name='SkPath_conicTo_x1'><code><strong>x1</strong></code></a></td> 2470 <td>control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Conic'>conic</a> on x-axis</td> 2471 </tr> 2472 <tr> <td><a name='SkPath_conicTo_y1'><code><strong>y1</strong></code></a></td> 2473 <td>control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Conic'>conic</a> on y-axis</td> 2474 </tr> 2475 <tr> <td><a name='SkPath_conicTo_x2'><code><strong>x2</strong></code></a></td> 2476 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Conic'>conic</a> on x-axis</td> 2477 </tr> 2478 <tr> <td><a name='SkPath_conicTo_y2'><code><strong>y2</strong></code></a></td> 2479 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Conic'>conic</a> on y-axis</td> 2480 </tr> 2481 <tr> <td><a name='SkPath_conicTo_w'><code><strong>w</strong></code></a></td> 2482 <td>weight of added <a href='SkPath_Reference#Conic'>conic</a></td> 2483 </tr> 2484</table> 2485 2486### Return Value 2487 2488reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2489 2490### Example 2491 2492<div><fiddle-embed name="358d9b6060b528b0923c007420f09c13"><div>As weight increases, <a href='undocumented#Curve'>curve</a> is pulled towards control <a href='SkPoint_Reference#Point'>point</a>. 2493The bottom two <a href='undocumented#Curve'>curves</a> are elliptical; the next is parabolic; the 2494top <a href='undocumented#Curve'>curve</a> is hyperbolic. 2495</div></fiddle-embed></div> 2496 2497### See Also 2498 2499<a href='#SkPath_rConicTo'>rConicTo</a> <a href='#SkPath_arcTo'>arcTo</a> <a href='#SkPath_addArc'>addArc</a> <a href='#SkPath_quadTo'>quadTo</a> 2500 2501<a name='SkPath_conicTo_2'></a> 2502 2503--- 2504 2505<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2506<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_conicTo'>conicTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, <a href='undocumented#SkScalar'>SkScalar</a> w) 2507</pre> 2508 2509Adds <a href='SkPath_Reference#Conic'>conic</a> from <a href='#Last_Point'>last point</a> towards <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_conicTo_2_p1'>p1</a>, to <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_conicTo_2_p2'>p2</a>, weighted by <a href='#SkPath_conicTo_2_w'>w</a>. 2510If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) 2511before adding <a href='SkPath_Reference#Conic'>conic</a>. 2512 2513Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed. 2514 2515If <a href='#SkPath_conicTo_2_w'>w</a> is finite and not one, appends <a href='#SkPath_kConic_Verb'>kConic_Verb</a> to <a href='#Verb_Array'>verb array</a>; 2516and <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_conicTo_2_p1'>p1</a>, <a href='#SkPath_conicTo_2_p2'>p2</a> to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>; and <a href='#SkPath_conicTo_2_w'>w</a> to <a href='SkPath_Reference#Conic_Weight'>conic weights</a>. 2517 2518If <a href='#SkPath_conicTo_2_w'>w</a> is one, appends <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <a href='#Verb_Array'>verb array</a>, and <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_conicTo_2_p1'>p1</a>, <a href='#SkPath_conicTo_2_p2'>p2</a> 2519to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2520 2521If <a href='#SkPath_conicTo_2_w'>w</a> is not finite, appends <a href='#SkPath_kLine_Verb'>kLine_Verb</a> twice to <a href='#Verb_Array'>verb array</a>, and 2522<a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_conicTo_2_p1'>p1</a>, <a href='#SkPath_conicTo_2_p2'>p2</a> to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2523 2524### Parameters 2525 2526<table> <tr> <td><a name='SkPath_conicTo_2_p1'><code><strong>p1</strong></code></a></td> 2527 <td>control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of added <a href='SkPath_Reference#Conic'>conic</a></td> 2528 </tr> 2529 <tr> <td><a name='SkPath_conicTo_2_p2'><code><strong>p2</strong></code></a></td> 2530 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of added <a href='SkPath_Reference#Conic'>conic</a></td> 2531 </tr> 2532 <tr> <td><a name='SkPath_conicTo_2_w'><code><strong>w</strong></code></a></td> 2533 <td>weight of added <a href='SkPath_Reference#Conic'>conic</a></td> 2534 </tr> 2535</table> 2536 2537### Return Value 2538 2539reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2540 2541### Example 2542 2543<div><fiddle-embed name="22d25e03b19d5bae92118877e462361b"><div><a href='SkPath_Reference#Conic'>Conics</a> and <a href='undocumented#Arc'>arcs</a> use identical representations. As the <a href='undocumented#Arc'>arc</a> sweep increases 2544the <a href='#Path_Conic_Weight'>Conic_Weight</a> also increases, but remains smaller than one. 2545</div></fiddle-embed></div> 2546 2547### See Also 2548 2549<a href='#SkPath_rConicTo'>rConicTo</a> <a href='#SkPath_arcTo'>arcTo</a> <a href='#SkPath_addArc'>addArc</a> <a href='#SkPath_quadTo'>quadTo</a> 2550 2551<a name='SkPath_rConicTo'></a> 2552 2553--- 2554 2555<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2556<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rConicTo'>rConicTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx1, <a href='undocumented#SkScalar'>SkScalar</a> dy1, <a href='undocumented#SkScalar'>SkScalar</a> dx2, <a href='undocumented#SkScalar'>SkScalar</a> dy2, <a href='undocumented#SkScalar'>SkScalar</a> w) 2557</pre> 2558 2559Adds <a href='SkPath_Reference#Conic'>conic</a> from <a href='#Last_Point'>last point</a> towards <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rConicTo_dx1'>dx1</a>, <a href='#SkPath_rConicTo_dy1'>dy1</a>), to <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rConicTo_dx2'>dx2</a>, <a href='#SkPath_rConicTo_dy2'>dy2</a>), 2560weighted by <a href='#SkPath_rConicTo_w'>w</a>. If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> 2561is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) before adding <a href='SkPath_Reference#Conic'>conic</a>. 2562 2563Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, 2564if needed. 2565 2566If <a href='#SkPath_rConicTo_w'>w</a> is finite and not one, next appends <a href='#SkPath_kConic_Verb'>kConic_Verb</a> to <a href='#Verb_Array'>verb array</a>, 2567and <a href='#SkPath_rConicTo_w'>w</a> is recorded as <a href='#Conic_Weight'>conic weight</a>; otherwise, if <a href='#SkPath_rConicTo_w'>w</a> is one, appends 2568<a href='#SkPath_kQuad_Verb'>kQuad_Verb</a> to <a href='#Verb_Array'>verb array</a>; or if <a href='#SkPath_rConicTo_w'>w</a> is not finite, appends <a href='#SkPath_kLine_Verb'>kLine_Verb</a> 2569twice to <a href='#Verb_Array'>verb array</a>. 2570 2571In all cases appends <a href='SkPoint_Reference#SkPoint'>SkPoint</a> control and end to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2572control is <a href='#Last_Point'>last point</a> plus <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rConicTo_dx1'>dx1</a>, <a href='#SkPath_rConicTo_dy1'>dy1</a>). 2573end is <a href='#Last_Point'>last point</a> plus <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rConicTo_dx2'>dx2</a>, <a href='#SkPath_rConicTo_dy2'>dy2</a>). 2574 2575Function name stands for "relative <a href='SkPath_Reference#Conic'>conic</a> to". 2576 2577### Parameters 2578 2579<table> <tr> <td><a name='SkPath_rConicTo_dx1'><code><strong>dx1</strong></code></a></td> 2580 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Conic'>conic</a> control on x-axis</td> 2581 </tr> 2582 <tr> <td><a name='SkPath_rConicTo_dy1'><code><strong>dy1</strong></code></a></td> 2583 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Conic'>conic</a> control on y-axis</td> 2584 </tr> 2585 <tr> <td><a name='SkPath_rConicTo_dx2'><code><strong>dx2</strong></code></a></td> 2586 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Conic'>conic</a> end on x-axis</td> 2587 </tr> 2588 <tr> <td><a name='SkPath_rConicTo_dy2'><code><strong>dy2</strong></code></a></td> 2589 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Conic'>conic</a> end on y-axis</td> 2590 </tr> 2591 <tr> <td><a name='SkPath_rConicTo_w'><code><strong>w</strong></code></a></td> 2592 <td>weight of added <a href='SkPath_Reference#Conic'>conic</a></td> 2593 </tr> 2594</table> 2595 2596### Return Value 2597 2598reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2599 2600### Example 2601 2602<div><fiddle-embed name="3d52763e7c0e20c0b1d484a0afa622d2"></fiddle-embed></div> 2603 2604### See Also 2605 2606<a href='#SkPath_conicTo'>conicTo</a> <a href='#SkPath_arcTo'>arcTo</a> <a href='#SkPath_addArc'>addArc</a> <a href='#SkPath_quadTo'>quadTo</a> 2607 2608<a name='Cubic'></a> 2609 2610--- 2611 2612<a href='SkPath_Reference#Cubic'>Cubic</a> describes a <a href='#Bezier_Curve'>Bezier_Curve</a> segment described by a third-order polynomial. 2613<a href='SkPath_Reference#Cubic'>Cubic</a> begins at a start <a href='SkPoint_Reference#Point'>Point</a>, curving towards the first control <a href='SkPoint_Reference#Point'>Point</a>; 2614and <a href='undocumented#Curve'>curves</a> from the end <a href='SkPoint_Reference#Point'>Point</a> towards the second control <a href='SkPoint_Reference#Point'>Point</a>. 2615 2616### Example 2617 2618<div><fiddle-embed name="466445ed991d86de08587066392d654a"></fiddle-embed></div> 2619 2620<a name='SkPath_cubicTo'></a> 2621 2622--- 2623 2624<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2625<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_cubicTo'>cubicTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x1, <a href='undocumented#SkScalar'>SkScalar</a> y1, <a href='undocumented#SkScalar'>SkScalar</a> x2, <a href='undocumented#SkScalar'>SkScalar</a> y2, <a href='undocumented#SkScalar'>SkScalar</a> x3, <a href='undocumented#SkScalar'>SkScalar</a> y3) 2626</pre> 2627 2628Adds <a href='SkPath_Reference#Cubic'>cubic</a> from <a href='#Last_Point'>last point</a> towards (<a href='#SkPath_cubicTo_x1'>x1</a>, <a href='#SkPath_cubicTo_y1'>y1</a>), then towards (<a href='#SkPath_cubicTo_x2'>x2</a>, <a href='#SkPath_cubicTo_y2'>y2</a>), ending at 2629(<a href='#SkPath_cubicTo_x3'>x3</a>, <a href='#SkPath_cubicTo_y3'>y3</a>). If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to 2630(0, 0) before adding <a href='SkPath_Reference#Cubic'>cubic</a>. 2631 2632Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed; 2633then appends <a href='#SkPath_kCubic_Verb'>kCubic_Verb</a> to <a href='#Verb_Array'>verb array</a>; and (<a href='#SkPath_cubicTo_x1'>x1</a>, <a href='#SkPath_cubicTo_y1'>y1</a>), (<a href='#SkPath_cubicTo_x2'>x2</a>, <a href='#SkPath_cubicTo_y2'>y2</a>), (<a href='#SkPath_cubicTo_x3'>x3</a>, <a href='#SkPath_cubicTo_y3'>y3</a>) 2634to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2635 2636### Parameters 2637 2638<table> <tr> <td><a name='SkPath_cubicTo_x1'><code><strong>x1</strong></code></a></td> 2639 <td>first control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a> on x-axis</td> 2640 </tr> 2641 <tr> <td><a name='SkPath_cubicTo_y1'><code><strong>y1</strong></code></a></td> 2642 <td>first control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a> on y-axis</td> 2643 </tr> 2644 <tr> <td><a name='SkPath_cubicTo_x2'><code><strong>x2</strong></code></a></td> 2645 <td>second control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a> on x-axis</td> 2646 </tr> 2647 <tr> <td><a name='SkPath_cubicTo_y2'><code><strong>y2</strong></code></a></td> 2648 <td>second control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a> on y-axis</td> 2649 </tr> 2650 <tr> <td><a name='SkPath_cubicTo_x3'><code><strong>x3</strong></code></a></td> 2651 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a> on x-axis</td> 2652 </tr> 2653 <tr> <td><a name='SkPath_cubicTo_y3'><code><strong>y3</strong></code></a></td> 2654 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a> on y-axis</td> 2655 </tr> 2656</table> 2657 2658### Return Value 2659 2660reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2661 2662### Example 2663 2664<div><fiddle-embed name="3e476378e3e0550ab134bbaf61112d98"></fiddle-embed></div> 2665 2666### See Also 2667 2668<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_rCubicTo'>rCubicTo</a> <a href='#SkPath_quadTo'>quadTo</a> 2669 2670<a name='SkPath_cubicTo_2'></a> 2671 2672--- 2673 2674<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2675<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_cubicTo'>cubicTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p3) 2676</pre> 2677 2678Adds <a href='SkPath_Reference#Cubic'>cubic</a> from <a href='#Last_Point'>last point</a> towards <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_cubicTo_2_p1'>p1</a>, then towards <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_cubicTo_2_p2'>p2</a>, ending at 2679<a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_cubicTo_2_p3'>p3</a>. If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to 2680(0, 0) before adding <a href='SkPath_Reference#Cubic'>cubic</a>. 2681 2682Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, if needed; 2683then appends <a href='#SkPath_kCubic_Verb'>kCubic_Verb</a> to <a href='#Verb_Array'>verb array</a>; and <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='#SkPath_cubicTo_2_p1'>p1</a>, <a href='#SkPath_cubicTo_2_p2'>p2</a>, <a href='#SkPath_cubicTo_2_p3'>p3</a> 2684to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2685 2686### Parameters 2687 2688<table> <tr> <td><a name='SkPath_cubicTo_2_p1'><code><strong>p1</strong></code></a></td> 2689 <td>first control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a></td> 2690 </tr> 2691 <tr> <td><a name='SkPath_cubicTo_2_p2'><code><strong>p2</strong></code></a></td> 2692 <td>second control <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a></td> 2693 </tr> 2694 <tr> <td><a name='SkPath_cubicTo_2_p3'><code><strong>p3</strong></code></a></td> 2695 <td>end <a href='SkPoint_Reference#SkPoint'>SkPoint</a> of <a href='SkPath_Reference#Cubic'>cubic</a></td> 2696 </tr> 2697</table> 2698 2699### Return Value 2700 2701reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2702 2703### Example 2704 2705<div><fiddle-embed name="d38aaf12c6ff5b8d901a2201bcee5476"></fiddle-embed></div> 2706 2707### See Also 2708 2709<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_rCubicTo'>rCubicTo</a> <a href='#SkPath_quadTo'>quadTo</a> 2710 2711<a name='SkPath_rCubicTo'></a> 2712 2713--- 2714 2715<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2716<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rCubicTo'>rCubicTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> dx1, <a href='undocumented#SkScalar'>SkScalar</a> dy1, <a href='undocumented#SkScalar'>SkScalar</a> dx2, <a href='undocumented#SkScalar'>SkScalar</a> dy2, <a href='undocumented#SkScalar'>SkScalar</a> dx3, <a href='undocumented#SkScalar'>SkScalar</a> dy3) 2717</pre> 2718 2719Adds <a href='SkPath_Reference#Cubic'>cubic</a> from <a href='#Last_Point'>last point</a> towards <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rCubicTo_dx1'>dx1</a>, <a href='#SkPath_rCubicTo_dy1'>dy1</a>), then towards 2720<a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rCubicTo_dx2'>dx2</a>, <a href='#SkPath_rCubicTo_dy2'>dy2</a>), to <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rCubicTo_dx3'>dx3</a>, <a href='#SkPath_rCubicTo_dy3'>dy3</a>). 2721If <a href='SkPath_Reference#SkPath'>SkPath</a> is empty, or last <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> 2722is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, <a href='#Last_Point'>last point</a> is set to (0, 0) before adding <a href='SkPath_Reference#Cubic'>cubic</a>. 2723 2724Appends <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='#Verb_Array'>verb array</a> and (0, 0) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, 2725if needed; then appends <a href='#SkPath_kCubic_Verb'>kCubic_Verb</a> to <a href='#Verb_Array'>verb array</a>; and appends <a href='SkPath_Reference#Cubic'>cubic</a> 2726control and <a href='SkPath_Reference#Cubic'>cubic</a> end to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 2727<a href='SkPath_Reference#Cubic'>Cubic</a> control is <a href='#Last_Point'>last point</a> plus <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rCubicTo_dx1'>dx1</a>, <a href='#SkPath_rCubicTo_dy1'>dy1</a>). 2728<a href='SkPath_Reference#Cubic'>Cubic</a> end is <a href='#Last_Point'>last point</a> plus <a href='SkPoint_Reference#Vector'>vector</a> (<a href='#SkPath_rCubicTo_dx2'>dx2</a>, <a href='#SkPath_rCubicTo_dy2'>dy2</a>). 2729Function name stands for "relative <a href='SkPath_Reference#Cubic'>cubic</a> to". 2730 2731### Parameters 2732 2733<table> <tr> <td><a name='SkPath_rCubicTo_dx1'><code><strong>dx1</strong></code></a></td> 2734 <td>offset from <a href='#Last_Point'>last point</a> to first <a href='SkPath_Reference#Cubic'>cubic</a> control on x-axis</td> 2735 </tr> 2736 <tr> <td><a name='SkPath_rCubicTo_dy1'><code><strong>dy1</strong></code></a></td> 2737 <td>offset from <a href='#Last_Point'>last point</a> to first <a href='SkPath_Reference#Cubic'>cubic</a> control on y-axis</td> 2738 </tr> 2739 <tr> <td><a name='SkPath_rCubicTo_dx2'><code><strong>dx2</strong></code></a></td> 2740 <td>offset from <a href='#Last_Point'>last point</a> to second <a href='SkPath_Reference#Cubic'>cubic</a> control on x-axis</td> 2741 </tr> 2742 <tr> <td><a name='SkPath_rCubicTo_dy2'><code><strong>dy2</strong></code></a></td> 2743 <td>offset from <a href='#Last_Point'>last point</a> to second <a href='SkPath_Reference#Cubic'>cubic</a> control on y-axis</td> 2744 </tr> 2745 <tr> <td><a name='SkPath_rCubicTo_dx3'><code><strong>dx3</strong></code></a></td> 2746 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Cubic'>cubic</a> end on x-axis</td> 2747 </tr> 2748 <tr> <td><a name='SkPath_rCubicTo_dy3'><code><strong>dy3</strong></code></a></td> 2749 <td>offset from <a href='#Last_Point'>last point</a> to <a href='SkPath_Reference#Cubic'>cubic</a> end on y-axis</td> 2750 </tr> 2751</table> 2752 2753### Return Value 2754 2755reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2756 2757### Example 2758 2759<div><fiddle-embed name="19f0cfc7eeba8937fe19446ec0b5f932"></fiddle-embed></div> 2760 2761### See Also 2762 2763<a href='SkPath_Overview#Contour'>Contour</a> <a href='#SkPath_moveTo'>moveTo</a> <a href='#SkPath_cubicTo'>cubicTo</a> <a href='#SkPath_quadTo'>quadTo</a> 2764 2765<a name='Arc'></a> 2766 2767--- 2768 2769<a href='undocumented#Arc'>Arc</a> can be constructed in a number of ways. <a href='undocumented#Arc'>Arc</a> may be described by part of <a href='undocumented#Oval'>Oval</a> and angles, 2770by start <a href='SkPoint_Reference#Point'>point</a> and end <a href='SkPoint_Reference#Point'>point</a>, and by radius and tangent <a href='undocumented#Line'>lines</a>. Each construction has advantages, 2771and some constructions correspond to <a href='undocumented#Arc'>Arc</a> drawing in graphics standards. 2772 2773All <a href='undocumented#Arc'>Arc</a> draws are implemented by one or more <a href='SkPath_Reference#Conic'>Conic</a> draws. When <a href='#Path_Conic_Weight'>Conic_Weight</a> is less than one, 2774<a href='SkPath_Reference#Conic'>Conic</a> describes an <a href='undocumented#Arc'>Arc</a> of some <a href='undocumented#Oval'>Oval</a> or <a href='undocumented#Circle'>Circle</a>. 2775 2776Circle<a href='#SkPath_arcTo'>arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool forceMoveTo)</a> 2777describes <a href='undocumented#Arc'>Arc</a> as a piece of <a href='undocumented#Oval'>Oval</a>, beginning at start angle, sweeping clockwise or counterclockwise, 2778which may continue <a href='SkPath_Overview#Contour'>Contour</a> or start a new one. This construction is similar to <a href='undocumented#PostScript'>PostScript</a> and 2779<a href='#HTML_Canvas'>HTML_Canvas</a> <a href='undocumented#Arc'>arcs</a>. Variation <a href='#SkPath_addArc'>addArc</a> always starts new <a href='SkPath_Overview#Contour'>Contour</a>. <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawArc'>drawArc</a> draws without 2780requiring <a href='SkPath_Reference#Path'>Path</a>. 2781 2782Path<a href='#SkPath_arcTo_2'>arcTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar radius)</a> 2783describes <a href='undocumented#Arc'>Arc</a> as tangent to the <a href='undocumented#Line'>line</a> segment from last <a href='SkPoint_Reference#Point'>Point</a> added to <a href='SkPath_Reference#Path'>Path</a> to (x1, y1); and tangent 2784to the <a href='undocumented#Line'>line</a> segment from (x1, y1) to (x2, y2). This construction is similar to <a href='undocumented#PostScript'>PostScript</a> and 2785<a href='#HTML_Canvas'>HTML_Canvas</a> <a href='undocumented#Arc'>arcs</a>. 2786 2787arcs<a href='#SkPath_arcTo_4'>arcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, SkScalar x, SkScalar y)</a> 2788describes <a href='undocumented#Arc'>Arc</a> as part of <a href='undocumented#Oval'>Oval</a> with radii (rx, ry), beginning at 2789last <a href='SkPoint_Reference#Point'>Point</a> added to <a href='SkPath_Reference#Path'>Path</a> and ending at (x, y). More than one <a href='undocumented#Arc'>Arc</a> satisfies this criteria, 2790so additional values choose a single solution. This construction is similar to <a href='undocumented#SVG'>SVG</a> <a href='undocumented#Arc'>arcs</a>. 2791 2792<a href='#SkPath_conicTo'>conicTo</a> describes <a href='undocumented#Arc'>Arc</a> of less than 180 degrees as a pair of tangent <a href='undocumented#Line'>lines</a> and <a href='#Path_Conic_Weight'>Conic_Weight</a>. 2793<a href='#SkPath_conicTo'>conicTo</a> can represent any <a href='undocumented#Arc'>Arc</a> with a sweep less than 180 degrees at any rotation. All <a href='#SkPath_arcTo'>arcTo</a> 2794constructions are converted to <a href='SkPath_Reference#Conic'>Conic</a> <a href='undocumented#Data'>data</a> when added to <a href='SkPath_Reference#Path'>Path</a>. 2795 2796![Arc](https://fiddle.skia.org/i/e17e48e9d2182e9afc0f5d26b72c60f0_raster.png "") 2797 2798<table> <tr> 2799 <td><sup>1</sup> sup<a href='#SkPath_arcTo'>arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, bool forceMoveTo)</a></td> 2800 </tr> <tr> 2801 <td><sup>2</sup> parameter adds move to first <a href='SkPoint_Reference#Point'>point</a></td> 2802 </tr> <tr> 2803 <td><sup>3</sup> start angle must be multiple of 90 degrees</td> 2804 </tr> <tr> 2805 <td><sup>4</sup> sup<a href='#SkPath_arcTo_2'>arcTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar radius)</a></td> 2806 </tr> <tr> 2807 <td><sup>5</sup> sup<a href='#SkPath_arcTo_4'>arcTo(SkScalar rx, SkScalar ry, SkScalar xAxisRotate, ArcSize largeArc, Direction sweep, SkScalar x, SkScalar y)</a></td> 2808 </tr> 2809</table> 2810 2811### Example 2812 2813<div><fiddle-embed name="5acc77eba0cb4d00bbf3a8f4db0c0aee"></fiddle-embed></div> 2814 2815In the example above: 2816 2817<table> <tr> 2818 <td>1 describes an <a href='undocumented#Arc'>arc</a> from an <a href='undocumented#Oval'>oval</a>, a starting angle, and a sweep angle.</td> 2819 </tr> <tr> 2820 <td>2 is similar to 1, but does not require building a <a href='SkPath_Reference#Path'>path</a> to draw.</td> 2821 </tr> <tr> 2822 <td>3 is similar to 1, but always begins new <a href='SkPath_Overview#Contour'>Contour</a>.</td> 2823 </tr> <tr> 2824 <td>4 describes an <a href='undocumented#Arc'>arc</a> from a pair of tangent <a href='undocumented#Line'>lines</a> and a radius.</td> 2825 </tr> <tr> 2826 <td>5 describes an <a href='undocumented#Arc'>arc</a> from <a href='undocumented#Oval'>Oval</a> center, <a href='undocumented#Arc'>arc</a> start <a href='SkPoint_Reference#Point'>Point</a> and <a href='undocumented#Arc'>arc</a> end <a href='SkPoint_Reference#Point'>Point</a>.</td> 2827 </tr> <tr> 2828 <td>6 describes an <a href='undocumented#Arc'>arc</a> from a pair of tangent <a href='undocumented#Line'>lines</a> and a <a href='#Path_Conic_Weight'>Conic_Weight</a>.</td> 2829 </tr> 2830</table> 2831 2832<a name='SkPath_arcTo'></a> 2833 2834--- 2835 2836<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2837<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='undocumented#Oval'>oval</a>, <a href='undocumented#SkScalar'>SkScalar</a> startAngle, <a href='undocumented#SkScalar'>SkScalar</a> sweepAngle, bool forceMoveTo) 2838</pre> 2839 2840Appends <a href='undocumented#Arc'>arc</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>. <a href='undocumented#Arc'>Arc</a> added is part of ellipse 2841bounded by <a href='#SkPath_arcTo_oval'>oval</a>, from <a href='#SkPath_arcTo_startAngle'>startAngle</a> through <a href='#SkPath_arcTo_sweepAngle'>sweepAngle</a>. Both <a href='#SkPath_arcTo_startAngle'>startAngle</a> and 2842<a href='#SkPath_arcTo_sweepAngle'>sweepAngle</a> are measured in degrees, where zero degrees is aligned with the 2843positive x-axis, and positive sweeps extends <a href='undocumented#Arc'>arc</a> clockwise. 2844 2845<a href='#SkPath_arcTo'>arcTo</a>() adds <a href='undocumented#Line'>line</a> connecting <a href='SkPath_Reference#SkPath'>SkPath</a> last <a href='SkPoint_Reference#SkPoint'>SkPoint</a> to initial <a href='undocumented#Arc'>arc</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> if <a href='#SkPath_arcTo_forceMoveTo'>forceMoveTo</a> 2846is false and <a href='SkPath_Reference#SkPath'>SkPath</a> is not empty. Otherwise, added <a href='SkPath_Overview#Contour'>contour</a> begins with first <a href='SkPoint_Reference#Point'>point</a> 2847of <a href='undocumented#Arc'>arc</a>. Angles greater than -360 and less than 360 are treated modulo 360. 2848 2849### Parameters 2850 2851<table> <tr> <td><a name='SkPath_arcTo_oval'><code><strong>oval</strong></code></a></td> 2852 <td>bounds of ellipse containing <a href='undocumented#Arc'>arc</a></td> 2853 </tr> 2854 <tr> <td><a name='SkPath_arcTo_startAngle'><code><strong>startAngle</strong></code></a></td> 2855 <td>starting angle of <a href='undocumented#Arc'>arc</a> in degrees</td> 2856 </tr> 2857 <tr> <td><a name='SkPath_arcTo_sweepAngle'><code><strong>sweepAngle</strong></code></a></td> 2858 <td>sweep, in degrees. Positive is clockwise; treated modulo 360</td> 2859 </tr> 2860 <tr> <td><a name='SkPath_arcTo_forceMoveTo'><code><strong>forceMoveTo</strong></code></a></td> 2861 <td>true to start a new <a href='SkPath_Overview#Contour'>contour</a> with <a href='undocumented#Arc'>arc</a></td> 2862 </tr> 2863</table> 2864 2865### Return Value 2866 2867reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2868 2869### Example 2870 2871<div><fiddle-embed name="5f02890edaa10cb5e1a4243a82b6a382"><div><a href='#SkPath_arcTo'>arcTo</a> continues a previous <a href='SkPath_Overview#Contour'>contour</a> when <a href='#SkPath_arcTo_forceMoveTo'>forceMoveTo</a> is false and when <a href='SkPath_Reference#Path'>Path</a> 2872is not empty. 2873</div></fiddle-embed></div> 2874 2875### See Also 2876 2877<a href='#SkPath_addArc'>addArc</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawArc'>drawArc</a> <a href='#SkPath_conicTo'>conicTo</a> 2878 2879<a name='SkPath_arcTo_2'></a> 2880 2881--- 2882 2883<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2884<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> x1, <a href='undocumented#SkScalar'>SkScalar</a> y1, <a href='undocumented#SkScalar'>SkScalar</a> x2, <a href='undocumented#SkScalar'>SkScalar</a> y2, <a href='undocumented#SkScalar'>SkScalar</a> radius) 2885</pre> 2886 2887Appends <a href='undocumented#Arc'>arc</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, after appending <a href='undocumented#Line'>line</a> if needed. <a href='undocumented#Arc'>Arc</a> is implemented by <a href='SkPath_Reference#Conic'>conic</a> 2888weighted to describe part of <a href='undocumented#Circle'>circle</a>. <a href='undocumented#Arc'>Arc</a> is contained by tangent from 2889last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#Point'>point</a> to (<a href='#SkPath_arcTo_2_x1'>x1</a>, <a href='#SkPath_arcTo_2_y1'>y1</a>), and tangent from (<a href='#SkPath_arcTo_2_x1'>x1</a>, <a href='#SkPath_arcTo_2_y1'>y1</a>) to (<a href='#SkPath_arcTo_2_x2'>x2</a>, <a href='#SkPath_arcTo_2_y2'>y2</a>). <a href='undocumented#Arc'>Arc</a> 2890is part of <a href='undocumented#Circle'>circle</a> sized to <a href='#SkPath_arcTo_2_radius'>radius</a>, positioned so it touches both tangent <a href='undocumented#Line'>lines</a>. 2891 2892If last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a> does not start <a href='undocumented#Arc'>Arc</a>, <a href='#SkPath_arcTo'>arcTo</a> appends connecting <a href='undocumented#Line'>Line</a> to <a href='SkPath_Reference#Path'>Path</a>. 2893The length of <a href='SkPoint_Reference#Vector'>Vector</a> from (<a href='#SkPath_arcTo_2_x1'>x1</a>, <a href='#SkPath_arcTo_2_y1'>y1</a>) to (<a href='#SkPath_arcTo_2_x2'>x2</a>, <a href='#SkPath_arcTo_2_y2'>y2</a>) does not affect <a href='undocumented#Arc'>Arc</a>. 2894 2895<a href='undocumented#Arc'>Arc</a> sweep is always less than 180 degrees. If <a href='#SkPath_arcTo_2_radius'>radius</a> is zero, or if 2896tangents are nearly parallel, <a href='#SkPath_arcTo'>arcTo</a> appends <a href='undocumented#Line'>Line</a> from last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a> to (<a href='#SkPath_arcTo_2_x1'>x1</a>, <a href='#SkPath_arcTo_2_y1'>y1</a>). 2897 2898<a href='#SkPath_arcTo'>arcTo</a> appends at most one <a href='undocumented#Line'>Line</a> and one <a href='SkPath_Reference#Conic'>conic</a>. 2899<a href='#SkPath_arcTo'>arcTo</a> implements the functionality of <a href='undocumented#Arct'>PostScript arct</a> and <a href='undocumented#ArcTo'>HTML Canvas arcTo</a>. 2900 2901### Parameters 2902 2903<table> <tr> <td><a name='SkPath_arcTo_2_x1'><code><strong>x1</strong></code></a></td> 2904 <td>x-axis value common to pair of tangents</td> 2905 </tr> 2906 <tr> <td><a name='SkPath_arcTo_2_y1'><code><strong>y1</strong></code></a></td> 2907 <td>y-axis value common to pair of tangents</td> 2908 </tr> 2909 <tr> <td><a name='SkPath_arcTo_2_x2'><code><strong>x2</strong></code></a></td> 2910 <td>x-axis value end of second tangent</td> 2911 </tr> 2912 <tr> <td><a name='SkPath_arcTo_2_y2'><code><strong>y2</strong></code></a></td> 2913 <td>y-axis value end of second tangent</td> 2914 </tr> 2915 <tr> <td><a name='SkPath_arcTo_2_radius'><code><strong>radius</strong></code></a></td> 2916 <td>distance from <a href='undocumented#Arc'>arc</a> to <a href='undocumented#Circle'>circle</a> center</td> 2917 </tr> 2918</table> 2919 2920### Return Value 2921 2922reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2923 2924### Example 2925 2926<div><fiddle-embed name="386000684073fccabc224d7d6dc81cd9"></fiddle-embed></div> 2927 2928### Example 2929 2930<div><fiddle-embed name="78f3c65fa900610bb52518989b547095"></fiddle-embed></div> 2931 2932### Example 2933 2934<div><fiddle-embed name="498360fa0a201cc5db04b1c27256358f"><div><a href='#SkPath_arcTo'>arcTo</a> is represented by <a href='undocumented#Line'>Line</a> and circular <a href='SkPath_Reference#Conic'>Conic</a> in <a href='SkPath_Reference#Path'>Path</a>. 2935</div> 2936 2937#### Example Output 2938 2939~~~~ 2940move to (156,20) 2941line (156,20),(79.2893,20) 2942conic (79.2893,20),(200,20),(114.645,105.355) weight 0.382683 2943~~~~ 2944 2945</fiddle-embed></div> 2946 2947### See Also 2948 2949<a href='#SkPath_conicTo'>conicTo</a> 2950 2951<a name='SkPath_arcTo_3'></a> 2952 2953--- 2954 2955<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 2956<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> p2, <a href='undocumented#SkScalar'>SkScalar</a> radius) 2957</pre> 2958 2959Appends <a href='undocumented#Arc'>arc</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, after appending <a href='undocumented#Line'>line</a> if needed. <a href='undocumented#Arc'>Arc</a> is implemented by <a href='SkPath_Reference#Conic'>conic</a> 2960weighted to describe part of <a href='undocumented#Circle'>circle</a>. <a href='undocumented#Arc'>Arc</a> is contained by tangent from 2961last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#Point'>point</a> to <a href='#SkPath_arcTo_3_p1'>p1</a>, and tangent from <a href='#SkPath_arcTo_3_p1'>p1</a> to <a href='#SkPath_arcTo_3_p2'>p2</a>. <a href='undocumented#Arc'>Arc</a> 2962is part of <a href='undocumented#Circle'>circle</a> sized to <a href='#SkPath_arcTo_3_radius'>radius</a>, positioned so it touches both tangent <a href='undocumented#Line'>lines</a>. 2963 2964If last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> does not start <a href='undocumented#Arc'>arc</a>, <a href='#SkPath_arcTo'>arcTo</a>() appends connecting <a href='undocumented#Line'>line</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>. 2965The length of <a href='SkPoint_Reference#Vector'>vector</a> from <a href='#SkPath_arcTo_3_p1'>p1</a> to <a href='#SkPath_arcTo_3_p2'>p2</a> does not affect <a href='undocumented#Arc'>arc</a>. 2966 2967<a href='undocumented#Arc'>Arc</a> sweep is always less than 180 degrees. If <a href='#SkPath_arcTo_3_radius'>radius</a> is zero, or if 2968tangents are nearly parallel, <a href='#SkPath_arcTo'>arcTo</a>() appends <a href='undocumented#Line'>line</a> from last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> to <a href='#SkPath_arcTo_3_p1'>p1</a>. 2969 2970<a href='#SkPath_arcTo'>arcTo</a>() appends at most one <a href='undocumented#Line'>line</a> and one <a href='SkPath_Reference#Conic'>conic</a>. 2971<a href='#SkPath_arcTo'>arcTo</a>() implements the functionality of <a href='undocumented#Arct'>PostScript arct</a> and <a href='undocumented#ArcTo'>HTML Canvas arcTo</a>. 2972 2973### Parameters 2974 2975<table> <tr> <td><a name='SkPath_arcTo_3_p1'><code><strong>p1</strong></code></a></td> 2976 <td><a href='SkPoint_Reference#SkPoint'>SkPoint</a> common to pair of tangents</td> 2977 </tr> 2978 <tr> <td><a name='SkPath_arcTo_3_p2'><code><strong>p2</strong></code></a></td> 2979 <td>end of second tangent</td> 2980 </tr> 2981 <tr> <td><a name='SkPath_arcTo_3_radius'><code><strong>radius</strong></code></a></td> 2982 <td>distance from <a href='undocumented#Arc'>arc</a> to <a href='undocumented#Circle'>circle</a> center</td> 2983 </tr> 2984</table> 2985 2986### Return Value 2987 2988reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 2989 2990### Example 2991 2992<div><fiddle-embed name="0c056264a361579c18e5d02d3172d4d4"><div>Because tangent <a href='undocumented#Line'>lines</a> are parallel, <a href='#SkPath_arcTo'>arcTo</a> appends <a href='undocumented#Line'>line</a> from last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a> to 2993<a href='#SkPath_arcTo_3_p1'>p1</a>, but does not append a circular <a href='SkPath_Reference#Conic'>Conic</a>. 2994</div> 2995 2996#### Example Output 2997 2998~~~~ 2999move to (156,20) 3000line (156,20),(200,20) 3001~~~~ 3002 3003</fiddle-embed></div> 3004 3005### See Also 3006 3007<a href='#SkPath_conicTo'>conicTo</a> 3008 3009<a name='SkPath_ArcSize'></a> 3010 3011--- 3012 3013<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 3014 enum <a href='#SkPath_ArcSize'>ArcSize</a> { 3015 <a href='#SkPath_kSmall_ArcSize'>kSmall_ArcSize</a>, 3016 <a href='#SkPath_kLarge_ArcSize'>kLarge_ArcSize</a>, 3017 }; 3018</pre> 3019 3020Four axis-aligned <a href='undocumented#Oval'>Ovals</a> with the same height and width intersect a pair of <a href='SkPoint_Reference#Point'>Points</a>. 3021<a href='#SkPath_ArcSize'>ArcSize</a> and <a href='#SkPath_Direction'>Direction</a> select one of the four <a href='undocumented#Oval'>Ovals</a>, by choosing the larger or smaller 3022<a href='undocumented#Arc'>arc</a> between the <a href='SkPoint_Reference#Point'>Points</a>; and by choosing the <a href='undocumented#Arc'>arc</a> <a href='#SkPath_Direction'>Direction</a>, clockwise 3023or counterclockwise. 3024 3025### Constants 3026 3027<table style='border-collapse: collapse; width: 62.5em'> 3028 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th> 3029<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th> 3030<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr> 3031 <tr style='background-color: #f0f0f0; '> 3032 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kSmall_ArcSize'><code>SkPath::kSmall_ArcSize</code></a></td> 3033 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td> 3034 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 3035smaller of Arc pair</td> 3036 </tr> 3037 <tr> 3038 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kLarge_ArcSize'><code>SkPath::kLarge_ArcSize</code></a></td> 3039 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td> 3040 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 3041larger of Arc pair</td> 3042 </tr> 3043</table> 3044 3045### Example 3046 3047<div><fiddle-embed name="8e40c546eecd9cc213200717240898ba"><div><a href='undocumented#Arc'>Arc</a> begins at top of <a href='undocumented#Oval'>Oval</a> pair and ends at bottom. <a href='undocumented#Arc'>Arc</a> can take four routes to get there. 3048Two routes are large, and two routes are counterclockwise. The one route both large 3049and counterclockwise is blue. 3050</div></fiddle-embed></div> 3051 3052### See Also 3053 3054<a href='#SkPath_arcTo'>arcTo</a> <a href='#SkPath_Direction'>Direction</a> 3055 3056<a name='SkPath_arcTo_4'></a> 3057 3058--- 3059 3060<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3061<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> rx, <a href='undocumented#SkScalar'>SkScalar</a> ry, <a href='undocumented#SkScalar'>SkScalar</a> xAxisRotate, <a href='#SkPath_ArcSize'>ArcSize</a> largeArc, <a href='#SkPath_Direction'>Direction</a> sweep, 3062 <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y) 3063</pre> 3064 3065Appends <a href='undocumented#Arc'>arc</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>. <a href='undocumented#Arc'>Arc</a> is implemented by one or more <a href='SkPath_Reference#Conic'>conics</a> weighted to 3066describe part of <a href='undocumented#Oval'>oval</a> with radii (<a href='#SkPath_arcTo_4_rx'>rx</a>, <a href='#SkPath_arcTo_4_ry'>ry</a>) rotated by <a href='#SkPath_arcTo_4_xAxisRotate'>xAxisRotate</a> degrees. <a href='undocumented#Arc'>Arc</a> 3067<a href='undocumented#Curve'>curves</a> from last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> to (<a href='#SkPath_arcTo_4_x'>x</a>, <a href='#SkPath_arcTo_4_y'>y</a>), choosing one of four possible routes: 3068clockwise or counterclockwise, and smaller or larger. 3069 3070<a href='undocumented#Arc'>Arc</a> <a href='#SkPath_arcTo_4_sweep'>sweep</a> is always less than 360 degrees. <a href='#SkPath_arcTo'>arcTo</a>() appends <a href='undocumented#Line'>line</a> to (<a href='#SkPath_arcTo_4_x'>x</a>, <a href='#SkPath_arcTo_4_y'>y</a>) if 3071either radii are zero, or if last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> equals (<a href='#SkPath_arcTo_4_x'>x</a>, <a href='#SkPath_arcTo_4_y'>y</a>). <a href='#SkPath_arcTo'>arcTo</a>() scales radii 3072(<a href='#SkPath_arcTo_4_rx'>rx</a>, <a href='#SkPath_arcTo_4_ry'>ry</a>) to fit last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> and (<a href='#SkPath_arcTo_4_x'>x</a>, <a href='#SkPath_arcTo_4_y'>y</a>) if both are greater than zero but 3073too small. 3074 3075<a href='#SkPath_arcTo'>arcTo</a>() appends up to four <a href='SkPath_Reference#Conic'>conic</a> <a href='undocumented#Curve'>curves</a>. 3076<a href='#SkPath_arcTo'>arcTo</a>() implements the functionality of <a href='undocumented#SVG_Arc'>SVG arc</a>, although <a href='undocumented#Sweep_Flag'>SVG sweep-flag</a> value 3077is opposite the integer value of <a href='#SkPath_arcTo_4_sweep'>sweep</a>; <a href='undocumented#Sweep_Flag'>SVG sweep-flag</a> uses 1 for clockwise, 3078while <a href='#SkPath_kCW_Direction'>kCW_Direction</a> cast to int is zero. 3079 3080### Parameters 3081 3082<table> <tr> <td><a name='SkPath_arcTo_4_rx'><code><strong>rx</strong></code></a></td> 3083 <td>radius on x-axis before x-axis rotation</td> 3084 </tr> 3085 <tr> <td><a name='SkPath_arcTo_4_ry'><code><strong>ry</strong></code></a></td> 3086 <td>radius on y-axis before x-axis rotation</td> 3087 </tr> 3088 <tr> <td><a name='SkPath_arcTo_4_xAxisRotate'><code><strong>xAxisRotate</strong></code></a></td> 3089 <td>x-axis rotation in degrees; positive values are clockwise</td> 3090 </tr> 3091 <tr> <td><a name='SkPath_arcTo_4_largeArc'><code><strong>largeArc</strong></code></a></td> 3092 <td>chooses smaller or larger <a href='undocumented#Arc'>arc</a></td> 3093 </tr> 3094 <tr> <td><a name='SkPath_arcTo_4_sweep'><code><strong>sweep</strong></code></a></td> 3095 <td>chooses clockwise or counterclockwise <a href='undocumented#Arc'>arc</a></td> 3096 </tr> 3097 <tr> <td><a name='SkPath_arcTo_4_x'><code><strong>x</strong></code></a></td> 3098 <td>end of <a href='undocumented#Arc'>arc</a></td> 3099 </tr> 3100 <tr> <td><a name='SkPath_arcTo_4_y'><code><strong>y</strong></code></a></td> 3101 <td>end of <a href='undocumented#Arc'>arc</a></td> 3102 </tr> 3103</table> 3104 3105### Return Value 3106 3107reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3108 3109### Example 3110 3111<div><fiddle-embed name="6b6ea44f659b27918f3a6fa621bf6173"></fiddle-embed></div> 3112 3113### See Also 3114 3115<a href='#SkPath_rArcTo'>rArcTo</a> <a href='#SkPath_ArcSize'>ArcSize</a> <a href='#SkPath_Direction'>Direction</a> 3116 3117<a name='SkPath_arcTo_5'></a> 3118 3119--- 3120 3121<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3122<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_arcTo'>arcTo</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> r, <a href='undocumented#SkScalar'>SkScalar</a> xAxisRotate, <a href='#SkPath_ArcSize'>ArcSize</a> largeArc, <a href='#SkPath_Direction'>Direction</a> sweep, 3123 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> xy) 3124</pre> 3125 3126Appends <a href='undocumented#Arc'>arc</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>. <a href='undocumented#Arc'>Arc</a> is implemented by one or more <a href='SkPath_Reference#Conic'>conic</a> weighted to describe 3127part of <a href='undocumented#Oval'>oval</a> with radii (<a href='#SkPath_arcTo_5_r'>r</a>.<a href='#SkPoint_fX'>fX</a>, <a href='#SkPath_arcTo_5_r'>r</a>.<a href='#SkPoint_fY'>fY</a>) rotated by <a href='#SkPath_arcTo_5_xAxisRotate'>xAxisRotate</a> degrees. <a href='undocumented#Arc'>Arc</a> <a href='undocumented#Curve'>curves</a> 3128from last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> to (<a href='#SkPath_arcTo_5_xy'>xy</a>.<a href='#SkPoint_fX'>fX</a>, <a href='#SkPath_arcTo_5_xy'>xy</a>.<a href='#SkPoint_fY'>fY</a>), choosing one of four possible routes: 3129clockwise or counterclockwise, 3130and smaller or larger. 3131 3132<a href='undocumented#Arc'>Arc</a> <a href='#SkPath_arcTo_5_sweep'>sweep</a> is always less than 360 degrees. <a href='#SkPath_arcTo'>arcTo</a>() appends <a href='undocumented#Line'>line</a> to <a href='#SkPath_arcTo_5_xy'>xy</a> if either 3133radii are zero, or if last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> equals (<a href='#SkPath_arcTo_5_xy'>xy</a>.<a href='#SkPoint_fX'>fX</a>, <a href='#SkPath_arcTo_5_xy'>xy</a>.<a href='#SkPoint_fY'>fY</a>). <a href='#SkPath_arcTo'>arcTo</a>() scales radii <a href='#SkPath_arcTo_5_r'>r</a> to 3134fit last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> and <a href='#SkPath_arcTo_5_xy'>xy</a> if both are greater than zero but too small to describe 3135an <a href='undocumented#Arc'>arc</a>. 3136 3137<a href='#SkPath_arcTo'>arcTo</a>() appends up to four <a href='SkPath_Reference#Conic'>conic</a> <a href='undocumented#Curve'>curves</a>. 3138<a href='#SkPath_arcTo'>arcTo</a>() implements the functionality of <a href='undocumented#SVG_Arc'>SVG arc</a>, although <a href='undocumented#Sweep_Flag'>SVG sweep-flag</a> value is 3139opposite the integer value of <a href='#SkPath_arcTo_5_sweep'>sweep</a>; <a href='undocumented#Sweep_Flag'>SVG sweep-flag</a> uses 1 for clockwise, while 3140<a href='#SkPath_kCW_Direction'>kCW_Direction</a> cast to int is zero. 3141 3142### Parameters 3143 3144<table> <tr> <td><a name='SkPath_arcTo_5_r'><code><strong>r</strong></code></a></td> 3145 <td>radii on axes before x-axis rotation</td> 3146 </tr> 3147 <tr> <td><a name='SkPath_arcTo_5_xAxisRotate'><code><strong>xAxisRotate</strong></code></a></td> 3148 <td>x-axis rotation in degrees; positive values are clockwise</td> 3149 </tr> 3150 <tr> <td><a name='SkPath_arcTo_5_largeArc'><code><strong>largeArc</strong></code></a></td> 3151 <td>chooses smaller or larger <a href='undocumented#Arc'>arc</a></td> 3152 </tr> 3153 <tr> <td><a name='SkPath_arcTo_5_sweep'><code><strong>sweep</strong></code></a></td> 3154 <td>chooses clockwise or counterclockwise <a href='undocumented#Arc'>arc</a></td> 3155 </tr> 3156 <tr> <td><a name='SkPath_arcTo_5_xy'><code><strong>xy</strong></code></a></td> 3157 <td>end of <a href='undocumented#Arc'>arc</a></td> 3158 </tr> 3159</table> 3160 3161### Return Value 3162 3163reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3164 3165### Example 3166 3167<div><fiddle-embed name="3f76a1007416181a4848c1a87fc81dbd"></fiddle-embed></div> 3168 3169### See Also 3170 3171<a href='#SkPath_rArcTo'>rArcTo</a> <a href='#SkPath_ArcSize'>ArcSize</a> <a href='#SkPath_Direction'>Direction</a> 3172 3173<a name='SkPath_rArcTo'></a> 3174 3175--- 3176 3177<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3178<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_rArcTo'>rArcTo</a>(<a href='undocumented#SkScalar'>SkScalar</a> rx, <a href='undocumented#SkScalar'>SkScalar</a> ry, <a href='undocumented#SkScalar'>SkScalar</a> xAxisRotate, <a href='#SkPath_ArcSize'>ArcSize</a> largeArc, <a href='#SkPath_Direction'>Direction</a> sweep, 3179 <a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy) 3180</pre> 3181 3182Appends <a href='undocumented#Arc'>Arc</a> to <a href='SkPath_Reference#Path'>Path</a>, relative to last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a>. <a href='undocumented#Arc'>Arc</a> is implemented by one or 3183more <a href='SkPath_Reference#Conic'>Conic</a>, weighted to describe part of <a href='undocumented#Oval'>Oval</a> with radii (<a href='#SkPath_rArcTo_rx'>rx</a>, <a href='#SkPath_rArcTo_ry'>ry</a>) rotated by 3184<a href='#SkPath_rArcTo_xAxisRotate'>xAxisRotate</a> degrees. <a href='undocumented#Arc'>Arc</a> <a href='undocumented#Curve'>curves</a> from last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a> to relative end <a href='SkPoint_Reference#Point'>Point</a> 3185(<a href='#SkPath_rArcTo_dx'>dx</a>, <a href='#SkPath_rArcTo_dy'>dy</a>), choosing one of four possible routes: clockwise or 3186counterclockwise, and smaller or larger. If <a href='SkPath_Reference#Path'>Path</a> is empty, the start <a href='undocumented#Arc'>Arc</a> <a href='SkPoint_Reference#Point'>Point</a> 3187is (0, 0). 3188 3189<a href='undocumented#Arc'>Arc</a> <a href='#SkPath_rArcTo_sweep'>sweep</a> is always less than 360 degrees. <a href='#SkPath_arcTo'>arcTo</a> appends <a href='undocumented#Line'>Line</a> to end <a href='SkPoint_Reference#Point'>Point</a> 3190if either radii are zero, or if last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a> equals end <a href='SkPoint_Reference#Point'>Point</a>. 3191<a href='#SkPath_arcTo'>arcTo</a> scales radii (<a href='#SkPath_rArcTo_rx'>rx</a>, <a href='#SkPath_rArcTo_ry'>ry</a>) to fit last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a> and end <a href='SkPoint_Reference#Point'>Point</a> if both are 3192greater than zero but too small to describe an <a href='undocumented#Arc'>arc</a>. 3193 3194<a href='#SkPath_arcTo'>arcTo</a> appends up to four <a href='SkPath_Reference#Conic'>Conic</a> <a href='undocumented#Curve'>curves</a>. 3195<a href='#SkPath_arcTo'>arcTo</a> implements the functionality of <a href='#SVG_Arc'>SVG_Arc</a>, although <a href='undocumented#SVG'>SVG</a> "sweep-flag" value is 3196opposite the integer value of <a href='#SkPath_rArcTo_sweep'>sweep</a>; <a href='undocumented#SVG'>SVG</a> "sweep-flag" uses 1 for clockwise, while 3197<a href='#SkPath_kCW_Direction'>kCW_Direction</a> cast to int is zero. 3198 3199### Parameters 3200 3201<table> <tr> <td><a name='SkPath_rArcTo_rx'><code><strong>rx</strong></code></a></td> 3202 <td>radius before x-axis rotation</td> 3203 </tr> 3204 <tr> <td><a name='SkPath_rArcTo_ry'><code><strong>ry</strong></code></a></td> 3205 <td>radius before x-axis rotation</td> 3206 </tr> 3207 <tr> <td><a name='SkPath_rArcTo_xAxisRotate'><code><strong>xAxisRotate</strong></code></a></td> 3208 <td>x-axis rotation in degrees; positive values are clockwise</td> 3209 </tr> 3210 <tr> <td><a name='SkPath_rArcTo_largeArc'><code><strong>largeArc</strong></code></a></td> 3211 <td>chooses smaller or larger <a href='undocumented#Arc'>Arc</a></td> 3212 </tr> 3213 <tr> <td><a name='SkPath_rArcTo_sweep'><code><strong>sweep</strong></code></a></td> 3214 <td>chooses clockwise or counterclockwise <a href='undocumented#Arc'>Arc</a></td> 3215 </tr> 3216 <tr> <td><a name='SkPath_rArcTo_dx'><code><strong>dx</strong></code></a></td> 3217 <td>x-axis offset end of <a href='undocumented#Arc'>Arc</a> from last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a></td> 3218 </tr> 3219 <tr> <td><a name='SkPath_rArcTo_dy'><code><strong>dy</strong></code></a></td> 3220 <td>y-axis offset end of <a href='undocumented#Arc'>Arc</a> from last <a href='SkPath_Reference#Path'>Path</a> <a href='SkPoint_Reference#Point'>Point</a></td> 3221 </tr> 3222</table> 3223 3224### Return Value 3225 3226reference to <a href='SkPath_Reference#Path'>Path</a> 3227 3228### Example 3229 3230<div><fiddle-embed name="3f76a1007416181a4848c1a87fc81dbd"></fiddle-embed></div> 3231 3232### See Also 3233 3234<a href='#SkPath_arcTo'>arcTo</a> <a href='#SkPath_ArcSize'>ArcSize</a> <a href='#SkPath_Direction'>Direction</a> 3235 3236<a name='SkPath_close'></a> 3237 3238--- 3239 3240<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3241<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_close'>close()</a> 3242</pre> 3243 3244Appends <a href='#SkPath_kClose_Verb'>kClose_Verb</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>. A closed <a href='SkPath_Overview#Contour'>contour</a> connects the first and last <a href='SkPoint_Reference#SkPoint'>SkPoint</a> 3245with <a href='undocumented#Line'>line</a>, forming a continuous loop. Open and closed <a href='SkPath_Overview#Contour'>contour</a> draw the same 3246with <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kFill_Style'>kFill_Style</a>. With <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kStroke_Style'>kStroke_Style</a>, open <a href='SkPath_Overview#Contour'>contour</a> draws 3247<a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Cap'>Cap</a> at <a href='SkPath_Overview#Contour'>contour</a> start and end; closed <a href='SkPath_Overview#Contour'>contour</a> draws 3248<a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Join'>Join</a> at <a href='SkPath_Overview#Contour'>contour</a> start and end. 3249 3250<a href='#SkPath_close'>close()</a> has no effect if <a href='SkPath_Reference#SkPath'>SkPath</a> is empty or last <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> is <a href='#SkPath_kClose_Verb'>kClose_Verb</a>. 3251 3252### Return Value 3253 3254reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3255 3256### Example 3257 3258<div><fiddle-embed name="9235f6309271d6420fa5c45dc28664c5"></fiddle-embed></div> 3259 3260### See Also 3261 3262<a name='SkPath_IsInverseFillType'></a> 3263 3264--- 3265 3266<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3267static bool <a href='#SkPath_IsInverseFillType'>IsInverseFillType</a>(<a href='#SkPath_FillType'>FillType</a> fill) 3268</pre> 3269 3270Returns true if <a href='#SkPath_IsInverseFillType_fill'>fill</a> is inverted and <a href='SkPath_Reference#Path'>Path</a> with <a href='#SkPath_IsInverseFillType_fill'>fill</a> represents area outside 3271of its geometric bounds. 3272 3273| <a href='#SkPath_FillType'>FillType</a> | is inverse | 3274| --- | --- | 3275| <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> | false | 3276| <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> | false | 3277| <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> | true | 3278| <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> | true | 3279 3280### Parameters 3281 3282<table> <tr> <td><a name='SkPath_IsInverseFillType_fill'><code><strong>fill</strong></code></a></td> 3283 <td>one of: <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>, <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a>, 3284<a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a>, <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> 3285</td> 3286 </tr> 3287</table> 3288 3289### Return Value 3290 3291true if <a href='SkPath_Reference#Path'>Path</a> fills outside its bounds 3292 3293### Example 3294 3295<div><fiddle-embed name="1453856a9d0c73e8192bf298c4143563"> 3296 3297#### Example Output 3298 3299~~~~ 3300IsInverseFillType(kWinding_FillType) == false 3301IsInverseFillType(kEvenOdd_FillType) == false 3302IsInverseFillType(kInverseWinding_FillType) == true 3303IsInverseFillType(kInverseEvenOdd_FillType) == true 3304~~~~ 3305 3306</fiddle-embed></div> 3307 3308### See Also 3309 3310<a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_getFillType'>getFillType</a> <a href='#SkPath_setFillType'>setFillType</a> <a href='#SkPath_ConvertToNonInverseFillType'>ConvertToNonInverseFillType</a> 3311 3312<a name='SkPath_ConvertToNonInverseFillType'></a> 3313 3314--- 3315 3316<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3317static <a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_ConvertToNonInverseFillType'>ConvertToNonInverseFillType</a>(<a href='#SkPath_FillType'>FillType</a> fill) 3318</pre> 3319 3320Returns equivalent <a href='#Path_Fill_Type'>Fill_Type</a> representing <a href='SkPath_Reference#Path'>Path</a> <a href='#SkPath_ConvertToNonInverseFillType_fill'>fill</a> inside its bounds. 3321 3322| <a href='#SkPath_FillType'>FillType</a> | inside <a href='#SkPath_FillType'>FillType</a> | 3323| --- | --- | 3324| <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> | <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> | 3325| <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> | <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> | 3326| <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> | <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> | 3327| <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> | <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> | 3328 3329### Parameters 3330 3331<table> <tr> <td><a name='SkPath_ConvertToNonInverseFillType_fill'><code><strong>fill</strong></code></a></td> 3332 <td>one of: <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>, <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a>, 3333<a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a>, <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> 3334</td> 3335 </tr> 3336</table> 3337 3338### Return Value 3339 3340<a href='#SkPath_ConvertToNonInverseFillType_fill'>fill</a>, or <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> or <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> if <a href='#SkPath_ConvertToNonInverseFillType_fill'>fill</a> is inverted 3341 3342### Example 3343 3344<div><fiddle-embed name="319f6b124458dcc0f9ce4d7bbde65810"> 3345 3346#### Example Output 3347 3348~~~~ 3349ConvertToNonInverseFillType(kWinding_FillType) == kWinding_FillType 3350ConvertToNonInverseFillType(kEvenOdd_FillType) == kEvenOdd_FillType 3351ConvertToNonInverseFillType(kInverseWinding_FillType) == kWinding_FillType 3352ConvertToNonInverseFillType(kInverseEvenOdd_FillType) == kEvenOdd_FillType 3353~~~~ 3354 3355</fiddle-embed></div> 3356 3357### See Also 3358 3359<a href='#SkPath_FillType'>FillType</a> <a href='#SkPath_getFillType'>getFillType</a> <a href='#SkPath_setFillType'>setFillType</a> <a href='#SkPath_IsInverseFillType'>IsInverseFillType</a> 3360 3361<a name='SkPath_ConvertConicToQuads'></a> 3362 3363--- 3364 3365<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3366static int <a href='#SkPath_ConvertConicToQuads'>ConvertConicToQuads</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p0, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p1, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p2, <a href='undocumented#SkScalar'>SkScalar</a> w, 3367 <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[], int pow2) 3368</pre> 3369 3370Approximates <a href='SkPath_Reference#Conic'>Conic</a> with <a href='SkPath_Reference#Quad'>Quad</a> array. <a href='SkPath_Reference#Conic'>Conic</a> is constructed from start <a href='SkPoint_Reference#Point'>Point</a> <a href='#SkPath_ConvertConicToQuads_p0'>p0</a>, 3371control <a href='SkPoint_Reference#Point'>Point</a> <a href='#SkPath_ConvertConicToQuads_p1'>p1</a>, end <a href='SkPoint_Reference#Point'>Point</a> <a href='#SkPath_ConvertConicToQuads_p2'>p2</a>, and weight <a href='#SkPath_ConvertConicToQuads_w'>w</a>. 3372<a href='SkPath_Reference#Quad'>Quad</a> array is stored in <a href='#SkPath_ConvertConicToQuads_pts'>pts</a>; this storage is supplied by caller. 3373Maximum <a href='SkPath_Reference#Quad'>Quad</a> count is 2 to the <a href='#SkPath_ConvertConicToQuads_pow2'>pow2</a>. 3374Every third <a href='SkPoint_Reference#Point'>point</a> in array shares last <a href='SkPoint_Reference#Point'>Point</a> of previous <a href='SkPath_Reference#Quad'>Quad</a> and first <a href='SkPoint_Reference#Point'>Point</a> of 3375next <a href='SkPath_Reference#Quad'>Quad</a>. Maximum <a href='#SkPath_ConvertConicToQuads_pts'>pts</a> storage <a href='undocumented#Size'>size</a> is given by: 3376<code>(1 + 2 * (1 << <a href='#SkPath_ConvertConicToQuads_pow2'>pow2</a>)) * <a href='undocumented#sizeof()'>sizeof</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a>)</code>. 3377 3378Returns <a href='SkPath_Reference#Quad'>Quad</a> count used the approximation, which may be smaller 3379than the number requested. 3380 3381<a href='#Path_Conic_Weight'>Conic_Weight</a> determines the amount of influence <a href='SkPath_Reference#Conic'>Conic</a> control <a href='SkPoint_Reference#Point'>point</a> has on the <a href='undocumented#Curve'>curve</a>. 3382<a href='#SkPath_ConvertConicToQuads_w'>w</a> less than one represents an elliptical section. <a href='#SkPath_ConvertConicToQuads_w'>w</a> greater than one represents 3383a hyperbolic section. <a href='#SkPath_ConvertConicToQuads_w'>w</a> equal to one represents a parabolic section. 3384 3385Two <a href='SkPath_Reference#Quad'>Quad</a> <a href='undocumented#Curve'>curves</a> are sufficient to approximate an elliptical <a href='SkPath_Reference#Conic'>Conic</a> with a sweep 3386of up to 90 degrees; in this case, set <a href='#SkPath_ConvertConicToQuads_pow2'>pow2</a> to one. 3387 3388### Parameters 3389 3390<table> <tr> <td><a name='SkPath_ConvertConicToQuads_p0'><code><strong>p0</strong></code></a></td> 3391 <td><a href='SkPath_Reference#Conic'>Conic</a> start <a href='SkPoint_Reference#Point'>Point</a></td> 3392 </tr> 3393 <tr> <td><a name='SkPath_ConvertConicToQuads_p1'><code><strong>p1</strong></code></a></td> 3394 <td><a href='SkPath_Reference#Conic'>Conic</a> control <a href='SkPoint_Reference#Point'>Point</a></td> 3395 </tr> 3396 <tr> <td><a name='SkPath_ConvertConicToQuads_p2'><code><strong>p2</strong></code></a></td> 3397 <td><a href='SkPath_Reference#Conic'>Conic</a> end <a href='SkPoint_Reference#Point'>Point</a></td> 3398 </tr> 3399 <tr> <td><a name='SkPath_ConvertConicToQuads_w'><code><strong>w</strong></code></a></td> 3400 <td><a href='SkPath_Reference#Conic'>Conic</a> weight</td> 3401 </tr> 3402 <tr> <td><a name='SkPath_ConvertConicToQuads_pts'><code><strong>pts</strong></code></a></td> 3403 <td>storage for <a href='SkPath_Reference#Quad'>Quad</a> array</td> 3404 </tr> 3405 <tr> <td><a name='SkPath_ConvertConicToQuads_pow2'><code><strong>pow2</strong></code></a></td> 3406 <td><a href='SkPath_Reference#Quad'>Quad</a> count, as power of two, normally 0 to 5 (1 to 32 <a href='SkPath_Reference#Quad'>Quad</a> <a href='undocumented#Curve'>curves</a>)</td> 3407 </tr> 3408</table> 3409 3410### Return Value 3411 3412number of <a href='SkPath_Reference#Quad'>Quad</a> <a href='undocumented#Curve'>curves</a> written to <a href='#SkPath_ConvertConicToQuads_pts'>pts</a> 3413 3414### Example 3415 3416<div><fiddle-embed name="3ba94448a4ba48f926e643baeb5b1016"><div>A pair of <a href='SkPath_Reference#Quad'>Quad</a> <a href='undocumented#Curve'>curves</a> are drawn in red on top of the elliptical <a href='SkPath_Reference#Conic'>Conic</a> <a href='undocumented#Curve'>curve</a> in black. 3417The middle <a href='undocumented#Curve'>curve</a> is nearly circular. The top-right <a href='undocumented#Curve'>curve</a> is parabolic, which can 3418be drawn exactly with a single <a href='SkPath_Reference#Quad'>Quad</a>. 3419</div></fiddle-embed></div> 3420 3421### See Also 3422 3423<a href='SkPath_Reference#Conic'>Conic</a> <a href='SkPath_Reference#Quad'>Quad</a> 3424 3425<a name='SkPath_isRect'></a> 3426 3427--- 3428 3429<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3430bool <a href='#SkPath_isRect'>isRect</a>(<a href='SkRect_Reference#SkRect'>SkRect</a>* <a href='SkRect_Reference#Rect'>rect</a>, bool* isClosed = nullptr, <a href='#SkPath_Direction'>Direction</a>* direction = nullptr)const 3431</pre> 3432 3433Returns true if <a href='SkPath_Reference#SkPath'>SkPath</a> is equivalent to <a href='SkRect_Reference#SkRect'>SkRect</a> when filled. 3434If false: <a href='#SkPath_isRect_rect'>rect</a>, <a href='#SkPath_isRect_isClosed'>isClosed</a>, and <a href='#SkPath_isRect_direction'>direction</a> are unchanged. 3435If true: <a href='#SkPath_isRect_rect'>rect</a>, <a href='#SkPath_isRect_isClosed'>isClosed</a>, and <a href='#SkPath_isRect_direction'>direction</a> are written to if not nullptr. 3436 3437<a href='#SkPath_isRect_rect'>rect</a> may be smaller than the <a href='SkPath_Reference#SkPath'>SkPath</a> bounds. <a href='SkPath_Reference#SkPath'>SkPath</a> bounds may include <a href='#SkPath_kMove_Verb'>kMove_Verb</a> <a href='SkPoint_Reference#Point'>points</a> 3438that do not alter the area drawn by the returned <a href='#SkPath_isRect_rect'>rect</a>. 3439 3440### Parameters 3441 3442<table> <tr> <td><a name='SkPath_isRect_rect'><code><strong>rect</strong></code></a></td> 3443 <td>storage for bounds of <a href='SkRect_Reference#SkRect'>SkRect</a>; may be nullptr</td> 3444 </tr> 3445 <tr> <td><a name='SkPath_isRect_isClosed'><code><strong>isClosed</strong></code></a></td> 3446 <td>storage set to true if <a href='SkPath_Reference#SkPath'>SkPath</a> is closed; may be nullptr</td> 3447 </tr> 3448 <tr> <td><a name='SkPath_isRect_direction'><code><strong>direction</strong></code></a></td> 3449 <td>storage set to <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPath_isRect_direction'>direction</a>; may be nullptr</td> 3450 </tr> 3451</table> 3452 3453### Return Value 3454 3455true if <a href='SkPath_Reference#SkPath'>SkPath</a> contains <a href='SkRect_Reference#SkRect'>SkRect</a> 3456 3457### Example 3458 3459<div><fiddle-embed name="81a2aac1b8f0ff3d4c8d35ccb9149b16"><div>After <a href='#SkPath_addRect'>addRect</a>, <a href='#SkPath_isRect'>isRect</a> returns true. Following <a href='#SkPath_moveTo'>moveTo</a> permits <a href='#SkPath_isRect'>isRect</a> to return true, but 3460following <a href='#SkPath_lineTo'>lineTo</a> does not. <a href='#SkPath_addPoly'>addPoly</a> returns true even though <a href='#SkPath_isRect_rect'>rect</a> is not closed, and one 3461side of <a href='#SkPath_isRect_rect'>rect</a> is made up of consecutive <a href='undocumented#Line'>line</a> segments. 3462</div> 3463 3464#### Example Output 3465 3466~~~~ 3467empty is not rect 3468addRect is rect (10, 20, 30, 40); is closed; direction CW 3469moveTo is rect (10, 20, 30, 40); is closed; direction CW 3470lineTo is not rect 3471addPoly is rect (0, 0, 80, 80); is not closed; direction CCW 3472~~~~ 3473 3474</fiddle-embed></div> 3475 3476### See Also 3477 3478<a href='#SkPath_computeTightBounds'>computeTightBounds</a> <a href='#SkPath_conservativelyContainsRect'>conservativelyContainsRect</a> <a href='#SkPath_getBounds'>getBounds</a> <a href='#SkPath_isConvex'>isConvex</a> <a href='#SkPath_isLastContourClosed'>isLastContourClosed</a> <a href='#SkPath_isNestedFillRects'>isNestedFillRects</a> 3479 3480<a name='SkPath_isNestedFillRects'></a> 3481 3482--- 3483 3484<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3485bool <a href='#SkPath_isNestedFillRects'>isNestedFillRects</a>(<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='SkRect_Reference#Rect'>rect</a>[2], <a href='#SkPath_Direction'>Direction</a> dirs[2] = nullptr)const 3486</pre> 3487 3488Returns true if <a href='SkPath_Reference#SkPath'>SkPath</a> is equivalent to nested <a href='SkRect_Reference#SkRect'>SkRect</a> pair when filled. 3489If false, <a href='#SkPath_isNestedFillRects_rect'>rect</a> and <a href='#SkPath_isNestedFillRects_dirs'>dirs</a> are unchanged. 3490If true, <a href='#SkPath_isNestedFillRects_rect'>rect</a> and <a href='#SkPath_isNestedFillRects_dirs'>dirs</a> are written to if not nullptr: 3491setting <a href='#SkPath_isNestedFillRects_rect'>rect</a>[0] to outer <a href='SkRect_Reference#SkRect'>SkRect</a>, and <a href='#SkPath_isNestedFillRects_rect'>rect</a>[1] to inner <a href='SkRect_Reference#SkRect'>SkRect</a>; 3492setting <a href='#SkPath_isNestedFillRects_dirs'>dirs</a>[0] to <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Direction'>Direction</a> of outer <a href='SkRect_Reference#SkRect'>SkRect</a>, and <a href='#SkPath_isNestedFillRects_dirs'>dirs</a>[1] to <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Direction'>Direction</a> of 3493inner <a href='SkRect_Reference#SkRect'>SkRect</a>. 3494 3495### Parameters 3496 3497<table> <tr> <td><a name='SkPath_isNestedFillRects_rect'><code><strong>rect</strong></code></a></td> 3498 <td>storage for <a href='SkRect_Reference#SkRect'>SkRect</a> pair; may be nullptr</td> 3499 </tr> 3500 <tr> <td><a name='SkPath_isNestedFillRects_dirs'><code><strong>dirs</strong></code></a></td> 3501 <td>storage for <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Direction'>Direction</a> pair; may be nullptr</td> 3502 </tr> 3503</table> 3504 3505### Return Value 3506 3507true if <a href='SkPath_Reference#SkPath'>SkPath</a> contains nested <a href='SkRect_Reference#SkRect'>SkRect</a> pair 3508 3509### Example 3510 3511<div><fiddle-embed name="77e4394caf9fa083c19c21c2462efe14"> 3512 3513#### Example Output 3514 3515~~~~ 3516outer (7.5, 17.5, 32.5, 42.5); direction CW 3517inner (12.5, 22.5, 27.5, 37.5); direction CCW 3518~~~~ 3519 3520</fiddle-embed></div> 3521 3522### See Also 3523 3524<a href='#SkPath_computeTightBounds'>computeTightBounds</a> <a href='#SkPath_conservativelyContainsRect'>conservativelyContainsRect</a> <a href='#SkPath_getBounds'>getBounds</a> <a href='#SkPath_isConvex'>isConvex</a> <a href='#SkPath_isLastContourClosed'>isLastContourClosed</a> <a href='#SkPath_isRect'>isRect</a> 3525 3526<a name='SkPath_addRect'></a> 3527 3528--- 3529 3530<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3531<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRect'>addRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>) 3532</pre> 3533 3534Adds <a href='SkRect_Reference#SkRect'>SkRect</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, appending <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, three <a href='#SkPath_kLine_Verb'>kLine_Verb</a>, and <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, 3535starting with top-left corner of <a href='SkRect_Reference#SkRect'>SkRect</a>; followed by top-right, bottom-right, 3536and bottom-left if <a href='#SkPath_addRect_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>; or followed by bottom-left, 3537bottom-right, and top-right if <a href='#SkPath_addRect_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>. 3538 3539### Parameters 3540 3541<table> <tr> <td><a name='SkPath_addRect_rect'><code><strong>rect</strong></code></a></td> 3542 <td><a href='SkRect_Reference#SkRect'>SkRect</a> to add as a closed <a href='SkPath_Overview#Contour'>contour</a></td> 3543 </tr> 3544 <tr> <td><a name='SkPath_addRect_dir'><code><strong>dir</strong></code></a></td> 3545 <td><a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Direction'>Direction</a> to wind added <a href='SkPath_Overview#Contour'>contour</a></td> 3546 </tr> 3547</table> 3548 3549### Return Value 3550 3551reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3552 3553### Example 3554 3555<div><fiddle-embed name="0f841e4eaebb613b5069800567917c2d"><div>The left <a href='SkRect_Reference#Rect'>Rect</a> dashes starting at the top-left corner, to the right. 3556The right <a href='SkRect_Reference#Rect'>Rect</a> dashes starting at the top-left corner, towards the bottom. 3557</div></fiddle-embed></div> 3558 3559### See Also 3560 3561<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawRect'>drawRect</a> <a href='#SkPath_Direction'>Direction</a> 3562 3563<a name='SkPath_addRect_2'></a> 3564 3565--- 3566 3567<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3568<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRect'>addRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>, <a href='#SkPath_Direction'>Direction</a> dir, unsigned start) 3569</pre> 3570 3571Adds <a href='SkRect_Reference#Rect'>Rect</a> to <a href='SkPath_Reference#Path'>Path</a>, appending <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, three <a href='#SkPath_kLine_Verb'>kLine_Verb</a>, and <a href='#SkPath_kClose_Verb'>kClose_Verb</a>. 3572If <a href='#SkPath_addRect_2_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, <a href='SkRect_Reference#Rect'>Rect</a> corners are added clockwise; if <a href='#SkPath_addRect_2_dir'>dir</a> is 3573<a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <a href='SkRect_Reference#Rect'>Rect</a> corners are added counterclockwise. 3574<a href='#SkPath_addRect_2_start'>start</a> determines the first corner added. 3575 3576| <a href='#SkPath_addRect_2_start'>start</a> | first corner | 3577| --- | --- | 3578| 0 | top-left | 3579| 1 | top-right | 3580| 2 | bottom-right | 3581| 3 | bottom-left | 3582 3583### Parameters 3584 3585<table> <tr> <td><a name='SkPath_addRect_2_rect'><code><strong>rect</strong></code></a></td> 3586 <td><a href='SkRect_Reference#Rect'>Rect</a> to add as a closed <a href='SkPath_Overview#Contour'>contour</a></td> 3587 </tr> 3588 <tr> <td><a name='SkPath_addRect_2_dir'><code><strong>dir</strong></code></a></td> 3589 <td><a href='#SkPath_Direction'>Direction</a> to wind added <a href='SkPath_Overview#Contour'>contour</a></td> 3590 </tr> 3591 <tr> <td><a name='SkPath_addRect_2_start'><code><strong>start</strong></code></a></td> 3592 <td>initial corner of <a href='SkRect_Reference#Rect'>Rect</a> to add</td> 3593 </tr> 3594</table> 3595 3596### Return Value 3597 3598reference to <a href='SkPath_Reference#Path'>Path</a> 3599 3600### Example 3601 3602<div><fiddle-embed name="9202430b3f4f5275af8eec5cc9d7baa8"><div>The arrow is just after the initial corner and <a href='SkPoint_Reference#Point'>points</a> towards the next 3603corner appended to <a href='SkPath_Reference#Path'>Path</a>. 3604</div></fiddle-embed></div> 3605 3606### See Also 3607 3608<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawRect'>drawRect</a> <a href='#SkPath_Direction'>Direction</a> 3609 3610<a name='SkPath_addRect_3'></a> 3611 3612--- 3613 3614<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3615<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRect'>addRect</a>(<a href='undocumented#SkScalar'>SkScalar</a> left, <a href='undocumented#SkScalar'>SkScalar</a> top, <a href='undocumented#SkScalar'>SkScalar</a> right, <a href='undocumented#SkScalar'>SkScalar</a> bottom, 3616 <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>) 3617</pre> 3618 3619Adds <a href='SkRect_Reference#SkRect'>SkRect</a> (<a href='#SkPath_addRect_3_left'>left</a>, <a href='#SkPath_addRect_3_top'>top</a>, <a href='#SkPath_addRect_3_right'>right</a>, <a href='#SkPath_addRect_3_bottom'>bottom</a>) to <a href='SkPath_Reference#SkPath'>SkPath</a>, 3620appending <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, three <a href='#SkPath_kLine_Verb'>kLine_Verb</a>, and <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, 3621starting with top-left corner of <a href='SkRect_Reference#SkRect'>SkRect</a>; followed by top-right, bottom-right, 3622and bottom-left if <a href='#SkPath_addRect_3_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>; or followed by bottom-left, 3623bottom-right, and top-right if <a href='#SkPath_addRect_3_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>. 3624 3625### Parameters 3626 3627<table> <tr> <td><a name='SkPath_addRect_3_left'><code><strong>left</strong></code></a></td> 3628 <td>smaller x-axis value of <a href='SkRect_Reference#SkRect'>SkRect</a></td> 3629 </tr> 3630 <tr> <td><a name='SkPath_addRect_3_top'><code><strong>top</strong></code></a></td> 3631 <td>smaller y-axis value of <a href='SkRect_Reference#SkRect'>SkRect</a></td> 3632 </tr> 3633 <tr> <td><a name='SkPath_addRect_3_right'><code><strong>right</strong></code></a></td> 3634 <td>larger x-axis value of <a href='SkRect_Reference#SkRect'>SkRect</a></td> 3635 </tr> 3636 <tr> <td><a name='SkPath_addRect_3_bottom'><code><strong>bottom</strong></code></a></td> 3637 <td>larger y-axis value of <a href='SkRect_Reference#SkRect'>SkRect</a></td> 3638 </tr> 3639 <tr> <td><a name='SkPath_addRect_3_dir'><code><strong>dir</strong></code></a></td> 3640 <td><a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Direction'>Direction</a> to wind added <a href='SkPath_Overview#Contour'>contour</a></td> 3641 </tr> 3642</table> 3643 3644### Return Value 3645 3646reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3647 3648### Example 3649 3650<div><fiddle-embed name="3837827310e8b88b8c2e128ef9fbbd65"><div>The <a href='#SkPath_addRect_3_left'>left</a> <a href='SkRect_Reference#Rect'>Rect</a> dashes start at the top-left corner, and continue to the <a href='#SkPath_addRect_3_right'>right</a>. 3651The <a href='#SkPath_addRect_3_right'>right</a> <a href='SkRect_Reference#Rect'>Rect</a> dashes start at the top-left corner, and continue down. 3652</div></fiddle-embed></div> 3653 3654### See Also 3655 3656<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawRect'>drawRect</a> <a href='#SkPath_Direction'>Direction</a> 3657 3658<a name='SkPath_addOval'></a> 3659 3660--- 3661 3662<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3663<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addOval'>addOval</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='undocumented#Oval'>oval</a>, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>) 3664</pre> 3665 3666Adds <a href='#SkPath_addOval_oval'>oval</a> to <a href='SkPath_Reference#Path'>path</a>, appending <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, four <a href='#SkPath_kConic_Verb'>kConic_Verb</a>, and <a href='#SkPath_kClose_Verb'>kClose_Verb</a>. 3667<a href='undocumented#Oval'>Oval</a> is upright ellipse bounded by <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPath_addOval_oval'>oval</a> with radii equal to half <a href='#SkPath_addOval_oval'>oval</a> width 3668and half <a href='#SkPath_addOval_oval'>oval</a> height. <a href='undocumented#Oval'>Oval</a> begins at (<a href='#SkPath_addOval_oval'>oval</a>.<a href='#SkRect_fRight'>fRight</a>, <a href='#SkPath_addOval_oval'>oval</a>.<a href='#SkRect_centerY'>centerY</a>()) and continues 3669clockwise if <a href='#SkPath_addOval_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, counterclockwise if <a href='#SkPath_addOval_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>. 3670 3671### Parameters 3672 3673<table> <tr> <td><a name='SkPath_addOval_oval'><code><strong>oval</strong></code></a></td> 3674 <td>bounds of ellipse added</td> 3675 </tr> 3676 <tr> <td><a name='SkPath_addOval_dir'><code><strong>dir</strong></code></a></td> 3677 <td><a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Direction'>Direction</a> to wind ellipse</td> 3678 </tr> 3679</table> 3680 3681### Return Value 3682 3683reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3684 3685### Example 3686 3687<div><fiddle-embed name="cac84cf68e63a453c2a8b64c91537704"></fiddle-embed></div> 3688 3689### See Also 3690 3691<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawOval'>drawOval</a> <a href='#SkPath_Direction'>Direction</a> <a href='undocumented#Oval'>Oval</a> 3692 3693<a name='SkPath_addOval_2'></a> 3694 3695--- 3696 3697<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3698<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addOval'>addOval</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='undocumented#Oval'>oval</a>, <a href='#SkPath_Direction'>Direction</a> dir, unsigned start) 3699</pre> 3700 3701Adds <a href='undocumented#Oval'>Oval</a> to <a href='SkPath_Reference#Path'>Path</a>, appending <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, four <a href='#SkPath_kConic_Verb'>kConic_Verb</a>, and <a href='#SkPath_kClose_Verb'>kClose_Verb</a>. 3702<a href='undocumented#Oval'>Oval</a> is upright ellipse bounded by <a href='SkRect_Reference#Rect'>Rect</a> <a href='#SkPath_addOval_2_oval'>oval</a> with radii equal to half <a href='#SkPath_addOval_2_oval'>oval</a> width 3703and half <a href='#SkPath_addOval_2_oval'>oval</a> height. <a href='undocumented#Oval'>Oval</a> begins at <a href='#SkPath_addOval_2_start'>start</a> and continues 3704clockwise if <a href='#SkPath_addOval_2_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, counterclockwise if <a href='#SkPath_addOval_2_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>. 3705 3706| <a href='#SkPath_addOval_2_start'>start</a> | <a href='SkPoint_Reference#Point'>Point</a> | 3707| --- | --- | 3708| 0 | <a href='#SkPath_addOval_2_oval'>oval</a>.<a href='#SkRect_centerX'>centerX</a>(), <a href='#SkPath_addOval_2_oval'>oval</a>.<a href='#SkRect_fTop'>fTop</a> | 3709| 1 | <a href='#SkPath_addOval_2_oval'>oval</a>.<a href='#SkRect_fRight'>fRight</a>, <a href='#SkPath_addOval_2_oval'>oval</a>.<a href='#SkRect_centerY'>centerY</a>() | 3710| 2 | <a href='#SkPath_addOval_2_oval'>oval</a>.<a href='#SkRect_centerX'>centerX</a>(), <a href='#SkPath_addOval_2_oval'>oval</a>.<a href='#SkRect_fBottom'>fBottom</a> | 3711| 3 | <a href='#SkPath_addOval_2_oval'>oval</a>.<a href='#SkRect_fLeft'>fLeft</a>, <a href='#SkPath_addOval_2_oval'>oval</a>.<a href='#SkRect_centerY'>centerY</a>() | 3712 3713### Parameters 3714 3715<table> <tr> <td><a name='SkPath_addOval_2_oval'><code><strong>oval</strong></code></a></td> 3716 <td>bounds of ellipse added</td> 3717 </tr> 3718 <tr> <td><a name='SkPath_addOval_2_dir'><code><strong>dir</strong></code></a></td> 3719 <td><a href='#SkPath_Direction'>Direction</a> to wind ellipse</td> 3720 </tr> 3721 <tr> <td><a name='SkPath_addOval_2_start'><code><strong>start</strong></code></a></td> 3722 <td>index of initial <a href='SkPoint_Reference#Point'>point</a> of ellipse</td> 3723 </tr> 3724</table> 3725 3726### Return Value 3727 3728reference to <a href='SkPath_Reference#Path'>Path</a> 3729 3730### Example 3731 3732<div><fiddle-embed name="f1122d6fffddac0167e96fab4b9a862f"></fiddle-embed></div> 3733 3734### See Also 3735 3736<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawOval'>drawOval</a> <a href='#SkPath_Direction'>Direction</a> <a href='undocumented#Oval'>Oval</a> 3737 3738<a name='SkPath_addCircle'></a> 3739 3740--- 3741 3742<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3743<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addCircle'>addCircle</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, <a href='undocumented#SkScalar'>SkScalar</a> radius, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>) 3744</pre> 3745 3746Adds <a href='undocumented#Circle'>Circle</a> centered at (<a href='#SkPath_addCircle_x'>x</a>, <a href='#SkPath_addCircle_y'>y</a>) of <a href='undocumented#Size'>size</a> <a href='#SkPath_addCircle_radius'>radius</a> to <a href='SkPath_Reference#Path'>Path</a>, appending <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, 3747four <a href='#SkPath_kConic_Verb'>kConic_Verb</a>, and <a href='#SkPath_kClose_Verb'>kClose_Verb</a>. <a href='undocumented#Circle'>Circle</a> begins at: <code>(<a href='#SkPath_addCircle_x'>x</a> + <a href='#SkPath_addCircle_radius'>radius</a>, <a href='#SkPath_addCircle_y'>y</a>)</code>, continuing 3748clockwise if <a href='#SkPath_addCircle_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, and counterclockwise if <a href='#SkPath_addCircle_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>. 3749 3750Has no effect if <a href='#SkPath_addCircle_radius'>radius</a> is zero or negative. 3751 3752### Parameters 3753 3754<table> <tr> <td><a name='SkPath_addCircle_x'><code><strong>x</strong></code></a></td> 3755 <td>center of <a href='undocumented#Circle'>Circle</a></td> 3756 </tr> 3757 <tr> <td><a name='SkPath_addCircle_y'><code><strong>y</strong></code></a></td> 3758 <td>center of <a href='undocumented#Circle'>Circle</a></td> 3759 </tr> 3760 <tr> <td><a name='SkPath_addCircle_radius'><code><strong>radius</strong></code></a></td> 3761 <td>distance from center to edge</td> 3762 </tr> 3763 <tr> <td><a name='SkPath_addCircle_dir'><code><strong>dir</strong></code></a></td> 3764 <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='undocumented#Circle'>Circle</a></td> 3765 </tr> 3766</table> 3767 3768### Return Value 3769 3770reference to <a href='SkPath_Reference#Path'>Path</a> 3771 3772### Example 3773 3774<div><fiddle-embed name="bd5286cb9a5e5c32cd980f72b8f400fb"></fiddle-embed></div> 3775 3776### See Also 3777 3778<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawCircle'>drawCircle</a> <a href='#SkPath_Direction'>Direction</a> <a href='undocumented#Circle'>Circle</a> 3779 3780<a name='SkPath_addArc'></a> 3781 3782--- 3783 3784<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3785<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addArc'>addArc</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='undocumented#Oval'>oval</a>, <a href='undocumented#SkScalar'>SkScalar</a> startAngle, <a href='undocumented#SkScalar'>SkScalar</a> sweepAngle) 3786</pre> 3787 3788Appends <a href='undocumented#Arc'>arc</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, as the start of new <a href='SkPath_Overview#Contour'>contour</a>. <a href='undocumented#Arc'>Arc</a> added is part of ellipse 3789bounded by <a href='#SkPath_addArc_oval'>oval</a>, from <a href='#SkPath_addArc_startAngle'>startAngle</a> through <a href='#SkPath_addArc_sweepAngle'>sweepAngle</a>. Both <a href='#SkPath_addArc_startAngle'>startAngle</a> and 3790<a href='#SkPath_addArc_sweepAngle'>sweepAngle</a> are measured in degrees, where zero degrees is aligned with the 3791positive x-axis, and positive sweeps extends <a href='undocumented#Arc'>arc</a> clockwise. 3792 3793If <a href='#SkPath_addArc_sweepAngle'>sweepAngle</a> <= -360, or <a href='#SkPath_addArc_sweepAngle'>sweepAngle</a> >= 360; and <a href='#SkPath_addArc_startAngle'>startAngle</a> modulo 90 is nearly 3794zero, append <a href='#SkPath_addArc_oval'>oval</a> instead of <a href='undocumented#Arc'>arc</a>. Otherwise, <a href='#SkPath_addArc_sweepAngle'>sweepAngle</a> values are treated 3795modulo 360, and <a href='undocumented#Arc'>arc</a> may or may not draw depending on numeric rounding. 3796 3797### Parameters 3798 3799<table> <tr> <td><a name='SkPath_addArc_oval'><code><strong>oval</strong></code></a></td> 3800 <td>bounds of ellipse containing <a href='undocumented#Arc'>arc</a></td> 3801 </tr> 3802 <tr> <td><a name='SkPath_addArc_startAngle'><code><strong>startAngle</strong></code></a></td> 3803 <td>starting angle of <a href='undocumented#Arc'>arc</a> in degrees</td> 3804 </tr> 3805 <tr> <td><a name='SkPath_addArc_sweepAngle'><code><strong>sweepAngle</strong></code></a></td> 3806 <td>sweep, in degrees. Positive is clockwise; treated modulo 360</td> 3807 </tr> 3808</table> 3809 3810### Return Value 3811 3812reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3813 3814### Example 3815 3816<div><fiddle-embed name="9cf5122475624e4cf39f06c698f80b1a"><div>The middle row of the left and right columns draw differently from the entries 3817above and below because <a href='#SkPath_addArc_sweepAngle'>sweepAngle</a> is outside of the range of +/-360, 3818and <a href='#SkPath_addArc_startAngle'>startAngle</a> modulo 90 is not zero. 3819</div></fiddle-embed></div> 3820 3821### See Also 3822 3823<a href='undocumented#Arc'>Arc</a> <a href='#SkPath_arcTo'>arcTo</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawArc'>drawArc</a> 3824 3825<a name='SkPath_addRoundRect'></a> 3826 3827--- 3828 3829<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3830<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRoundRect'>addRoundRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>, <a href='undocumented#SkScalar'>SkScalar</a> rx, <a href='undocumented#SkScalar'>SkScalar</a> ry, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>) 3831</pre> 3832 3833Appends <a href='SkRRect_Reference#SkRRect'>SkRRect</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, creating a new closed <a href='SkPath_Overview#Contour'>contour</a>. <a href='SkRRect_Reference#SkRRect'>SkRRect</a> has bounds 3834equal to <a href='#SkPath_addRoundRect_rect'>rect</a>; each corner is 90 degrees of an ellipse with radii (<a href='#SkPath_addRoundRect_rx'>rx</a>, <a href='#SkPath_addRoundRect_ry'>ry</a>). If 3835<a href='#SkPath_addRoundRect_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, <a href='SkRRect_Reference#SkRRect'>SkRRect</a> starts at top-left of the lower-left corner and 3836winds clockwise. If <a href='#SkPath_addRoundRect_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <a href='SkRRect_Reference#SkRRect'>SkRRect</a> starts at the bottom-left 3837of the upper-left corner and winds counterclockwise. 3838 3839If either <a href='#SkPath_addRoundRect_rx'>rx</a> or <a href='#SkPath_addRoundRect_ry'>ry</a> is too large, <a href='#SkPath_addRoundRect_rx'>rx</a> and <a href='#SkPath_addRoundRect_ry'>ry</a> are scaled uniformly until the 3840corners fit. If <a href='#SkPath_addRoundRect_rx'>rx</a> or <a href='#SkPath_addRoundRect_ry'>ry</a> is less than or equal to zero, <a href='#SkPath_addRoundRect'>addRoundRect</a>() appends 3841<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPath_addRoundRect_rect'>rect</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>. 3842 3843After appending, <a href='SkPath_Reference#SkPath'>SkPath</a> may be empty, or may contain: <a href='SkRect_Reference#SkRect'>SkRect</a>, <a href='undocumented#Oval'>oval</a>, or <a href='SkRRect_Reference#SkRRect'>SkRRect</a>. 3844 3845### Parameters 3846 3847<table> <tr> <td><a name='SkPath_addRoundRect_rect'><code><strong>rect</strong></code></a></td> 3848 <td>bounds of <a href='SkRRect_Reference#SkRRect'>SkRRect</a></td> 3849 </tr> 3850 <tr> <td><a name='SkPath_addRoundRect_rx'><code><strong>rx</strong></code></a></td> 3851 <td>x-axis radius of rounded corners on the <a href='SkRRect_Reference#SkRRect'>SkRRect</a></td> 3852 </tr> 3853 <tr> <td><a name='SkPath_addRoundRect_ry'><code><strong>ry</strong></code></a></td> 3854 <td>y-axis radius of rounded corners on the <a href='SkRRect_Reference#SkRRect'>SkRRect</a></td> 3855 </tr> 3856 <tr> <td><a name='SkPath_addRoundRect_dir'><code><strong>dir</strong></code></a></td> 3857 <td><a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Direction'>Direction</a> to wind <a href='SkRRect_Reference#SkRRect'>SkRRect</a></td> 3858 </tr> 3859</table> 3860 3861### Return Value 3862 3863reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3864 3865### Example 3866 3867<div><fiddle-embed name="24736f685f265cf533f1700c042db353"><div>If either radius is zero, <a href='SkPath_Reference#Path'>path</a> contains <a href='SkRect_Reference#Rect'>Rect</a> and is drawn red. 3868If sides are only radii, <a href='SkPath_Reference#Path'>path</a> contains <a href='undocumented#Oval'>Oval</a> and is drawn blue. 3869All remaining <a href='SkPath_Reference#Path'>path</a> draws are convex, and are drawn in gray; no 3870<a href='SkPath_Reference#Path'>paths</a> constructed from <a href='#SkPath_addRoundRect'>addRoundRect</a> are concave, so none are 3871drawn in green. 3872</div></fiddle-embed></div> 3873 3874### See Also 3875 3876<a href='#SkPath_addRRect'>addRRect</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawRoundRect'>drawRoundRect</a> 3877 3878<a name='SkPath_addRoundRect_2'></a> 3879 3880--- 3881 3882<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3883<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRoundRect'>addRoundRect</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='SkRect_Reference#Rect'>rect</a>, const <a href='undocumented#SkScalar'>SkScalar</a> radii[], <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>) 3884</pre> 3885 3886Appends <a href='#RRect'>Round_Rect</a> to <a href='SkPath_Reference#Path'>Path</a>, creating a new closed <a href='SkPath_Overview#Contour'>Contour</a>. <a href='#RRect'>Round_Rect</a> has bounds 3887equal to <a href='#SkPath_addRoundRect_2_rect'>rect</a>; each corner is 90 degrees of an ellipse with <a href='#SkPath_addRoundRect_2_radii'>radii</a> from the 3888array. 3889 3890| <a href='#SkPath_addRoundRect_2_radii'>radii</a> index | location | 3891| --- | --- | 3892| 0 | x-axis radius of top-left corner | 3893| 1 | y-axis radius of top-left corner | 3894| 2 | x-axis radius of top-right corner | 3895| 3 | y-axis radius of top-right corner | 3896| 4 | x-axis radius of bottom-right corner | 3897| 5 | y-axis radius of bottom-right corner | 3898| 6 | x-axis radius of bottom-left corner | 3899| 7 | y-axis radius of bottom-left corner | 3900 3901If <a href='#SkPath_addRoundRect_2_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, <a href='#RRect'>Round_Rect</a> starts at top-left of the lower-left corner 3902and winds clockwise. If <a href='#SkPath_addRoundRect_2_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <a href='#RRect'>Round_Rect</a> starts at the 3903bottom-left of the upper-left corner and winds counterclockwise. 3904 3905If both <a href='#SkPath_addRoundRect_2_radii'>radii</a> on any side of <a href='#SkPath_addRoundRect_2_rect'>rect</a> exceed its length, all <a href='#SkPath_addRoundRect_2_radii'>radii</a> are scaled 3906uniformly until the corners fit. If either radius of a corner is less than or 3907equal to zero, both are treated as zero. 3908 3909After appending, <a href='SkPath_Reference#Path'>Path</a> may be empty, or may contain: <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Oval'>Oval</a>, or <a href='#RRect'>Round_Rect</a>. 3910 3911### Parameters 3912 3913<table> <tr> <td><a name='SkPath_addRoundRect_2_rect'><code><strong>rect</strong></code></a></td> 3914 <td>bounds of <a href='#RRect'>Round_Rect</a></td> 3915 </tr> 3916 <tr> <td><a name='SkPath_addRoundRect_2_radii'><code><strong>radii</strong></code></a></td> 3917 <td>array of 8 <a href='undocumented#SkScalar'>SkScalar</a> values, a radius pair for each corner</td> 3918 </tr> 3919 <tr> <td><a name='SkPath_addRoundRect_2_dir'><code><strong>dir</strong></code></a></td> 3920 <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='#RRect'>Round_Rect</a></td> 3921 </tr> 3922</table> 3923 3924### Return Value 3925 3926reference to <a href='SkPath_Reference#Path'>Path</a> 3927 3928### Example 3929 3930<div><fiddle-embed name="c43d70606b4ee464d2befbcf448c5e73"></fiddle-embed></div> 3931 3932### See Also 3933 3934<a href='#SkPath_addRRect'>addRRect</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawRoundRect'>drawRoundRect</a> 3935 3936<a name='SkPath_addRRect'></a> 3937 3938--- 3939 3940<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3941<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRRect'>addRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, <a href='#SkPath_Direction'>Direction</a> dir = <a href='#SkPath_kCW_Direction'>kCW_Direction</a>) 3942</pre> 3943 3944Adds <a href='#SkPath_addRRect_rrect'>rrect</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, creating a new closed <a href='SkPath_Overview#Contour'>contour</a>. If 3945<a href='#SkPath_addRRect_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, <a href='#SkPath_addRRect_rrect'>rrect</a> starts at top-left of the lower-left corner and 3946winds clockwise. If <a href='#SkPath_addRRect_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <a href='#SkPath_addRRect_rrect'>rrect</a> starts at the bottom-left 3947of the upper-left corner and winds counterclockwise. 3948 3949After appending, <a href='SkPath_Reference#SkPath'>SkPath</a> may be empty, or may contain: <a href='SkRect_Reference#SkRect'>SkRect</a>, <a href='undocumented#Oval'>oval</a>, or <a href='SkRRect_Reference#SkRRect'>SkRRect</a>. 3950 3951### Parameters 3952 3953<table> <tr> <td><a name='SkPath_addRRect_rrect'><code><strong>rrect</strong></code></a></td> 3954 <td>bounds and radii of rounded rectangle</td> 3955 </tr> 3956 <tr> <td><a name='SkPath_addRRect_dir'><code><strong>dir</strong></code></a></td> 3957 <td><a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Direction'>Direction</a> to wind <a href='SkRRect_Reference#SkRRect'>SkRRect</a></td> 3958 </tr> 3959</table> 3960 3961### Return Value 3962 3963reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 3964 3965### Example 3966 3967<div><fiddle-embed name="d9ecd58081b5bc77a157636fcb345dc6"></fiddle-embed></div> 3968 3969### See Also 3970 3971<a href='#SkPath_addRoundRect'>addRoundRect</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawRRect'>drawRRect</a> 3972 3973<a name='SkPath_addRRect_2'></a> 3974 3975--- 3976 3977<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 3978<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addRRect'>addRRect</a>(const <a href='SkRRect_Reference#SkRRect'>SkRRect</a>& rrect, <a href='#SkPath_Direction'>Direction</a> dir, unsigned start) 3979</pre> 3980 3981Adds <a href='#SkPath_addRRect_2_rrect'>rrect</a> to <a href='SkPath_Reference#Path'>Path</a>, creating a new closed <a href='SkPath_Overview#Contour'>Contour</a>. If <a href='#SkPath_addRRect_2_dir'>dir</a> is <a href='#SkPath_kCW_Direction'>kCW_Direction</a>, <a href='#SkPath_addRRect_2_rrect'>rrect</a> 3982winds clockwise; if <a href='#SkPath_addRRect_2_dir'>dir</a> is <a href='#SkPath_kCCW_Direction'>kCCW_Direction</a>, <a href='#SkPath_addRRect_2_rrect'>rrect</a> winds counterclockwise. 3983<a href='#SkPath_addRRect_2_start'>start</a> determines the first <a href='SkPoint_Reference#Point'>point</a> of <a href='#SkPath_addRRect_2_rrect'>rrect</a> to add. 3984 3985| <a href='#SkPath_addRRect_2_start'>start</a> | location | 3986| --- | --- | 3987| 0 | right of top-left corner | 3988| 1 | left of top-right corner | 3989| 2 | bottom of top-right corner | 3990| 3 | top of bottom-right corner | 3991| 4 | left of bottom-right corner | 3992| 5 | right of bottom-left corner | 3993| 6 | top of bottom-left corner | 3994| 7 | bottom of top-left corner | 3995 3996After appending, <a href='SkPath_Reference#Path'>Path</a> may be empty, or may contain: <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Oval'>Oval</a>, or <a href='#RRect'>Round_Rect</a>. 3997 3998### Parameters 3999 4000<table> <tr> <td><a name='SkPath_addRRect_2_rrect'><code><strong>rrect</strong></code></a></td> 4001 <td>bounds and radii of rounded rectangle</td> 4002 </tr> 4003 <tr> <td><a name='SkPath_addRRect_2_dir'><code><strong>dir</strong></code></a></td> 4004 <td><a href='#SkPath_Direction'>Direction</a> to wind <a href='#RRect'>Round_Rect</a></td> 4005 </tr> 4006 <tr> <td><a name='SkPath_addRRect_2_start'><code><strong>start</strong></code></a></td> 4007 <td>index of initial <a href='SkPoint_Reference#Point'>point</a> of <a href='#RRect'>Round_Rect</a></td> 4008 </tr> 4009</table> 4010 4011### Return Value 4012 4013reference to <a href='SkPath_Reference#Path'>Path</a> 4014 4015### Example 4016 4017<div><fiddle-embed name="888edd4c4a91ca62ceb01bce8ab675b2"></fiddle-embed></div> 4018 4019### See Also 4020 4021<a href='#SkPath_addRoundRect'>addRoundRect</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawRRect'>drawRRect</a> 4022 4023<a name='SkPath_addPoly'></a> 4024 4025--- 4026 4027<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4028<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPoly'>addPoly</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[], int count, bool close) 4029</pre> 4030 4031Adds <a href='SkPath_Overview#Contour'>contour</a> created from <a href='undocumented#Line'>line</a> array, adding (<a href='#SkPath_addPoly_count'>count</a> - 1) <a href='undocumented#Line'>line</a> segments. 4032<a href='SkPath_Overview#Contour'>Contour</a> added starts at <a href='#SkPath_addPoly_pts'>pts</a>[0], then adds a <a href='undocumented#Line'>line</a> for every additional <a href='SkPoint_Reference#SkPoint'>SkPoint</a> 4033in <a href='#SkPath_addPoly_pts'>pts</a> array. If <a href='#SkPath_addPoly_close'>close</a> is true, appends <a href='#SkPath_kClose_Verb'>kClose_Verb</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, connecting 4034<a href='#SkPath_addPoly_pts'>pts</a>[<a href='#SkPath_addPoly_count'>count</a> - 1] and <a href='#SkPath_addPoly_pts'>pts</a>[0]. 4035 4036If <a href='#SkPath_addPoly_count'>count</a> is zero, append <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='SkPath_Reference#Path'>path</a>. 4037Has no effect if <a href='#SkPath_addPoly_count'>count</a> is less than one. 4038 4039### Parameters 4040 4041<table> <tr> <td><a name='SkPath_addPoly_pts'><code><strong>pts</strong></code></a></td> 4042 <td>array of <a href='undocumented#Line'>line</a> sharing end and start <a href='SkPoint_Reference#SkPoint'>SkPoint</a></td> 4043 </tr> 4044 <tr> <td><a name='SkPath_addPoly_count'><code><strong>count</strong></code></a></td> 4045 <td>length of <a href='SkPath_Reference#Point_Array'>SkPoint array</a></td> 4046 </tr> 4047 <tr> <td><a name='SkPath_addPoly_close'><code><strong>close</strong></code></a></td> 4048 <td>true to add <a href='undocumented#Line'>line</a> connecting <a href='SkPath_Overview#Contour'>contour</a> end and start</td> 4049 </tr> 4050</table> 4051 4052### Return Value 4053 4054reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 4055 4056### Example 4057 4058<div><fiddle-embed name="182b3999772f330f3b0b891b492634ae"></fiddle-embed></div> 4059 4060### See Also 4061 4062<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawPoints'>drawPoints</a> 4063 4064<a name='SkPath_addPoly_2'></a> 4065 4066--- 4067 4068<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4069<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPoly'>addPoly</a>(const std::initializer_list<<a href='SkPoint_Reference#SkPoint'>SkPoint</a>>& list, bool close) 4070</pre> 4071 4072Adds <a href='SkPath_Overview#Contour'>contour</a> created from <a href='#SkPath_addPoly_2_list'>list</a>. <a href='SkPath_Overview#Contour'>Contour</a> added starts at <a href='#SkPath_addPoly_2_list'>list</a>[0], then adds a <a href='undocumented#Line'>line</a> 4073for every additional <a href='SkPoint_Reference#SkPoint'>SkPoint</a> in <a href='#SkPath_addPoly_2_list'>list</a>. If <a href='#SkPath_addPoly_2_close'>close</a> is true, appends <a href='#SkPath_kClose_Verb'>kClose_Verb</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, 4074connecting last and first <a href='SkPoint_Reference#SkPoint'>SkPoint</a> in <a href='#SkPath_addPoly_2_list'>list</a>. 4075 4076If <a href='#SkPath_addPoly_2_list'>list</a> is empty, append <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to <a href='SkPath_Reference#Path'>path</a>. 4077 4078### Parameters 4079 4080<table> <tr> <td><a name='SkPath_addPoly_2_list'><code><strong>list</strong></code></a></td> 4081 <td>array of <a href='SkPoint_Reference#SkPoint'>SkPoint</a></td> 4082 </tr> 4083 <tr> <td><a name='SkPath_addPoly_2_close'><code><strong>close</strong></code></a></td> 4084 <td>true to add <a href='undocumented#Line'>line</a> connecting <a href='SkPath_Overview#Contour'>contour</a> end and start</td> 4085 </tr> 4086</table> 4087 4088### Return Value 4089 4090reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 4091 4092### Example 4093 4094<div><fiddle-embed name="1a6b69acad5ceafede3c5984ec6634cb"></fiddle-embed></div> 4095 4096### See Also 4097 4098<a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawPoints'>drawPoints</a> 4099 4100<a name='SkPath_AddPathMode'></a> 4101 4102--- 4103 4104<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 4105 enum <a href='#SkPath_AddPathMode'>AddPathMode</a> { 4106 <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>, 4107 <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>, 4108 }; 4109</pre> 4110 4111<a href='#SkPath_AddPathMode'>AddPathMode</a> chooses how <a href='#SkPath_addPath'>addPath</a> appends. Adding one <a href='SkPath_Reference#Path'>Path</a> to another can extend 4112the last <a href='SkPath_Overview#Contour'>Contour</a> or start a new <a href='SkPath_Overview#Contour'>Contour</a>. 4113 4114### Constants 4115 4116<table style='border-collapse: collapse; width: 62.5em'> 4117 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th> 4118<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th> 4119<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr> 4120 <tr style='background-color: #f0f0f0; '> 4121 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kAppend_AddPathMode'><code>SkPath::kAppend_AddPathMode</code></a></td> 4122 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # appended to destination unaltered ##</td> 4123 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 4124<a href='SkPath_Reference#Path'>Path</a> <a href='SkPath_Reference#Verb'>Verbs</a>, <a href='SkPoint_Reference#Point'>Points</a>, and <a href='#Path_Conic_Weight'>Conic_Weights</a> are appended to destination unaltered. 4125Since <a href='SkPath_Reference#Path'>Path</a> <a href='#Path_Verb_Array'>Verb_Array</a> begins with <a href='#SkPath_kMove_Verb'>kMove_Verb</a> if src is not empty, this 4126starts a new <a href='SkPath_Overview#Contour'>Contour</a>. 4127</td> 4128 </tr> 4129 <tr> 4130 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kExtend_AddPathMode'><code>SkPath::kExtend_AddPathMode</code></a></td> 4131 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>#Line # add line if prior Contour is not closed ##</td> 4132 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 4133If destination is closed or empty, start a new <a href='SkPath_Overview#Contour'>Contour</a>. If destination 4134is not empty, add <a href='undocumented#Line'>Line</a> from <a href='#Path_Last_Point'>Last_Point</a> to added <a href='SkPath_Reference#Path'>Path</a> first <a href='SkPoint_Reference#Point'>Point</a>. Skip added 4135<a href='SkPath_Reference#Path'>Path</a> initial <a href='#SkPath_kMove_Verb'>kMove_Verb</a>, then append remaining <a href='SkPath_Reference#Verb'>Verbs</a>, <a href='SkPoint_Reference#Point'>Points</a>, and <a href='#Path_Conic_Weight'>Conic_Weights</a>. 4136</td> 4137 </tr> 4138</table> 4139 4140### Example 4141 4142<div><fiddle-embed name="801b02e74c64aafdb734f2e5cf3e5ab0"><div>test is built from <a href='SkPath_Reference#Path'>path</a>, open on the top row, and closed on the bottom row. 4143The left column uses <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>; the right uses <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>. 4144The top right composition is made up of one <a href='SkPath_Overview#Contour'>contour</a>; the other three have two. 4145</div></fiddle-embed></div> 4146 4147### See Also 4148 4149<a href='#SkPath_addPath'>addPath</a> <a href='#SkPath_reverseAddPath'>reverseAddPath</a> 4150 4151<a name='SkPath_addPath'></a> 4152 4153--- 4154 4155<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4156<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPath'>addPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy, <a href='#SkPath_AddPathMode'>AddPathMode</a> mode = <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>) 4157</pre> 4158 4159Appends <a href='#SkPath_addPath_src'>src</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, offset by (<a href='#SkPath_addPath_dx'>dx</a>, <a href='#SkPath_addPath_dy'>dy</a>). 4160 4161If <a href='#SkPath_addPath_mode'>mode</a> is <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>, <a href='#SkPath_addPath_src'>src</a> <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a> are 4162added unaltered. If <a href='#SkPath_addPath_mode'>mode</a> is <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>, add <a href='undocumented#Line'>line</a> before appending 4163<a href='SkPath_Reference#Verb'>verbs</a>, <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a>. 4164 4165### Parameters 4166 4167<table> <tr> <td><a name='SkPath_addPath_src'><code><strong>src</strong></code></a></td> 4168 <td><a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPath_Reference#Verb'>verbs</a>, <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a> to add</td> 4169 </tr> 4170 <tr> <td><a name='SkPath_addPath_dx'><code><strong>dx</strong></code></a></td> 4171 <td>offset added to <a href='#SkPath_addPath_src'>src</a> <a href='SkPath_Reference#Point_Array'>SkPoint array</a> x-axis coordinates</td> 4172 </tr> 4173 <tr> <td><a name='SkPath_addPath_dy'><code><strong>dy</strong></code></a></td> 4174 <td>offset added to <a href='#SkPath_addPath_src'>src</a> <a href='SkPath_Reference#Point_Array'>SkPoint array</a> y-axis coordinates</td> 4175 </tr> 4176 <tr> <td><a name='SkPath_addPath_mode'><code><strong>mode</strong></code></a></td> 4177 <td><a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a> or <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a></td> 4178 </tr> 4179</table> 4180 4181### Return Value 4182 4183reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 4184 4185### Example 4186 4187<div><fiddle-embed name="c416bddfe286628974e1c7f0fd66f3f4"></fiddle-embed></div> 4188 4189### See Also 4190 4191<a href='#SkPath_AddPathMode'>AddPathMode</a> <a href='#SkPath_offset'>offset</a> <a href='#SkPath_reverseAddPath'>reverseAddPath</a> 4192 4193<a name='SkPath_addPath_2'></a> 4194 4195--- 4196 4197<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4198<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPath'>addPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='#SkPath_AddPathMode'>AddPathMode</a> mode = <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>) 4199</pre> 4200 4201Appends <a href='#SkPath_addPath_2_src'>src</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>. 4202 4203If <a href='#SkPath_addPath_2_mode'>mode</a> is <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>, <a href='#SkPath_addPath_2_src'>src</a> <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a> are 4204added unaltered. If <a href='#SkPath_addPath_2_mode'>mode</a> is <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>, add <a href='undocumented#Line'>line</a> before appending 4205<a href='SkPath_Reference#Verb'>verbs</a>, <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a>. 4206 4207### Parameters 4208 4209<table> <tr> <td><a name='SkPath_addPath_2_src'><code><strong>src</strong></code></a></td> 4210 <td><a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPath_Reference#Verb'>verbs</a>, <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a> to add</td> 4211 </tr> 4212 <tr> <td><a name='SkPath_addPath_2_mode'><code><strong>mode</strong></code></a></td> 4213 <td><a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a> or <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a></td> 4214 </tr> 4215</table> 4216 4217### Return Value 4218 4219reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 4220 4221### Example 4222 4223<div><fiddle-embed name="84b2d1c0fc29f1b35e855b6fc6672f9e"></fiddle-embed></div> 4224 4225### See Also 4226 4227<a href='#SkPath_AddPathMode'>AddPathMode</a> <a href='#SkPath_reverseAddPath'>reverseAddPath</a> 4228 4229<a name='SkPath_addPath_3'></a> 4230 4231--- 4232 4233<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4234<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_addPath'>addPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>& <a href='SkMatrix_Reference#Matrix'>matrix</a>, <a href='#SkPath_AddPathMode'>AddPathMode</a> mode = <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>) 4235</pre> 4236 4237Appends <a href='#SkPath_addPath_3_src'>src</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, transformed by <a href='#SkPath_addPath_3_matrix'>matrix</a>. Transformed <a href='undocumented#Curve'>curves</a> may have different 4238<a href='SkPath_Reference#Verb'>verbs</a>, <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a>. 4239 4240If <a href='#SkPath_addPath_3_mode'>mode</a> is <a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a>, <a href='#SkPath_addPath_3_src'>src</a> <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a> are 4241added unaltered. If <a href='#SkPath_addPath_3_mode'>mode</a> is <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a>, add <a href='undocumented#Line'>line</a> before appending 4242<a href='SkPath_Reference#Verb'>verbs</a>, <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a>. 4243 4244### Parameters 4245 4246<table> <tr> <td><a name='SkPath_addPath_3_src'><code><strong>src</strong></code></a></td> 4247 <td><a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPath_Reference#Verb'>verbs</a>, <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a> to add</td> 4248 </tr> 4249 <tr> <td><a name='SkPath_addPath_3_matrix'><code><strong>matrix</strong></code></a></td> 4250 <td>transform applied to <a href='#SkPath_addPath_3_src'>src</a></td> 4251 </tr> 4252 <tr> <td><a name='SkPath_addPath_3_mode'><code><strong>mode</strong></code></a></td> 4253 <td><a href='#SkPath_kAppend_AddPathMode'>kAppend_AddPathMode</a> or <a href='#SkPath_kExtend_AddPathMode'>kExtend_AddPathMode</a></td> 4254 </tr> 4255</table> 4256 4257### Return Value 4258 4259reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 4260 4261### Example 4262 4263<div><fiddle-embed name="3a90a91030f7289d5df0671d342dbbad"></fiddle-embed></div> 4264 4265### See Also 4266 4267<a href='#SkPath_AddPathMode'>AddPathMode</a> <a href='#SkPath_transform'>transform</a> <a href='#SkPath_offset'>offset</a> <a href='#SkPath_reverseAddPath'>reverseAddPath</a> 4268 4269<a name='SkPath_reverseAddPath'></a> 4270 4271--- 4272 4273<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4274<a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='#SkPath_reverseAddPath'>reverseAddPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src) 4275</pre> 4276 4277Appends <a href='#SkPath_reverseAddPath_src'>src</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>, from back to front. 4278Reversed <a href='#SkPath_reverseAddPath_src'>src</a> always appends a new <a href='SkPath_Overview#Contour'>contour</a> to <a href='SkPath_Reference#SkPath'>SkPath</a>. 4279 4280### Parameters 4281 4282<table> <tr> <td><a name='SkPath_reverseAddPath_src'><code><strong>src</strong></code></a></td> 4283 <td><a href='SkPath_Reference#SkPath'>SkPath</a> <a href='SkPath_Reference#Verb'>verbs</a>, <a href='SkPoint_Reference#SkPoint'>SkPoint</a>, and <a href='SkPath_Reference#Conic_Weight'>conic weights</a> to add</td> 4284 </tr> 4285</table> 4286 4287### Return Value 4288 4289reference to <a href='SkPath_Reference#SkPath'>SkPath</a> 4290 4291### Example 4292 4293<div><fiddle-embed name="5e8513f073db09acde3ff616f6426e3d"></fiddle-embed></div> 4294 4295### See Also 4296 4297<a href='#SkPath_AddPathMode'>AddPathMode</a> <a href='#SkPath_transform'>transform</a> <a href='#SkPath_offset'>offset</a> <a href='#SkPath_addPath'>addPath</a> 4298 4299<a name='SkPath_offset'></a> 4300 4301--- 4302 4303<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4304void offset(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst)const 4305</pre> 4306 4307Offsets <a href='SkPath_Reference#Point_Array'>SkPoint array</a> by (<a href='#SkPath_offset_dx'>dx</a>, <a href='#SkPath_offset_dy'>dy</a>). Offset <a href='SkPath_Reference#SkPath'>SkPath</a> replaces <a href='#SkPath_offset_dst'>dst</a>. 4308If <a href='#SkPath_offset_dst'>dst</a> is nullptr, <a href='SkPath_Reference#SkPath'>SkPath</a> is replaced by offset <a href='undocumented#Data'>data</a>. 4309 4310### Parameters 4311 4312<table> <tr> <td><a name='SkPath_offset_dx'><code><strong>dx</strong></code></a></td> 4313 <td>offset added to <a href='SkPath_Reference#Point_Array'>SkPoint array</a> x-axis coordinates</td> 4314 </tr> 4315 <tr> <td><a name='SkPath_offset_dy'><code><strong>dy</strong></code></a></td> 4316 <td>offset added to <a href='SkPath_Reference#Point_Array'>SkPoint array</a> y-axis coordinates</td> 4317 </tr> 4318 <tr> <td><a name='SkPath_offset_dst'><code><strong>dst</strong></code></a></td> 4319 <td>overwritten, translated copy of <a href='SkPath_Reference#SkPath'>SkPath</a>; may be nullptr</td> 4320 </tr> 4321</table> 4322 4323### Example 4324 4325<div><fiddle-embed name="1d1892196ba5bda257df4f3351abd084"></fiddle-embed></div> 4326 4327### See Also 4328 4329<a href='#SkPath_addPath'>addPath</a> <a href='#SkPath_transform'>transform</a> 4330 4331<a name='Transform'></a> 4332 4333<a name='SkPath_offset_2'></a> 4334 4335--- 4336 4337<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4338void offset(<a href='undocumented#SkScalar'>SkScalar</a> dx, <a href='undocumented#SkScalar'>SkScalar</a> dy) 4339</pre> 4340 4341Offsets <a href='SkPath_Reference#Point_Array'>SkPoint array</a> by (<a href='#SkPath_offset_2_dx'>dx</a>, <a href='#SkPath_offset_2_dy'>dy</a>). <a href='SkPath_Reference#SkPath'>SkPath</a> is replaced by offset <a href='undocumented#Data'>data</a>. 4342 4343### Parameters 4344 4345<table> <tr> <td><a name='SkPath_offset_2_dx'><code><strong>dx</strong></code></a></td> 4346 <td>offset added to <a href='SkPath_Reference#Point_Array'>SkPoint array</a> x-axis coordinates</td> 4347 </tr> 4348 <tr> <td><a name='SkPath_offset_2_dy'><code><strong>dy</strong></code></a></td> 4349 <td>offset added to <a href='SkPath_Reference#Point_Array'>SkPoint array</a> y-axis coordinates</td> 4350 </tr> 4351</table> 4352 4353### Example 4354 4355<div><fiddle-embed name="5188d77585715db30bef228f2dfbcccd"></fiddle-embed></div> 4356 4357### See Also 4358 4359<a href='#SkPath_addPath'>addPath</a> <a href='#SkPath_transform'>transform</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_translate'>translate()</a> 4360 4361<a name='SkPath_transform'></a> 4362 4363--- 4364 4365<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4366void transform(const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>& <a href='SkMatrix_Reference#Matrix'>matrix</a>, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst)const 4367</pre> 4368 4369Transforms <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and weight by <a href='#SkPath_transform_matrix'>matrix</a>. 4370transform may change <a href='SkPath_Reference#Verb'>verbs</a> and increase their number. 4371Transformed <a href='SkPath_Reference#SkPath'>SkPath</a> replaces <a href='#SkPath_transform_dst'>dst</a>; if <a href='#SkPath_transform_dst'>dst</a> is nullptr, original <a href='undocumented#Data'>data</a> 4372is replaced. 4373 4374### Parameters 4375 4376<table> <tr> <td><a name='SkPath_transform_matrix'><code><strong>matrix</strong></code></a></td> 4377 <td><a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a> to apply to <a href='SkPath_Reference#SkPath'>SkPath</a></td> 4378 </tr> 4379 <tr> <td><a name='SkPath_transform_dst'><code><strong>dst</strong></code></a></td> 4380 <td>overwritten, transformed copy of <a href='SkPath_Reference#SkPath'>SkPath</a>; may be nullptr</td> 4381 </tr> 4382</table> 4383 4384### Example 4385 4386<div><fiddle-embed name="99761add116ce3b0730557224c1b0105"></fiddle-embed></div> 4387 4388### See Also 4389 4390<a href='#SkPath_addPath'>addPath</a> <a href='#SkPath_offset'>offset</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_concat'>concat()</a> <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a> 4391 4392<a name='SkPath_transform_2'></a> 4393 4394--- 4395 4396<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4397void transform(const <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a>& <a href='SkMatrix_Reference#Matrix'>matrix</a>) 4398</pre> 4399 4400Transforms <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and weight by <a href='#SkPath_transform_2_matrix'>matrix</a>. 4401transform may change <a href='SkPath_Reference#Verb'>verbs</a> and increase their number. 4402<a href='SkPath_Reference#SkPath'>SkPath</a> is replaced by transformed <a href='undocumented#Data'>data</a>. 4403 4404### Parameters 4405 4406<table> <tr> <td><a name='SkPath_transform_2_matrix'><code><strong>matrix</strong></code></a></td> 4407 <td><a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a> to apply to <a href='SkPath_Reference#SkPath'>SkPath</a></td> 4408 </tr> 4409</table> 4410 4411### Example 4412 4413<div><fiddle-embed name="c40979a3b92a30cfb7bae36abcc1d805"></fiddle-embed></div> 4414 4415### See Also 4416 4417<a href='#SkPath_addPath'>addPath</a> <a href='#SkPath_offset'>offset</a> <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_concat'>concat()</a> <a href='SkMatrix_Reference#SkMatrix'>SkMatrix</a> 4418 4419<a name='Last_Point'></a> 4420 4421<a href='SkPath_Reference#Path'>Path</a> is defined cumulatively, often by adding a segment to the end of last 4422<a href='SkPath_Overview#Contour'>Contour</a>. <a href='#Path_Last_Point'>Last_Point</a> of <a href='SkPath_Overview#Contour'>Contour</a> is shared as first <a href='SkPoint_Reference#Point'>Point</a> of added <a href='undocumented#Line'>Line</a> or <a href='undocumented#Curve'>Curve</a>. 4423<a href='#Path_Last_Point'>Last_Point</a> can be read and written directly with <a href='#SkPath_getLastPt'>getLastPt</a> and <a href='#SkPath_setLastPt'>setLastPt</a>. 4424 4425<a name='SkPath_getLastPt'></a> 4426 4427--- 4428 4429<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4430bool <a href='#SkPath_getLastPt'>getLastPt</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a>* lastPt)const 4431</pre> 4432 4433Returns <a href='#Last_Point'>last point</a> on <a href='SkPath_Reference#SkPath'>SkPath</a> in <a href='#SkPath_getLastPt_lastPt'>lastPt</a>. Returns false if <a href='SkPath_Reference#Point_Array'>SkPoint array</a> is empty, 4434storing (0, 0) if <a href='#SkPath_getLastPt_lastPt'>lastPt</a> is not nullptr. 4435 4436### Parameters 4437 4438<table> <tr> <td><a name='SkPath_getLastPt_lastPt'><code><strong>lastPt</strong></code></a></td> 4439 <td>storage for final <a href='SkPoint_Reference#SkPoint'>SkPoint</a> in <a href='SkPath_Reference#Point_Array'>SkPoint array</a>; may be nullptr</td> 4440 </tr> 4441</table> 4442 4443### Return Value 4444 4445true if <a href='SkPath_Reference#Point_Array'>SkPoint array</a> contains one or more <a href='SkPoint_Reference#SkPoint'>SkPoint</a> 4446 4447### Example 4448 4449<div><fiddle-embed name="df8160dd7ac8aa4b40fce7286fe49952"> 4450 4451#### Example Output 4452 4453~~~~ 4454last point: 35.2786, 52.9772 4455~~~~ 4456 4457</fiddle-embed></div> 4458 4459### See Also 4460 4461<a href='#SkPath_setLastPt'>setLastPt</a> 4462 4463<a name='SkPath_setLastPt'></a> 4464 4465--- 4466 4467<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4468void <a href='#SkPath_setLastPt'>setLastPt</a>(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y) 4469</pre> 4470 4471Sets <a href='#Last_Point'>last point</a> to (<a href='#SkPath_setLastPt_x'>x</a>, <a href='#SkPath_setLastPt_y'>y</a>). If <a href='SkPath_Reference#Point_Array'>SkPoint array</a> is empty, append <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to 4472<a href='#Verb_Array'>verb array</a> and append (<a href='#SkPath_setLastPt_x'>x</a>, <a href='#SkPath_setLastPt_y'>y</a>) to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 4473 4474### Parameters 4475 4476<table> <tr> <td><a name='SkPath_setLastPt_x'><code><strong>x</strong></code></a></td> 4477 <td>set x-axis value of <a href='#Last_Point'>last point</a></td> 4478 </tr> 4479 <tr> <td><a name='SkPath_setLastPt_y'><code><strong>y</strong></code></a></td> 4480 <td>set y-axis value of <a href='#Last_Point'>last point</a></td> 4481 </tr> 4482</table> 4483 4484### Example 4485 4486<div><fiddle-embed name="542c5afaea5f57baa11d0561dd402e18"></fiddle-embed></div> 4487 4488### See Also 4489 4490<a href='#SkPath_getLastPt'>getLastPt</a> 4491 4492<a name='SkPath_setLastPt_2'></a> 4493 4494--- 4495 4496<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4497void <a href='#SkPath_setLastPt'>setLastPt</a>(const <a href='SkPoint_Reference#SkPoint'>SkPoint</a>& p) 4498</pre> 4499 4500Sets the <a href='#Last_Point'>last point</a> on the <a href='SkPath_Reference#Path'>path</a>. If <a href='SkPath_Reference#Point_Array'>SkPoint array</a> is empty, append <a href='#SkPath_kMove_Verb'>kMove_Verb</a> to 4501<a href='#Verb_Array'>verb array</a> and append <a href='#SkPath_setLastPt_2_p'>p</a> to <a href='SkPath_Reference#Point_Array'>SkPoint array</a>. 4502 4503### Parameters 4504 4505<table> <tr> <td><a name='SkPath_setLastPt_2_p'><code><strong>p</strong></code></a></td> 4506 <td>set value of <a href='#Last_Point'>last point</a></td> 4507 </tr> 4508</table> 4509 4510### Example 4511 4512<div><fiddle-embed name="6fa5e8f9513b3225e106778592e27e94"></fiddle-embed></div> 4513 4514### See Also 4515 4516<a href='#SkPath_getLastPt'>getLastPt</a> 4517 4518<a name='SkPath_SegmentMask'></a> 4519 4520--- 4521 4522<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 4523 enum <a href='#SkPath_SegmentMask'>SegmentMask</a> { 4524 <a href='#SkPath_kLine_SegmentMask'>kLine_SegmentMask</a> = 1 << 0, 4525 <a href='#SkPath_kQuad_SegmentMask'>kQuad_SegmentMask</a> = 1 << 1, 4526 <a href='#SkPath_kConic_SegmentMask'>kConic_SegmentMask</a> = 1 << 2, 4527 <a href='#SkPath_kCubic_SegmentMask'>kCubic_SegmentMask</a> = 1 << 3, 4528 }; 4529</pre> 4530 4531<a href='#SkPath_SegmentMask'>SegmentMask</a> constants correspond to each drawing <a href='#SkPath_Verb'>Verb</a> type in <a href='SkPath_Reference#Path'>Path</a>; for 4532instance, if <a href='SkPath_Reference#Path'>Path</a> only contains <a href='undocumented#Line'>Lines</a>, only the <a href='#SkPath_kLine_SegmentMask'>kLine_SegmentMask</a> bit is set. 4533 4534### Constants 4535 4536<table style='border-collapse: collapse; width: 62.5em'> 4537 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th> 4538<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th> 4539<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr> 4540 <tr style='background-color: #f0f0f0; '> 4541 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kLine_SegmentMask'><code>SkPath::kLine_SegmentMask</code></a></td> 4542 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td> 4543 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 4544Set if <a href='#Path_Verb_Array'>Verb_Array</a> contains <a href='#SkPath_kLine_Verb'>kLine_Verb</a>. 4545</td> 4546 </tr> 4547 <tr> 4548 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kQuad_SegmentMask'><code>SkPath::kQuad_SegmentMask</code></a></td> 4549 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td> 4550 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 4551Set if <a href='#Path_Verb_Array'>Verb_Array</a> contains <a href='#SkPath_kQuad_Verb'>kQuad_Verb</a>. Note that <a href='#SkPath_conicTo'>conicTo</a> may add a <a href='SkPath_Reference#Quad'>Quad</a>. 4552</td> 4553 </tr> 4554 <tr style='background-color: #f0f0f0; '> 4555 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kConic_SegmentMask'><code>SkPath::kConic_SegmentMask</code></a></td> 4556 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>4</td> 4557 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 4558Set if <a href='#Path_Verb_Array'>Verb_Array</a> contains <a href='#SkPath_kConic_Verb'>kConic_Verb</a>. 4559</td> 4560 </tr> 4561 <tr> 4562 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPath_kCubic_SegmentMask'><code>SkPath::kCubic_SegmentMask</code></a></td> 4563 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>8</td> 4564 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '> 4565Set if <a href='#Path_Verb_Array'>Verb_Array</a> contains <a href='#SkPath_kCubic_Verb'>kCubic_Verb</a>. 4566</td> 4567 </tr> 4568</table> 4569 4570### Example 4571 4572<div><fiddle-embed name="a61e5758574e28190ec4ed8c4ae7e7fa"><div>When <a href='#SkPath_conicTo'>conicTo</a> has a weight of one, <a href='SkPath_Reference#Quad'>Quad</a> is added to <a href='SkPath_Reference#Path'>Path</a>. 4573</div> 4574 4575#### Example Output 4576 4577~~~~ 4578Path kConic_SegmentMask is clear 4579Path kQuad_SegmentMask is set 4580~~~~ 4581 4582</fiddle-embed></div> 4583 4584### See Also 4585 4586<a href='#SkPath_getSegmentMasks'>getSegmentMasks</a> <a href='#SkPath_Verb'>Verb</a> 4587 4588<a name='SkPath_getSegmentMasks'></a> 4589 4590--- 4591 4592<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4593uint32_t <a href='#SkPath_getSegmentMasks'>getSegmentMasks</a>()const 4594</pre> 4595 4596Returns a mask, where each set bit corresponds to a <a href='#SkPath_SegmentMask'>SegmentMask</a> constant 4597if <a href='SkPath_Reference#SkPath'>SkPath</a> contains one or more <a href='SkPath_Reference#Verb'>verbs</a> of that type. 4598Returns zero if <a href='SkPath_Reference#SkPath'>SkPath</a> contains no <a href='undocumented#Line'>lines</a>, or <a href='undocumented#Curve'>curves</a>: <a href='SkPath_Reference#Quad'>quads</a>, <a href='SkPath_Reference#Conic'>conics</a>, or <a href='SkPath_Reference#Cubic'>cubics</a>. 4599 4600<a href='#SkPath_getSegmentMasks'>getSegmentMasks</a>() returns a cached result; it is very fast. 4601 4602### Return Value 4603 4604<a href='#SkPath_SegmentMask'>SegmentMask</a> bits or zero 4605 4606### Example 4607 4608<div><fiddle-embed name="657a3f3e11acafea92b84d6bb0c13633"> 4609 4610#### Example Output 4611 4612~~~~ 4613mask quad set 4614~~~~ 4615 4616</fiddle-embed></div> 4617 4618### See Also 4619 4620<a href='#SkPath_getSegmentMasks'>getSegmentMasks</a> <a href='#SkPath_Verb'>Verb</a> 4621 4622<a name='SkPath_contains'></a> 4623 4624--- 4625 4626<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4627bool contains(<a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y)const 4628</pre> 4629 4630Returns true if the <a href='SkPoint_Reference#Point'>point</a> (<a href='#SkPath_contains_x'>x</a>, <a href='#SkPath_contains_y'>y</a>) is contained by <a href='SkPath_Reference#Path'>Path</a>, taking into 4631account <a href='#SkPath_FillType'>FillType</a>. 4632 4633| <a href='#SkPath_FillType'>FillType</a> | <a href='#SkPath_contains'>contains()</a> returns true if <a href='SkPoint_Reference#Point'>Point</a> is enclosed by | 4634| --- | --- | 4635| <a href='#SkPath_kWinding_FillType'>kWinding_FillType</a> | a non-zero sum of <a href='SkPath_Overview#Contour'>Contour</a> <a href='SkPath_Reference#Direction'>Directions</a>. | 4636| <a href='#SkPath_kEvenOdd_FillType'>kEvenOdd_FillType</a> | an odd number of <a href='SkPath_Overview#Contour'>Contours</a>. | 4637| <a href='#SkPath_kInverseWinding_FillType'>kInverseWinding_FillType</a> | a zero sum of <a href='SkPath_Overview#Contour'>Contour</a> <a href='SkPath_Reference#Direction'>Directions</a>. | 4638| <a href='#SkPath_kInverseEvenOdd_FillType'>kInverseEvenOdd_FillType</a> | and even number of <a href='SkPath_Overview#Contour'>Contours</a>. | 4639 4640### Parameters 4641 4642<table> <tr> <td><a name='SkPath_contains_x'><code><strong>x</strong></code></a></td> 4643 <td>x-axis value of containment test</td> 4644 </tr> 4645 <tr> <td><a name='SkPath_contains_y'><code><strong>y</strong></code></a></td> 4646 <td>y-axis value of containment test</td> 4647 </tr> 4648</table> 4649 4650### Return Value 4651 4652true if <a href='SkPoint_Reference#Point'>Point</a> is in <a href='SkPath_Reference#Path'>Path</a> 4653 4654### Example 4655 4656<div><fiddle-embed name="c0216b3f7ebd80b9589ae5728f08fc80"></fiddle-embed></div> 4657 4658### See Also 4659 4660<a href='#SkPath_conservativelyContainsRect'>conservativelyContainsRect</a> <a href='#Path_Fill_Type'>Fill_Type</a> <a href='undocumented#Op'>Op</a> 4661 4662<a name='SkPath_dump'></a> 4663 4664--- 4665 4666<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4667void <a href='#SkPath_dump'>dump</a>(<a href='SkWStream_Reference#SkWStream'>SkWStream</a>* <a href='SkStream_Reference#Stream'>stream</a>, bool forceClose, bool dumpAsHex)const 4668</pre> 4669 4670Writes <a href='undocumented#Text'>text</a> representation of <a href='SkPath_Reference#SkPath'>SkPath</a> to <a href='#SkPath_dump_stream'>stream</a>. If <a href='#SkPath_dump_stream'>stream</a> is nullptr, writes to 4671standard output. Set <a href='#SkPath_dump_forceClose'>forceClose</a> to true to get edges used to fill <a href='SkPath_Reference#SkPath'>SkPath</a>. 4672Set <a href='#SkPath_dump_dumpAsHex'>dumpAsHex</a> true to generate exact binary representations 4673of floating <a href='SkPoint_Reference#Point'>point</a> numbers used in <a href='SkPath_Reference#Point_Array'>SkPoint array</a> and <a href='SkPath_Reference#Conic_Weight'>conic weights</a>. 4674 4675### Parameters 4676 4677<table> <tr> <td><a name='SkPath_dump_stream'><code><strong>stream</strong></code></a></td> 4678 <td>writable <a href='SkWStream_Reference#SkWStream'>SkWStream</a> receiving <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='undocumented#Text'>text</a> representation; may be nullptr</td> 4679 </tr> 4680 <tr> <td><a name='SkPath_dump_forceClose'><code><strong>forceClose</strong></code></a></td> 4681 <td>true if missing <a href='#SkPath_kClose_Verb'>kClose_Verb</a> is output</td> 4682 </tr> 4683 <tr> <td><a name='SkPath_dump_dumpAsHex'><code><strong>dumpAsHex</strong></code></a></td> 4684 <td>true if <a href='undocumented#SkScalar'>SkScalar</a> values are written as hexadecimal</td> 4685 </tr> 4686</table> 4687 4688### Example 4689 4690<div><fiddle-embed name="8036d764452a62f9953af50846f0f3c0"> 4691 4692#### Example Output 4693 4694~~~~ 4695path.setFillType(SkPath::kWinding_FillType); 4696path.moveTo(0, 0); 4697path.quadTo(20, 30, 40, 50); 4698path.setFillType(SkPath::kWinding_FillType); 4699path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0 4700path.quadTo(SkBits2Float(0x41a00000), SkBits2Float(0x41f00000), SkBits2Float(0x42200000), SkBits2Float(0x42480000)); // 20, 30, 40, 50 4701path.setFillType(SkPath::kWinding_FillType); 4702path.moveTo(0, 0); 4703path.quadTo(20, 30, 40, 50); 4704path.lineTo(0, 0); 4705path.close(); 4706path.setFillType(SkPath::kWinding_FillType); 4707path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0 4708path.quadTo(SkBits2Float(0x41a00000), SkBits2Float(0x41f00000), SkBits2Float(0x42200000), SkBits2Float(0x42480000)); // 20, 30, 40, 50 4709path.lineTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0 4710path.close(); 4711~~~~ 4712 4713</fiddle-embed></div> 4714 4715### See Also 4716 4717<a href='#SkPath_dumpHex'>dumpHex</a> <a href='SkRect_Reference#SkRect'>SkRect</a>::<a href='#SkRect_dump'>dump()</a> <a href='SkRRect_Reference#SkRRect'>SkRRect</a>::<a href='#SkRRect_dump'>dump()</a> <a href='undocumented#SkPathMeasure'>SkPathMeasure</a>::<a href='#SkPathMeasure_dump'>dump()</a> 4718 4719<a name='SkPath_dump_2'></a> 4720 4721--- 4722 4723<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4724void <a href='#SkPath_dump'>dump()</a>const 4725</pre> 4726 4727Writes <a href='undocumented#Text'>text</a> representation of <a href='SkPath_Reference#SkPath'>SkPath</a> to standard output. The representation may be 4728directly compiled as C++ code. Floating <a href='SkPoint_Reference#Point'>point</a> values are written 4729with limited precision; it may not be possible to reconstruct original <a href='SkPath_Reference#SkPath'>SkPath</a> 4730from output. 4731 4732### Example 4733 4734<div><fiddle-embed name="92e0032f85181795d1f8b5a2c8e4e4b7"> 4735 4736#### Example Output 4737 4738~~~~ 4739path.setFillType(SkPath::kWinding_FillType); 4740path.moveTo(0, 0); 4741path.lineTo(0.857143f, 0.666667f); 4742path is not equal to copy 4743~~~~ 4744 4745</fiddle-embed></div> 4746 4747### See Also 4748 4749<a href='#SkPath_dumpHex'>dumpHex</a> <a href='SkRect_Reference#SkRect'>SkRect</a>::<a href='#SkRect_dump'>dump()</a> <a href='SkRRect_Reference#SkRRect'>SkRRect</a>::<a href='#SkRRect_dump'>dump()</a> <a href='undocumented#SkPathMeasure'>SkPathMeasure</a>::<a href='#SkPathMeasure_dump'>dump()</a> <a href='#SkPath_writeToMemory'>writeToMemory</a> 4750 4751<a name='SkPath_dumpHex'></a> 4752 4753--- 4754 4755<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4756void <a href='#SkPath_dumpHex'>dumpHex</a>()const 4757</pre> 4758 4759Writes <a href='undocumented#Text'>text</a> representation of <a href='SkPath_Reference#Path'>Path</a> to standard output. The representation may be 4760directly compiled as C++ code. Floating <a href='SkPoint_Reference#Point'>point</a> values are written 4761in hexadecimal to preserve their exact bit pattern. The output reconstructs the 4762original <a href='SkPath_Reference#Path'>Path</a>. 4763 4764Use instead of <a href='#SkPath_dump'>dump()</a> when submitting 4765<a href='https://bug.skia.org'>bug reports against Skia</a></a> . 4766 4767### Example 4768 4769<div><fiddle-embed name="72a92fe058e8b3be6c8a30fad7fd1266"> 4770 4771#### Example Output 4772 4773~~~~ 4774path.setFillType(SkPath::kWinding_FillType); 4775path.moveTo(SkBits2Float(0x00000000), SkBits2Float(0x00000000)); // 0, 0 4776path.lineTo(SkBits2Float(0x3f5b6db7), SkBits2Float(0x3f2aaaab)); // 0.857143f, 0.666667f 4777path is equal to copy 4778~~~~ 4779 4780</fiddle-embed></div> 4781 4782### See Also 4783 4784<a href='#SkPath_dump'>dump</a> <a href='SkRect_Reference#SkRect'>SkRect</a>::<a href='#SkRect_dumpHex'>dumpHex</a> <a href='SkRRect_Reference#SkRRect'>SkRRect</a>::<a href='#SkRRect_dumpHex'>dumpHex</a> <a href='#SkPath_writeToMemory'>writeToMemory</a> 4785 4786<a name='SkPath_writeToMemory'></a> 4787 4788--- 4789 4790<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4791size_t <a href='#SkPath_writeToMemory'>writeToMemory</a>(void* buffer)const 4792</pre> 4793 4794Writes <a href='SkPath_Reference#SkPath'>SkPath</a> to <a href='#SkPath_writeToMemory_buffer'>buffer</a>, returning the number of bytes written. 4795Pass nullptr to obtain the storage <a href='undocumented#Size'>size</a>. 4796 4797Writes <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a>, <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, <a href='#Conic_Weight'>conic weight</a>, and 4798additionally writes computed information like <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> and bounds. 4799 4800Use only be used in concert with <a href='#SkPath_readFromMemory'>readFromMemory</a>(); 4801the format used for <a href='SkPath_Reference#SkPath'>SkPath</a> in memory is not guaranteed. 4802 4803### Parameters 4804 4805<table> <tr> <td><a name='SkPath_writeToMemory_buffer'><code><strong>buffer</strong></code></a></td> 4806 <td>storage for <a href='SkPath_Reference#SkPath'>SkPath</a>; may be nullptr</td> 4807 </tr> 4808</table> 4809 4810### Return Value 4811 4812<a href='undocumented#Size'>size</a> of storage required for <a href='SkPath_Reference#SkPath'>SkPath</a>; always a multiple of 4 4813 4814### Example 4815 4816<div><fiddle-embed name="e5f16eda6a1c2d759556285f72598445"> 4817 4818#### Example Output 4819 4820~~~~ 4821path is equal to copy 4822~~~~ 4823 4824</fiddle-embed></div> 4825 4826### See Also 4827 4828<a href='#SkPath_serialize'>serialize</a> <a href='#SkPath_readFromMemory'>readFromMemory</a> <a href='#SkPath_dump'>dump</a> <a href='#SkPath_dumpHex'>dumpHex</a> 4829 4830<a name='SkPath_serialize'></a> 4831 4832--- 4833 4834<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4835<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkData'>SkData</a>> <a href='#SkPath_serialize'>serialize()</a>const 4836</pre> 4837 4838Writes <a href='SkPath_Reference#SkPath'>SkPath</a> to buffer, returning the buffer written to, wrapped in <a href='undocumented#SkData'>SkData</a>. 4839 4840<a href='#SkPath_serialize'>serialize()</a> writes <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a>, verb array, <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array, <a href='SkPath_Reference#Conic'>conic</a> weight, and 4841additionally writes computed information like <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> and bounds. 4842 4843<a href='#SkPath_serialize'>serialize()</a> should only be used in concert with <a href='#SkPath_readFromMemory'>readFromMemory</a>(). 4844The format used for <a href='SkPath_Reference#SkPath'>SkPath</a> in memory is not guaranteed. 4845 4846### Return Value 4847 4848<a href='SkPath_Reference#SkPath'>SkPath</a> <a href='undocumented#Data'>data</a> wrapped in <a href='undocumented#SkData'>SkData</a> buffer 4849 4850### Example 4851 4852<div><fiddle-embed name="2c6aff73608cd198659db6d1eeaaae4f"> 4853 4854#### Example Output 4855 4856~~~~ 4857path is equal to copy 4858~~~~ 4859 4860</fiddle-embed></div> 4861 4862### See Also 4863 4864<a href='#SkPath_writeToMemory'>writeToMemory</a> <a href='#SkPath_readFromMemory'>readFromMemory</a> <a href='#SkPath_dump'>dump</a> <a href='#SkPath_dumpHex'>dumpHex</a> 4865 4866<a name='SkPath_readFromMemory'></a> 4867 4868--- 4869 4870<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4871size_t <a href='#SkPath_readFromMemory'>readFromMemory</a>(const void* buffer, size_t length) 4872</pre> 4873 4874Initializes <a href='SkPath_Reference#SkPath'>SkPath</a> from <a href='#SkPath_readFromMemory_buffer'>buffer</a> of <a href='undocumented#Size'>size</a> <a href='#SkPath_readFromMemory_length'>length</a>. Returns zero if the <a href='#SkPath_readFromMemory_buffer'>buffer</a> is 4875<a href='undocumented#Data'>data</a> is inconsistent, or the <a href='#SkPath_readFromMemory_length'>length</a> is too small. 4876 4877Reads <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a>, <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, <a href='#Conic_Weight'>conic weight</a>, and 4878additionally reads computed information like <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Convexity'>Convexity</a> and bounds. 4879 4880Used only in concert with <a href='#SkPath_writeToMemory'>writeToMemory</a>(); 4881the format used for <a href='SkPath_Reference#SkPath'>SkPath</a> in memory is not guaranteed. 4882 4883### Parameters 4884 4885<table> <tr> <td><a name='SkPath_readFromMemory_buffer'><code><strong>buffer</strong></code></a></td> 4886 <td>storage for <a href='SkPath_Reference#SkPath'>SkPath</a></td> 4887 </tr> 4888 <tr> <td><a name='SkPath_readFromMemory_length'><code><strong>length</strong></code></a></td> 4889 <td><a href='#SkPath_readFromMemory_buffer'>buffer</a> <a href='undocumented#Size'>size</a> in bytes; must be multiple of 4</td> 4890 </tr> 4891</table> 4892 4893### Return Value 4894 4895number of bytes read, or zero on failure 4896 4897### Example 4898 4899<div><fiddle-embed name="9c6edd836c573a0fd232d2b8aa11a678"> 4900 4901#### Example Output 4902 4903~~~~ 4904length = 32; returned by readFromMemory = 0 4905length = 40; returned by readFromMemory = 36 4906~~~~ 4907 4908</fiddle-embed></div> 4909 4910### See Also 4911 4912<a href='#SkPath_writeToMemory'>writeToMemory</a> 4913 4914<a name='Generation_ID'></a> 4915 4916<a href='#Path_Generation_ID'>Generation_ID</a> provides a quick way to check if <a href='#Path_Verb_Array'>Verb_Array</a>, <a href='#Path_Point_Array'>Point_Array</a>, or 4917<a href='#Path_Conic_Weight'>Conic_Weight</a> has changed. <a href='#Path_Generation_ID'>Generation_ID</a> is not a hash; identical <a href='SkPath_Reference#Path'>Paths</a> will 4918not necessarily have matching <a href='#Path_Generation_ID'>Generation_IDs</a>. 4919 4920Empty <a href='SkPath_Reference#Path'>Paths</a> have a <a href='#Path_Generation_ID'>Generation_ID</a> of one. 4921 4922<a name='SkPath_getGenerationID'></a> 4923 4924--- 4925 4926<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4927uint32_t <a href='#SkPath_getGenerationID'>getGenerationID</a>()const 4928</pre> 4929 4930(See Skia bug 1762.) 4931Returns a non-zero, globally unique value. A different value is returned 4932if verb array, <a href='SkPoint_Reference#SkPoint'>SkPoint</a> array, or <a href='SkPath_Reference#Conic'>conic</a> weight changes. 4933 4934Setting <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a> does not change generation identifier. 4935 4936Each time the <a href='SkPath_Reference#Path'>path</a> is modified, a different generation identifier will be returned. 4937<a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_FillType'>FillType</a> does affect generation identifier on Android framework. 4938 4939### Return Value 4940 4941non-zero, globally unique value 4942 4943### Example 4944 4945<div><fiddle-embed name="a0f166715d6479f91258d854e63e586d"> 4946 4947#### Example Output 4948 4949~~~~ 4950empty genID = 1 49511st lineTo genID = 2 4952empty genID = 1 49532nd lineTo genID = 3 4954~~~~ 4955 4956</fiddle-embed></div> 4957 4958### See Also 4959 4960<a href='#SkPath_equal_operator'>operator==</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& a, const <a href='SkPath_Reference#SkPath'>SkPath</a>& b) 4961 4962<a name='SkPath_isValid'></a> 4963 4964--- 4965 4966<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 4967bool <a href='#SkPath_isValid'>isValid</a>()const 4968</pre> 4969 4970Returns if <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='undocumented#Data'>data</a> is consistent. Corrupt <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='undocumented#Data'>data</a> is detected if 4971internal values are out of range or internal storage does not match 4972array dimensions. 4973 4974### Return Value 4975 4976true if <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='undocumented#Data'>data</a> is consistent 4977 4978<a name='SkPath_Iter'></a> 4979 4980--- 4981 4982<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 4983 class <a href='#SkPath_Iter'>Iter</a> { 4984 4985 <a href='#SkPath_Iter_Iter'>Iter()</a>; 4986 <a href='#SkPath_Iter_Iter'>Iter</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>, bool forceClose); 4987 void <a href='#SkPath_Iter_setPath'>setPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>, bool forceClose); 4988 <a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_Iter_next'>next</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[4], bool doConsumeDegenerates = true, bool exact = false); 4989 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPath_Iter_conicWeight'>conicWeight</a>() const; 4990 bool <a href='#SkPath_Iter_isCloseLine'>isCloseLine</a>() const; 4991 bool <a href='#SkPath_Iter_isClosedContour'>isClosedContour</a>() const; 4992 }; 4993 4994</pre> 4995 4996Iterates through <a href='#Path_Verb_Array'>Verb_Array</a>, and associated <a href='#Path_Point_Array'>Point_Array</a> and <a href='#Path_Conic_Weight'>Conic_Weight</a>. 4997Provides options to treat open <a href='SkPath_Overview#Contour'>Contours</a> as closed, and to ignore 4998degenerate <a href='undocumented#Data'>data</a>. 4999 5000### Example 5001 5002<div><fiddle-embed name="2f53df9201769ab7e7c0e164a1334309"><div>Ignoring the actual <a href='SkPath_Reference#Verb'>Verbs</a> and replacing them with <a href='SkPath_Reference#Quad'>Quads</a> rounds the 5003<a href='SkPath_Reference#Path'>path</a> of the <a href='undocumented#Glyph'>glyph</a>. 5004</div></fiddle-embed></div> 5005 5006### See Also 5007 5008<a href='#SkPath_RawIter'>RawIter</a> 5009 5010<a name='SkPath_Iter_Iter'></a> 5011 5012--- 5013 5014<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5015<a href='#SkPath_Iter_Iter'>Iter()</a> 5016</pre> 5017 5018Initializes <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> with an empty <a href='SkPath_Reference#SkPath'>SkPath</a>. <a href='#SkPath_Iter_next'>next()</a> on <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> returns 5019<a href='#SkPath_kDone_Verb'>kDone_Verb</a>. 5020Call <a href='#SkPath_Iter_setPath'>setPath</a> to initialize <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> at a later time. 5021 5022### Return Value 5023 5024<a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> of empty <a href='SkPath_Reference#SkPath'>SkPath</a> 5025 5026### Example 5027 5028<div><fiddle-embed name="01648775cb9b354b2f1836dad82a25ab"> 5029 5030#### Example Output 5031 5032~~~~ 5033iter is done 5034iter is done 5035~~~~ 5036 5037</fiddle-embed></div> 5038 5039### See Also 5040 5041<a href='#SkPath_Iter_setPath'>setPath</a> 5042 5043<a name='SkPath_Iter_const_SkPath'></a> 5044 5045--- 5046 5047<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5048<a href='#SkPath_Iter'>Iter</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>, bool forceClose) 5049</pre> 5050 5051Sets <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> to return elements of <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='#Conic_Weight'>conic weight</a> in 5052<a href='#SkPath_Iter_const_SkPath_path'>path</a>. If <a href='#SkPath_Iter_const_SkPath_forceClose'>forceClose</a> is true, <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> will add <a href='#SkPath_kLine_Verb'>kLine_Verb</a> and <a href='#SkPath_kClose_Verb'>kClose_Verb</a> after each 5053open <a href='SkPath_Overview#Contour'>contour</a>. <a href='#SkPath_Iter_const_SkPath_path'>path</a> is not altered. 5054 5055### Parameters 5056 5057<table> <tr> <td><a name='SkPath_Iter_const_SkPath_path'><code><strong>path</strong></code></a></td> 5058 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to iterate</td> 5059 </tr> 5060 <tr> <td><a name='SkPath_Iter_const_SkPath_forceClose'><code><strong>forceClose</strong></code></a></td> 5061 <td>true if open <a href='SkPath_Overview#Contour'>contours</a> generate <a href='#SkPath_kClose_Verb'>kClose_Verb</a></td> 5062 </tr> 5063</table> 5064 5065### Return Value 5066 5067<a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> of <a href='#SkPath_Iter_const_SkPath_path'>path</a> 5068 5069### Example 5070 5071<div><fiddle-embed name="13044dbf68885c0f15322c0633b633a3"> 5072 5073#### Example Output 5074 5075~~~~ 5076open: 5077kMove_Verb {0, 0}, 5078kQuad_Verb {0, 0}, {10, 20}, {30, 40}, 5079kDone_Verb 5080closed: 5081kMove_Verb {0, 0}, 5082kQuad_Verb {0, 0}, {10, 20}, {30, 40}, 5083kLine_Verb {30, 40}, {0, 0}, 5084kClose_Verb {0, 0}, 5085kDone_Verb 5086~~~~ 5087 5088</fiddle-embed></div> 5089 5090### See Also 5091 5092<a href='#SkPath_Iter_setPath'>setPath</a> 5093 5094<a name='SkPath_Iter_setPath'></a> 5095 5096--- 5097 5098<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5099void <a href='#SkPath_Iter_setPath'>setPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>, bool forceClose) 5100</pre> 5101 5102Sets <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> to return elements of <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='#Conic_Weight'>conic weight</a> in 5103<a href='#SkPath_Iter_setPath_path'>path</a>. If <a href='#SkPath_Iter_setPath_forceClose'>forceClose</a> is true, <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> will add <a href='#SkPath_kLine_Verb'>kLine_Verb</a> and <a href='#SkPath_kClose_Verb'>kClose_Verb</a> after each 5104open <a href='SkPath_Overview#Contour'>contour</a>. <a href='#SkPath_Iter_setPath_path'>path</a> is not altered. 5105 5106### Parameters 5107 5108<table> <tr> <td><a name='SkPath_Iter_setPath_path'><code><strong>path</strong></code></a></td> 5109 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to iterate</td> 5110 </tr> 5111 <tr> <td><a name='SkPath_Iter_setPath_forceClose'><code><strong>forceClose</strong></code></a></td> 5112 <td>true if open <a href='SkPath_Overview#Contour'>contours</a> generate <a href='#SkPath_kClose_Verb'>kClose_Verb</a></td> 5113 </tr> 5114</table> 5115 5116### Example 5117 5118<div><fiddle-embed name="6c9688008cea8937ad5cc188b38ecf16"> 5119 5120#### Example Output 5121 5122~~~~ 5123quad open: 5124kMove_Verb {0, 0}, 5125kQuad_Verb {0, 0}, {10, 20}, {30, 40}, 5126kDone_Verb 5127conic closed: 5128kMove_Verb {0, 0}, 5129kConic_Verb {0, 0}, {1, 2}, {3, 4}, weight = 0.5 5130kLine_Verb {3, 4}, {0, 0}, 5131kClose_Verb {0, 0}, 5132kDone_Verb 5133~~~~ 5134 5135</fiddle-embed></div> 5136 5137### See Also 5138 5139<a href='#SkPath_Iter_const_SkPath'>Iter(const SkPath& path, bool forceClose)</a> 5140 5141<a name='SkPath_Iter_next'></a> 5142 5143--- 5144 5145<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5146<a href='#SkPath_Verb'>Verb</a> next(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[4], bool doConsumeDegenerates = true, bool exact = false) 5147</pre> 5148 5149Returns next <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> in <a href='#Verb_Array'>verb array</a>, and advances <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a>. 5150When <a href='#Verb_Array'>verb array</a> is exhausted, returns <a href='#SkPath_kDone_Verb'>kDone_Verb</a>. 5151 5152Zero to four <a href='SkPoint_Reference#SkPoint'>SkPoint</a> are stored in <a href='#SkPath_Iter_next_pts'>pts</a>, depending on the returned <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a>. 5153 5154If <a href='#SkPath_Iter_next_doConsumeDegenerates'>doConsumeDegenerates</a> is true, skip consecutive <a href='#SkPath_kMove_Verb'>kMove_Verb</a> entries, returning 5155only the last in the series; and skip very small <a href='undocumented#Line'>lines</a>, <a href='SkPath_Reference#Quad'>quads</a>, and <a href='SkPath_Reference#Conic'>conics</a>; and 5156skip <a href='#SkPath_kClose_Verb'>kClose_Verb</a> following <a href='#SkPath_kMove_Verb'>kMove_Verb</a>. 5157if <a href='#SkPath_Iter_next_doConsumeDegenerates'>doConsumeDegenerates</a> is true and <a href='#SkPath_Iter_next_exact'>exact</a> is true, only skip <a href='undocumented#Line'>lines</a>, <a href='SkPath_Reference#Quad'>quads</a>, and 5158<a href='SkPath_Reference#Conic'>conics</a> with zero lengths. 5159 5160### Parameters 5161 5162<table> <tr> <td><a name='SkPath_Iter_next_pts'><code><strong>pts</strong></code></a></td> 5163 <td>storage for <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='undocumented#Data'>data</a> describing returned <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a></td> 5164 </tr> 5165 <tr> <td><a name='SkPath_Iter_next_doConsumeDegenerates'><code><strong>doConsumeDegenerates</strong></code></a></td> 5166 <td>if true, skip degenerate <a href='SkPath_Reference#Verb'>verbs</a></td> 5167 </tr> 5168 <tr> <td><a name='SkPath_Iter_next_exact'><code><strong>exact</strong></code></a></td> 5169 <td>skip zero length <a href='undocumented#Curve'>curves</a></td> 5170 </tr> 5171</table> 5172 5173### Return Value 5174 5175next <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> from <a href='#Verb_Array'>verb array</a> 5176 5177### Example 5178 5179<div><fiddle-embed name="00ae8984856486bdb626d0ed6587855a"><div>skip degenerate skips the first in a <a href='#SkPath_kMove_Verb'>kMove_Verb</a> pair, the <a href='#SkPath_kMove_Verb'>kMove_Verb</a> 5180followed by the <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, the zero length <a href='undocumented#Line'>Line</a> and the very small <a href='undocumented#Line'>Line</a>. 5181 5182skip degenerate if <a href='#SkPath_Iter_next_exact'>exact</a> skips the same as skip degenerate, but shows 5183the very small <a href='undocumented#Line'>Line</a>. 5184 5185skip none shows all of the <a href='SkPath_Reference#Verb'>Verbs</a> and <a href='SkPoint_Reference#Point'>Points</a> in <a href='SkPath_Reference#Path'>Path</a>. 5186</div> 5187 5188#### Example Output 5189 5190~~~~ 5191skip degenerate: 5192kMove_Verb {20, 20}, 5193kQuad_Verb {20, 20}, {10, 20}, {30, 40}, 5194kDone_Verb 5195skip degenerate if exact: 5196kMove_Verb {20, 20}, 5197kQuad_Verb {20, 20}, {10, 20}, {30, 40}, 5198kMove_Verb {30, 30}, 5199kLine_Verb {30, 30}, {30.00001, 30}, 5200kDone_Verb 5201skip none: 5202kMove_Verb {10, 10}, 5203kMove_Verb {20, 20}, 5204kQuad_Verb {20, 20}, {10, 20}, {30, 40}, 5205kMove_Verb {1, 1}, 5206kClose_Verb {1, 1}, 5207kMove_Verb {30, 30}, 5208kLine_Verb {30, 30}, {30, 30}, 5209kMove_Verb {30, 30}, 5210kLine_Verb {30, 30}, {30.00001, 30}, 5211kDone_Verb 5212~~~~ 5213 5214</fiddle-embed></div> 5215 5216### See Also 5217 5218<a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_IsLineDegenerate'>IsLineDegenerate</a> <a href='#SkPath_IsCubicDegenerate'>IsCubicDegenerate</a> <a href='#SkPath_IsQuadDegenerate'>IsQuadDegenerate</a> 5219 5220<a name='SkPath_Iter_conicWeight'></a> 5221 5222--- 5223 5224<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5225<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPath_Iter_conicWeight'>conicWeight</a>()const 5226</pre> 5227 5228Returns <a href='SkPath_Reference#Conic'>conic</a> weight if <a href='#SkPath_Iter_next'>next()</a> returned <a href='#SkPath_kConic_Verb'>kConic_Verb</a>. 5229 5230If <a href='#SkPath_Iter_next'>next()</a> has not been called, or <a href='#SkPath_Iter_next'>next()</a> did not return <a href='#SkPath_kConic_Verb'>kConic_Verb</a>, 5231result is undefined. 5232 5233### Return Value 5234 5235<a href='SkPath_Reference#Conic'>conic</a> weight for <a href='SkPath_Reference#Conic'>conic</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> returned by <a href='#SkPath_Iter_next'>next()</a> 5236 5237### Example 5238 5239<div><fiddle-embed name="7cdea37741d50f0594c6244eb07fd175"> 5240 5241#### Example Output 5242 5243~~~~ 5244first verb is move 5245next verb is conic 5246conic points: {0,0}, {1,2}, {3,4} 5247conic weight: 0.5 5248~~~~ 5249 5250</fiddle-embed></div> 5251 5252### See Also 5253 5254<a href='#Path_Conic_Weight'>Conic_Weight</a> 5255 5256<a name='SkPath_Iter_isCloseLine'></a> 5257 5258--- 5259 5260<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5261bool <a href='#SkPath_Iter_isCloseLine'>isCloseLine</a>()const 5262</pre> 5263 5264Returns true if last <a href='#SkPath_kLine_Verb'>kLine_Verb</a> returned by <a href='#SkPath_Iter_next'>next()</a> was generated 5265by <a href='#SkPath_kClose_Verb'>kClose_Verb</a>. When true, the end <a href='SkPoint_Reference#Point'>point</a> returned by <a href='#SkPath_Iter_next'>next()</a> is 5266also the start <a href='SkPoint_Reference#Point'>point</a> of <a href='SkPath_Overview#Contour'>contour</a>. 5267 5268If <a href='#SkPath_Iter_next'>next()</a> has not been called, or <a href='#SkPath_Iter_next'>next()</a> did not return <a href='#SkPath_kLine_Verb'>kLine_Verb</a>, 5269result is undefined. 5270 5271### Return Value 5272 5273true if last <a href='#SkPath_kLine_Verb'>kLine_Verb</a> was generated by <a href='#SkPath_kClose_Verb'>kClose_Verb</a> 5274 5275### Example 5276 5277<div><fiddle-embed name="7000b501f49341629bfdd9f80e686103"> 5278 5279#### Example Output 5280 5281~~~~ 52821st verb is move 5283moveTo point: {6,7} 52842nd verb is conic 52853rd verb is line 5286line points: {3,4}, {6,7} 5287line generated by close 52884th verb is close 5289~~~~ 5290 5291</fiddle-embed></div> 5292 5293### See Also 5294 5295<a href='#SkPath_close'>close()</a> 5296 5297<a name='SkPath_Iter_isClosedContour'></a> 5298 5299--- 5300 5301<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5302bool <a href='#SkPath_Iter_isClosedContour'>isClosedContour</a>()const 5303</pre> 5304 5305Returns true if subsequent calls to <a href='#SkPath_Iter_next'>next()</a> return <a href='#SkPath_kClose_Verb'>kClose_Verb</a> before returning 5306<a href='#SkPath_kMove_Verb'>kMove_Verb</a>. if true, <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> is processing may end with <a href='#SkPath_kClose_Verb'>kClose_Verb</a>, or 5307<a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> may have been initialized with force close set to true. 5308 5309### Return Value 5310 5311true if <a href='SkPath_Overview#Contour'>contour</a> is closed 5312 5313### Example 5314 5315<div><fiddle-embed name="b0d48a6e949db1cb545216ae9c3c3c70"> 5316 5317#### Example Output 5318 5319~~~~ 5320without close(), forceClose is false: isClosedContour returns false 5321with close(), forceClose is false: isClosedContour returns true 5322without close(), forceClose is true : isClosedContour returns true 5323with close(), forceClose is true : isClosedContour returns true 5324~~~~ 5325 5326</fiddle-embed></div> 5327 5328### See Also 5329 5330<a href='#SkPath_Iter_const_SkPath'>Iter(const SkPath& path, bool forceClose)</a> 5331 5332<a name='SkPath_RawIter'></a> 5333 5334--- 5335 5336<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0"> 5337 class <a href='#SkPath_RawIter'>RawIter</a> { 5338 5339 <a href='#SkPath_RawIter_RawIter'>RawIter()</a>; 5340 <a href='#SkPath_RawIter_RawIter'>RawIter</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>); 5341 void <a href='#SkPath_RawIter_setPath'>setPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>); 5342 <a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_RawIter_next'>next</a>(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[4]); 5343 <a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_RawIter_peek'>peek()</a> const; 5344 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPath_RawIter_conicWeight'>conicWeight</a>() const; 5345 }; 5346 5347</pre> 5348 5349Iterates through <a href='#Path_Verb_Array'>Verb_Array</a>, and associated <a href='#Path_Point_Array'>Point_Array</a> and <a href='#Path_Conic_Weight'>Conic_Weight</a>. 5350<a href='#Path_Verb_Array'>Verb_Array</a>, <a href='#Path_Point_Array'>Point_Array</a>, and <a href='#Path_Conic_Weight'>Conic_Weight</a> are returned unaltered. 5351 5352<a name='SkPath_RawIter_RawIter'></a> 5353 5354--- 5355 5356<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5357<a href='#SkPath_RawIter_RawIter'>RawIter()</a> 5358</pre> 5359 5360Initializes <a href='#SkPath_RawIter'>RawIter</a> with an empty <a href='SkPath_Reference#SkPath'>SkPath</a>. <a href='#SkPath_RawIter_next'>next()</a> on <a href='#SkPath_RawIter'>RawIter</a> returns <a href='#SkPath_kDone_Verb'>kDone_Verb</a>. 5361Call <a href='#SkPath_RawIter_setPath'>setPath</a> to initialize <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> at a later time. 5362 5363### Return Value 5364 5365<a href='#SkPath_RawIter'>RawIter</a> of empty <a href='SkPath_Reference#SkPath'>SkPath</a> 5366 5367<a name='SkPath_RawIter_copy_const_SkPath'></a> 5368 5369--- 5370 5371<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5372<a href='#SkPath_RawIter'>RawIter</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>) 5373</pre> 5374 5375Sets <a href='#SkPath_RawIter'>RawIter</a> to return elements of <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='#Conic_Weight'>conic weight</a> in <a href='#SkPath_RawIter_copy_const_SkPath_path'>path</a>. 5376 5377### Parameters 5378 5379<table> <tr> <td><a name='SkPath_RawIter_copy_const_SkPath_path'><code><strong>path</strong></code></a></td> 5380 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to iterate</td> 5381 </tr> 5382</table> 5383 5384### Return Value 5385 5386<a href='#SkPath_RawIter'>RawIter</a> of <a href='#SkPath_RawIter_copy_const_SkPath_path'>path</a> 5387 5388<a name='SkPath_RawIter_setPath'></a> 5389 5390--- 5391 5392<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5393void <a href='#SkPath_RawIter_setPath'>setPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& <a href='SkPath_Reference#Path'>path</a>) 5394</pre> 5395 5396Sets <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Iter'>Iter</a> to return elements of <a href='#Verb_Array'>verb array</a>, <a href='SkPath_Reference#Point_Array'>SkPoint array</a>, and <a href='#Conic_Weight'>conic weight</a> in 5397<a href='#SkPath_RawIter_setPath_path'>path</a>. 5398 5399### Parameters 5400 5401<table> <tr> <td><a name='SkPath_RawIter_setPath_path'><code><strong>path</strong></code></a></td> 5402 <td><a href='SkPath_Reference#SkPath'>SkPath</a> to iterate</td> 5403 </tr> 5404</table> 5405 5406<a name='SkPath_RawIter_next'></a> 5407 5408--- 5409 5410<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5411<a href='#SkPath_Verb'>Verb</a> next(<a href='SkPoint_Reference#SkPoint'>SkPoint</a> pts[4]) 5412</pre> 5413 5414Returns next <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> in <a href='#Verb_Array'>verb array</a>, and advances <a href='#SkPath_RawIter'>RawIter</a>. 5415When <a href='#Verb_Array'>verb array</a> is exhausted, returns <a href='#SkPath_kDone_Verb'>kDone_Verb</a>. 5416Zero to four <a href='SkPoint_Reference#SkPoint'>SkPoint</a> are stored in <a href='#SkPath_RawIter_next_pts'>pts</a>, depending on the returned <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a>. 5417 5418### Parameters 5419 5420<table> <tr> <td><a name='SkPath_RawIter_next_pts'><code><strong>pts</strong></code></a></td> 5421 <td>storage for <a href='SkPoint_Reference#SkPoint'>SkPoint</a> <a href='undocumented#Data'>data</a> describing returned <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a></td> 5422 </tr> 5423</table> 5424 5425### Return Value 5426 5427next <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> from <a href='#Verb_Array'>verb array</a> 5428 5429### Example 5430 5431<div><fiddle-embed name="944a80c7ff8c04e1fecc4aec4a47ea60"> 5432 5433#### Example Output 5434 5435~~~~ 5436kMove_Verb {50, 60}, 5437kQuad_Verb {50, 60}, {10, 20}, {30, 40}, 5438kClose_Verb {50, 60}, 5439kMove_Verb {50, 60}, 5440kLine_Verb {50, 60}, {30, 30}, 5441kConic_Verb {30, 30}, {1, 2}, {3, 4}, weight = 0.5 5442kCubic_Verb {3, 4}, {-1, -2}, {-3, -4}, {-5, -6}, 5443kDone_Verb 5444~~~~ 5445 5446</fiddle-embed></div> 5447 5448### See Also 5449 5450<a href='#SkPath_RawIter_peek'>peek()</a> 5451 5452<a name='SkPath_RawIter_peek'></a> 5453 5454--- 5455 5456<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5457<a href='#SkPath_Verb'>Verb</a> <a href='#SkPath_RawIter_peek'>peek()</a>const 5458</pre> 5459 5460Returns next <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a>, but does not advance <a href='#SkPath_RawIter'>RawIter</a>. 5461 5462### Return Value 5463 5464next <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_Verb'>Verb</a> from verb array 5465 5466### Example 5467 5468<div><fiddle-embed name="eb5fa5bea23059ce538e883502f828f5"> 5469 5470#### Example Output 5471 5472~~~~ 5473#Volatile 5474peek Move == verb Move 5475peek Quad == verb Quad 5476peek Conic == verb Conic 5477peek Cubic == verb Cubic 5478peek Done == verb Done 5479peek Done == verb Done 5480~~~~ 5481 5482</fiddle-embed></div> 5483 5484### See Also 5485 5486<a href='#SkPath_RawIter_next'>next</a> 5487 5488<a name='SkPath_RawIter_conicWeight'></a> 5489 5490--- 5491 5492<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0"> 5493<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPath_RawIter_conicWeight'>conicWeight</a>()const 5494</pre> 5495 5496Returns <a href='SkPath_Reference#Conic'>conic</a> weight if <a href='#SkPath_RawIter_next'>next()</a> returned <a href='#SkPath_kConic_Verb'>kConic_Verb</a>. 5497 5498If <a href='#SkPath_RawIter_next'>next()</a> has not been called, or <a href='#SkPath_RawIter_next'>next()</a> did not return <a href='#SkPath_kConic_Verb'>kConic_Verb</a>, 5499result is undefined. 5500 5501### Return Value 5502 5503<a href='SkPath_Reference#Conic'>conic</a> weight for <a href='SkPath_Reference#Conic'>conic</a> <a href='SkPoint_Reference#SkPoint'>SkPoint</a> returned by <a href='#SkPath_RawIter_next'>next()</a> 5504 5505### Example 5506 5507<div><fiddle-embed name="69f360a0ba8f40c51ef4cd9f972c5893"> 5508 5509#### Example Output 5510 5511~~~~ 5512first verb is move 5513next verb is conic 5514conic points: {0,0}, {1,2}, {3,4} 5515conic weight: 0.5 5516~~~~ 5517 5518</fiddle-embed></div> 5519 5520### See Also 5521 5522<a href='#Path_Conic_Weight'>Conic_Weight</a> 5523 5524