blob: 6fcdcde6dc3515713ba76c641370e16b3c493775 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
Cary Clarka90ea222018-10-16 10:30:28 -04004
Cary Clark61313f32018-10-08 14:57:48 -04005<a name='SkPaint'></a>
Cary Clarke4aa3712017-09-15 02:56:12 -04006
Cary Clarka90ea222018-10-16 10:30:28 -04007---
8
Cary Clark61313f32018-10-08 14:57:48 -04009<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -050010class <a href='SkPaint_Reference#SkPaint'>SkPaint</a> {
Cary Clarkcb6bef02018-11-29 12:05:25 -050011
Cary Clark61313f32018-10-08 14:57:48 -040012 <a href='#SkPaint_empty_constructor'>SkPaint()</a>;
Cary Clarkcb6bef02018-11-29 12:05:25 -050013 <a href='#SkPaint_copy_const_SkPaint'>SkPaint</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>);
14 <a href='#SkPaint_move_SkPaint'>SkPaint</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>);
15 <a href='#SkPaint_destructor'>~SkPaint()</a>;
16 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>);
17 <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>);
18 friend bool <a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b);
19 friend bool <a href='#SkPaint_notequal_operator'>operator!=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b);
Cary Clark777eede2018-11-09 16:04:58 -050020 uint32_t <a href='#SkPaint_getHash'>getHash</a>() const;
21 void <a href='#SkPaint_reset'>reset()</a>;
Cary Clark777eede2018-11-09 16:04:58 -050022 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel);
Cary Clark8cc4cdc2018-11-09 23:16:58 -050023 <a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const;
Cary Clark61313f32018-10-08 14:57:48 -040024
Cary Clark777eede2018-11-09 16:04:58 -050025 enum <a href='#SkPaint_Flags'>Flags</a> {
26 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
27 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
28 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
29 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
30 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
31 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
32 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
33 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
34 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark61313f32018-10-08 14:57:48 -040035 };
36
Cary Clark777eede2018-11-09 16:04:58 -050037 uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const;
38 void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags);
39 bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const;
40 void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa);
41 bool <a href='#SkPaint_isDither'>isDither</a>() const;
42 void <a href='#SkPaint_setDither'>setDither</a>(bool dither);
43 bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const;
44 void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText);
45 bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const;
46 void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText);
47 bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const;
48 void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText);
49 bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const;
50 void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText);
51 bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const;
52 void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter);
53 bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const;
54 void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText);
55 <a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const;
56 void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality);
Cary Clark61313f32018-10-08 14:57:48 -040057
Cary Clark777eede2018-11-09 16:04:58 -050058 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -040059 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
60 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
61 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
62 };
63
Cary Clarkcb6bef02018-11-29 12:05:25 -050064 static constexpr int <a href='#SkPaint_kStyleCount'>kStyleCount</a> = <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050065 <a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const;
66 void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style);
67 <a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const;
68 <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const;
69 void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='SkColor_Reference#Color'>color</a>);
70 void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& <a href='SkColor_Reference#Color'>color</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace);
71 uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const;
72 void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a);
73 void <a href='#SkPaint_setARGB'>setARGB</a>(<a href='undocumented#U8CPU'>U8CPU</a> a, <a href='undocumented#U8CPU'>U8CPU</a> r, <a href='undocumented#U8CPU'>U8CPU</a> g, <a href='undocumented#U8CPU'>U8CPU</a> b);
74 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const;
75 void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width);
76 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const;
77 void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter);
Cary Clark61313f32018-10-08 14:57:48 -040078
Cary Clark777eede2018-11-09 16:04:58 -050079 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -040080 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
81 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
82 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
83 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
84 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
85 };
86
Cary Clarkcb6bef02018-11-29 12:05:25 -050087 static constexpr int <a href='#SkPaint_kCapCount'>kCapCount</a> = <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050088 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -040089 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
90 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
91 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
92 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
93 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
94 };
95
Cary Clarkcb6bef02018-11-29 12:05:25 -050096 static constexpr int <a href='#SkPaint_kJoinCount'>kJoinCount</a> = <a href='#SkPaint_kLast_Join'>kLast_Join</a> + 1
Cary Clark777eede2018-11-09 16:04:58 -050097 <a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const;
98 void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap);
99 <a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const;
100 void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join);
101 bool <a href='#SkPaint_getFillPath'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst, const <a href='SkRect_Reference#SkRect'>SkRect</a>* cullRect,
102 <a href='undocumented#SkScalar'>SkScalar</a> resScale = 1) const;
103 bool <a href='#SkPaint_getFillPath'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst) const;
104 <a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const;
105 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkShader'>SkShader</a>> <a href='#SkPaint_refShader'>refShader</a>() const;
106 void <a href='#SkPaint_setShader'>setShader</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkShader'>SkShader</a>> <a href='undocumented#Shader'>shader</a>);
107 <a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const;
108 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorFilter'>SkColorFilter</a>> <a href='#SkPaint_refColorFilter'>refColorFilter</a>() const;
109 void <a href='#SkPaint_setColorFilter'>setColorFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorFilter'>SkColorFilter</a>> colorFilter);
110 <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const;
111 bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const;
112 void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode);
113 <a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const;
114 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkPathEffect'>SkPathEffect</a>> <a href='#SkPaint_refPathEffect'>refPathEffect</a>() const;
115 void <a href='#SkPaint_setPathEffect'>setPathEffect</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkPathEffect'>SkPathEffect</a>> pathEffect);
116 <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const;
117 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> <a href='#SkPaint_refMaskFilter'>refMaskFilter</a>() const;
118 void <a href='#SkPaint_setMaskFilter'>setMaskFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> maskFilter);
119 <a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const;
120 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkTypeface'>SkTypeface</a>> <a href='#SkPaint_refTypeface'>refTypeface</a>() const;
121 void <a href='#SkPaint_setTypeface'>setTypeface</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkTypeface'>SkTypeface</a>> <a href='undocumented#Typeface'>typeface</a>);
122 <a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const;
123 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkImageFilter'>SkImageFilter</a>> <a href='#SkPaint_refImageFilter'>refImageFilter</a>() const;
124 void <a href='#SkPaint_setImageFilter'>setImageFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkImageFilter'>SkImageFilter</a>> imageFilter);
125 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const;
126 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> <a href='#SkPaint_refDrawLooper'>refDrawLooper</a>() const;
Cary Clark777eede2018-11-09 16:04:58 -0500127 void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
Cary Clark777eede2018-11-09 16:04:58 -0500128 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const;
129 void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize);
130 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const;
131 void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX);
132 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const;
133 void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX);
Cary Clark3e73dcf2018-12-06 08:41:14 -0500134 <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const;
135 void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> encoding);
Cary Clark61313f32018-10-08 14:57:48 -0400136
Cary Clark777eede2018-11-09 16:04:58 -0500137 typedef <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> <a href='#SkPaint_FontMetrics'>FontMetrics</a>;
Cary Clark61313f32018-10-08 14:57:48 -0400138
Cary Clark777eede2018-11-09 16:04:58 -0500139 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='undocumented#SkFontMetrics'>SkFontMetrics</a>* metrics) const;
140 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const;
141 int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength,
142 <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[]) const;
143 bool <a href='#SkPaint_containsText'>containsText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
144 void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> <a href='undocumented#Text'>text</a>[]) const;
145 int <a href='#SkPaint_countText'>countText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength) const;
146 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const;
147 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length) const;
Cary Clark777eede2018-11-09 16:04:58 -0500148 int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength, <a href='undocumented#SkScalar'>SkScalar</a> widths[],
149 <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr) const;
150 void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
151 <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const;
152 void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length,
153 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>) const;
Cary Clark777eede2018-11-09 16:04:58 -0500154 bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const;
Cary Clark61313f32018-10-08 14:57:48 -0400155};
Cary Clarkcb6bef02018-11-29 12:05:25 -0500156
Cary Clark61313f32018-10-08 14:57:48 -0400157</pre>
158
Cary Clark777eede2018-11-09 16:04:58 -0500159<a href='SkPaint_Reference#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='SkPaint_Reference#Paint'>Paint</a> collects all
160options outside of the <a href='#Canvas_Clip'>Canvas_Clip</a> and <a href='#Canvas_Matrix'>Canvas_Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400161
Cary Clark777eede2018-11-09 16:04:58 -0500162Various options apply to <a href='undocumented#Text'>text</a>, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -0400163
Cary Clark777eede2018-11-09 16:04:58 -0500164Some options may not be implemented on all platforms; in these cases, setting
165the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
166functionality; for instance, <a href='#Text_Size'>text size</a> is identical to <a href='SkMatrix_Reference#Matrix'>matrix</a> scale.
Cary Clark12799e12017-07-28 15:18:29 -0400167
Cary Clark777eede2018-11-09 16:04:58 -0500168<a href='SkPaint_Reference#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
169pipeline and multiple pipeline stages may be affected by a single <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400170
Cary Clark777eede2018-11-09 16:04:58 -0500171<a href='SkPaint_Reference#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
172algorithms that alter the drawing geometry, <a href='SkColor_Reference#Color'>color</a>, and transparency. For instance,
173<a href='SkPaint_Reference#Paint'>Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -0400174
Cary Clark777eede2018-11-09 16:04:58 -0500175The objects contained by <a href='SkPaint_Reference#Paint'>Paint</a> are opaque, and cannot be edited outside of the <a href='SkPaint_Reference#Paint'>Paint</a>
176to affect it. The implementation is free to defer computations associated with the
177<a href='SkPaint_Reference#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
178<a href='SkPath_Reference#Path'>Path</a> geometries with <a href='#Paint_Anti_Alias'>Anti_Aliasing</a>, regardless of how <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>
179is set in <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400180
Cary Clarkcb6bef02018-11-29 12:05:25 -0500181<a href='SkPaint_Reference#Paint'>Paint</a> describes a single <a href='SkColor_Reference#Color'>color</a>, a single <a href='SkFont_Reference#Font'>font</a>, a single <a href='SkImage_Reference#Image'>image</a> quality, and so on.
Cary Clark777eede2018-11-09 16:04:58 -0500182Multiple colors are drawn either by using multiple paints or with objects like
183<a href='undocumented#Shader'>Shader</a> attached to <a href='SkPaint_Reference#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400184
Cary Clark682c58d2018-05-16 07:07:07 -0400185<a name='SkPaint_empty_constructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400186
187---
Cary Clark12799e12017-07-28 15:18:29 -0400188
Cary Clark682c58d2018-05-16 07:07:07 -0400189<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500190<a href='#SkPaint_empty_constructor'>SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400191</pre>
192
Cary Clark777eede2018-11-09 16:04:58 -0500193Constructs <a href='SkPaint_Reference#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400194
195| attribute | default value |
196| --- | --- |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500197| <a href='#Paint_Anti_Alias'>Anti_Alias</a> | false |
198| <a href='#Blend_Mode'>Blend_Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a> |
199| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK_ColorBLACK</a> |
200| <a href='#Color_Alpha'>Color_Alpha</a> | 255 |
201| <a href='#Color_Filter'>Color_Filter</a> | nullptr |
202| Dither | false |
203| <a href='#Draw_Looper'>Draw_Looper</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500204| <a href='#Filter_Quality'>Filter_Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
Cary Clark3e73dcf2018-12-06 08:41:14 -0500205| <a href='#Font_Force_Hinting'>Font_Force_Hinting</a> | false |
206| <a href='#Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> | false |
207| <a href='#Font_Embolden'>Font_Embolden</a> | false |
208| <a href='#Font_Hinting'>Font_Hinting</a> | <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> |
209| <a href='#Font_Hinting_Spacing'>Font_Hinting_Spacing</a> | false |
210| <a href='#Font_Anti_Alias'>Font_Anti_Alias</a> | false |
211| <a href='#Font_Linear'>Font_Linear</a> | false |
212| <a href='#Font_Scale_X'>Font_Scale_X</a> | 1 |
213| <a href='#Font_Size'>Font_Size</a> | 12 |
214| <a href='#Font_Skew_X'>Font_Skew_X</a> | 0 |
215| <a href='#Font_Subpixel'>Font_Subpixel</a> | false |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500216| <a href='#Image_Filter'>Image_Filter</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500217| <a href='#Paint_Miter_Limit'>Miter_Limit</a> | 4 |
218| <a href='#Mask_Filter'>Mask_Filter</a> | nullptr |
219| <a href='#Path_Effect'>Path_Effect</a> | nullptr |
Cary Clark682c58d2018-05-16 07:07:07 -0400220| <a href='undocumented#Shader'>Shader</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500221| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill_Style</a> |
Cary Clark3e73dcf2018-12-06 08:41:14 -0500222| <a href='#Text_Encoding'>Text_Encoding</a> | <a href='undocumented#kUTF8_SkTextEncoding'>kUTF8_SkTextEncoding</a> |
Cary Clark682c58d2018-05-16 07:07:07 -0400223| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
Cary Clark77b3f3a2018-11-07 14:59:03 -0500224| <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> |
225| <a href='#Paint_Stroke_Join'>Stroke_Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter_Join</a> |
226| <a href='#Paint_Stroke_Width'>Stroke_Width</a> | 0 |
Cary Clark12799e12017-07-28 15:18:29 -0400227
Cary Clark777eede2018-11-09 16:04:58 -0500228The flags, <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a>, hinting, and miter limit may be overridden at compile time by defining
229<a href='SkPaint_Reference#Paint'>paint</a> default values. The overrides may be included in "SkUserConfig.h" or predefined by the
230build system.
Cary Clark12799e12017-07-28 15:18:29 -0400231
232### Return Value
233
Cary Clark77b3f3a2018-11-07 14:59:03 -0500234default initialized <a href='SkPaint_Reference#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400235
236### Example
237
238<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
239
Cary Clark682c58d2018-05-16 07:07:07 -0400240<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400241
242---
Cary Clark12799e12017-07-28 15:18:29 -0400243
Cary Clark682c58d2018-05-16 07:07:07 -0400244<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500245<a href='#SkPaint_copy_const_SkPaint'>SkPaint</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400246</pre>
247
Cary Clark09d80c02018-10-31 12:14:03 -0400248Makes a shallow copy of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>. <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500249<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> are shared
250between the original <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a> and the copy. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400251their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400252
Cary Clark09d80c02018-10-31 12:14:03 -0400253The referenced objects <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500254<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> cannot be modified after they are created.
255This prevents objects with <a href='undocumented#SkRefCnt'>SkRefCnt</a> from being modified once <a href='SkPaint_Reference#SkPaint'>SkPaint</a> refers to them.
Cary Clark12799e12017-07-28 15:18:29 -0400256
257### Parameters
258
Cary Clark682c58d2018-05-16 07:07:07 -0400259<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
260 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400261 </tr>
262</table>
263
264### Return Value
265
Cary Clark77b3f3a2018-11-07 14:59:03 -0500266shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400267
268### Example
269
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000270<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400271
272#### Example Output
273
274~~~~
275SK_ColorRED == paint1.getColor()
276SK_ColorBLUE == paint2.getColor()
277~~~~
278
279</fiddle-embed></div>
280
Cary Clark682c58d2018-05-16 07:07:07 -0400281<a name='SkPaint_move_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400282
283---
Cary Clark12799e12017-07-28 15:18:29 -0400284
Cary Clark682c58d2018-05-16 07:07:07 -0400285<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500286<a href='#SkPaint_move_SkPaint'>SkPaint</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400287</pre>
288
Cary Clarkd0530ba2017-09-14 11:25:39 -0400289Implements a move constructor to avoid increasing the reference counts
Cary Clark77b3f3a2018-11-07 14:59:03 -0500290of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400291
Cary Clark777eede2018-11-09 16:04:58 -0500292After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400293
294### Parameters
295
Cary Clark682c58d2018-05-16 07:07:07 -0400296<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
297 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400298 </tr>
299</table>
300
301### Return Value
302
Cary Clark77b3f3a2018-11-07 14:59:03 -0500303content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400304
305### Example
306
Cary Clark83647062018-07-18 16:21:51 -0400307<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400308
309#### Example Output
310
311~~~~
312path effect unique: true
313~~~~
314
315</fiddle-embed></div>
316
Cary Clark682c58d2018-05-16 07:07:07 -0400317<a name='SkPaint_reset'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400318
319---
Cary Clark12799e12017-07-28 15:18:29 -0400320
Cary Clark682c58d2018-05-16 07:07:07 -0400321<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -0500322void <a href='#SkPaint_reset'>reset()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400323</pre>
324
Cary Clark777eede2018-11-09 16:04:58 -0500325Sets all <a href='SkPaint_Reference#SkPaint'>SkPaint</a> contents to their initial values. This is equivalent to replacing
326<a href='SkPaint_Reference#SkPaint'>SkPaint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400327
328### Example
329
330<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
331
332#### Example Output
333
334~~~~
335paint1 == paint2
336~~~~
337
338</fiddle-embed></div>
339
Cary Clark682c58d2018-05-16 07:07:07 -0400340<a name='SkPaint_destructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400341
342---
Cary Clark12799e12017-07-28 15:18:29 -0400343
Cary Clark682c58d2018-05-16 07:07:07 -0400344<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500345<a href='#SkPaint_destructor'>~SkPaint()</a>
Cary Clark12799e12017-07-28 15:18:29 -0400346</pre>
347
Cary Clark777eede2018-11-09 16:04:58 -0500348Decreases <a href='SkPaint_Reference#SkPaint'>SkPaint</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> of owned objects: <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
349<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a>. If the
350objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400351
Cary Clarka90ea222018-10-16 10:30:28 -0400352<a name='Management'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400353
Cary Clark682c58d2018-05-16 07:07:07 -0400354<a name='SkPaint_copy_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400355
356---
Cary Clark12799e12017-07-28 15:18:29 -0400357
Cary Clark682c58d2018-05-16 07:07:07 -0400358<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500359<a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400360</pre>
361
Cary Clark09d80c02018-10-31 12:14:03 -0400362Makes a shallow copy of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>. <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500363<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>, <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, and <a href='undocumented#SkImageFilter'>SkImageFilter</a> are shared
364between the original <a href='#SkPaint_copy_operator_paint'>paint</a> and the copy. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400365prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark777eede2018-11-09 16:04:58 -0500366resulting count is zero. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
367are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400368
369### Parameters
370
Cary Clark682c58d2018-05-16 07:07:07 -0400371<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
372 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400373 </tr>
374</table>
375
376### Return Value
377
Cary Clark77b3f3a2018-11-07 14:59:03 -0500378content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400379
380### Example
381
382<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
383
384#### Example Output
385
386~~~~
387SK_ColorRED == paint1.getColor()
388SK_ColorRED == paint2.getColor()
389~~~~
390
391</fiddle-embed></div>
392
Cary Clark682c58d2018-05-16 07:07:07 -0400393<a name='SkPaint_move_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400394
395---
Cary Clark12799e12017-07-28 15:18:29 -0400396
Cary Clark682c58d2018-05-16 07:07:07 -0400397<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500398<a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=</a>(<a href='SkPaint_Reference#SkPaint'>SkPaint</a>&& <a href='SkPaint_Reference#Paint'>paint</a>)
Cary Clark12799e12017-07-28 15:18:29 -0400399</pre>
400
Cary Clark777eede2018-11-09 16:04:58 -0500401Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
402of objects referenced by the <a href='#SkPaint_move_operator_paint'>paint</a> parameter. Objects containing <a href='undocumented#SkRefCnt'>SkRefCnt</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400403prior destination are decreased by one; those objects are deleted if the resulting count
404is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400405
Cary Clark777eede2018-11-09 16:04:58 -0500406After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400407
408### Parameters
409
Cary Clark682c58d2018-05-16 07:07:07 -0400410<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
411 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400412 </tr>
413</table>
414
415### Return Value
416
Cary Clark77b3f3a2018-11-07 14:59:03 -0500417content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400418
419### Example
420
Ravi Mistry874e22b2018-07-19 03:49:13 +0000421<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400422
423#### Example Output
424
425~~~~
426SK_ColorRED == paint2.getColor()
427~~~~
428
429</fiddle-embed></div>
430
Cary Clark682c58d2018-05-16 07:07:07 -0400431<a name='SkPaint_equal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400432
433---
Cary Clark12799e12017-07-28 15:18:29 -0400434
Cary Clark682c58d2018-05-16 07:07:07 -0400435<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500436bool <a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b)
Cary Clark12799e12017-07-28 15:18:29 -0400437</pre>
438
Cary Clark777eede2018-11-09 16:04:58 -0500439Compares <a href='#SkPaint_equal_operator_a'>a</a> and <a href='#SkPaint_equal_operator_b'>b</a>, and returns true if <a href='#SkPaint_equal_operator_a'>a</a> and <a href='#SkPaint_equal_operator_b'>b</a> are equivalent. May return false
Cary Clark09d80c02018-10-31 12:14:03 -0400440if <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500441<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, or <a href='undocumented#SkImageFilter'>SkImageFilter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400442
443### Parameters
444
Cary Clark682c58d2018-05-16 07:07:07 -0400445<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500446 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400447 </tr>
448 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500449 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400450 </tr>
451</table>
452
453### Return Value
454
Cary Clark777eede2018-11-09 16:04:58 -0500455true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400456
457### Example
458
459<div><fiddle-embed name="7481a948e34672720337a631830586dd">
460
461#### Example Output
462
463~~~~
464paint1 == paint2
465paint1 != paint2
466~~~~
467
468</fiddle-embed></div>
469
Cary Clark06c20f32018-03-20 15:53:27 -0400470### See Also
471
Cary Clarkcb6bef02018-11-29 12:05:25 -0500472<a href='#SkPaint_notequal_operator'>operator!=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_equal_operator_a'>a</a>, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_equal_operator_b'>b</a>)
Cary Clark06c20f32018-03-20 15:53:27 -0400473
Cary Clark682c58d2018-05-16 07:07:07 -0400474<a name='SkPaint_notequal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400475
476---
Cary Clark12799e12017-07-28 15:18:29 -0400477
Cary Clark682c58d2018-05-16 07:07:07 -0400478<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500479bool <a href='#SkPaint_notequal_operator'>operator!=</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b)
Cary Clark12799e12017-07-28 15:18:29 -0400480</pre>
481
Cary Clark777eede2018-11-09 16:04:58 -0500482Compares <a href='#SkPaint_notequal_operator_a'>a</a> and <a href='#SkPaint_notequal_operator_b'>b</a>, and returns true if <a href='#SkPaint_notequal_operator_a'>a</a> and <a href='#SkPaint_notequal_operator_b'>b</a> are not equivalent. May return true
Cary Clark09d80c02018-10-31 12:14:03 -0400483if <a href='undocumented#SkTypeface'>SkTypeface</a>, <a href='undocumented#SkPathEffect'>SkPathEffect</a>, <a href='undocumented#SkShader'>SkShader</a>, <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>, <a href='undocumented#SkColorFilter'>SkColorFilter</a>,
Cary Clark777eede2018-11-09 16:04:58 -0500484<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>, or <a href='undocumented#SkImageFilter'>SkImageFilter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400485
486### Parameters
487
Cary Clark682c58d2018-05-16 07:07:07 -0400488<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500489 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400490 </tr>
491 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500492 <td><a href='SkPaint_Reference#SkPaint'>SkPaint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400493 </tr>
494</table>
495
496### Return Value
497
Cary Clark777eede2018-11-09 16:04:58 -0500498true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400499
500### Example
501
skia-bookmakera717ca92018-07-08 05:32:09 +0000502<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400503
504#### Example Output
505
506~~~~
507paint1 == paint2
508paint1 == paint2
509~~~~
510
511</fiddle-embed></div>
512
Cary Clark06c20f32018-03-20 15:53:27 -0400513### See Also
514
Cary Clarkcb6bef02018-11-29 12:05:25 -0500515<a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_notequal_operator_a'>a</a>, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& <a href='#SkPaint_notequal_operator_b'>b</a>)
Cary Clark06c20f32018-03-20 15:53:27 -0400516
Cary Clark682c58d2018-05-16 07:07:07 -0400517<a name='SkPaint_getHash'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400518
519---
Cary Clark12799e12017-07-28 15:18:29 -0400520
Cary Clark682c58d2018-05-16 07:07:07 -0400521<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500522uint32_t <a href='#SkPaint_getHash'>getHash</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400523</pre>
524
Cary Clark777eede2018-11-09 16:04:58 -0500525Returns a hash generated from <a href='SkPaint_Reference#SkPaint'>SkPaint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400526Identical hashes guarantee that the paints are
527equivalent, but differing hashes do not guarantee that the paints have differing
528contents.
529
Cary Clarkcb6bef02018-11-29 12:05:25 -0500530If <a href='#SkPaint_equal_operator'>operator==</a>(const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& a, const <a href='SkPaint_Reference#SkPaint'>SkPaint</a>& b) returns true for two paints,
Cary Clark12799e12017-07-28 15:18:29 -0400531their hashes are also equal.
532
533The hash returned is platform and implementation specific.
534
535### Return Value
536
537a shallow hash
538
539### Example
540
Cary Clark83647062018-07-18 16:21:51 -0400541<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400542
543#### Example Output
544
545~~~~
546paint1 == paint2
547paint1.getHash() == paint2.getHash()
548~~~~
549
550</fiddle-embed></div>
551
Cary Clarka90ea222018-10-16 10:30:28 -0400552<a name='Hinting'></a>
553
Cary Clark682c58d2018-05-16 07:07:07 -0400554<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400555
556---
Cary Clark12799e12017-07-28 15:18:29 -0400557
Cary Clark682c58d2018-05-16 07:07:07 -0400558<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500559void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='undocumented#SkFontHinting'>SkFontHinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400560</pre>
561
Cary Clark777eede2018-11-09 16:04:58 -0500562Sets level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400563Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400564
Cary Clark12799e12017-07-28 15:18:29 -0400565### Parameters
566
Cary Clark682c58d2018-05-16 07:07:07 -0400567<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
Cary Clark885f1072018-11-08 13:31:39 -0500568 <td>one of: <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>,</td>
skia-bookmakere6c85752018-11-06 05:32:09 +0000569 </tr>
570</table>
571
Cary Clark885f1072018-11-08 13:31:39 -0500572<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
skia-bookmakere6c85752018-11-06 05:32:09 +0000573
574### Example
575
skia-bookmaker6894f222018-12-02 05:59:00 +0000576<div><fiddle-embed name="bb179ec5698ec1398ff18f3657ab73f7">
skia-bookmakere6c85752018-11-06 05:32:09 +0000577
578#### Example Output
579
580~~~~
581paint1 == paint2
582~~~~
583
584</fiddle-embed></div>
585
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500586<a name='SkPaint_getHinting'></a>
587
588---
589
590<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500591<a href='undocumented#SkFontHinting'>SkFontHinting</a> <a href='#SkPaint_getHinting'>getHinting</a>()const
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500592</pre>
593
594Returns level of <a href='undocumented#Glyph'>glyph</a> outline adjustment.
595
596### Return Value
597
Cary Clarkabaffd82018-11-15 08:25:12 -0500598one of: <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>, <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>,
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500599
Cary Clarkabaffd82018-11-15 08:25:12 -0500600<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500601
Cary Clarkabaffd82018-11-15 08:25:12 -0500602### Example
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500603
Cary Clarkabaffd82018-11-15 08:25:12 -0500604<div><fiddle-embed name="b56b70c7ea2453c41bfa58b626953bed">
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500605
Cary Clarkabaffd82018-11-15 08:25:12 -0500606#### Example Output
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500607
Cary Clarkabaffd82018-11-15 08:25:12 -0500608~~~~
609SkFontHinting::kNormal == paint.getHinting()
610~~~~
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500611
Cary Clarkabaffd82018-11-15 08:25:12 -0500612</fiddle-embed></div>
Cary Clark8cc4cdc2018-11-09 23:16:58 -0500613
Cary Clarka90ea222018-10-16 10:30:28 -0400614<a name='Flags'></a>
615
616<a name='SkPaint_Flags'></a>
617
Cary Clark12799e12017-07-28 15:18:29 -0400618---
619
Cary Clarka560c472017-11-27 10:44:06 -0500620<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400621 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clark777eede2018-11-09 16:04:58 -0500622 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
623 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
624 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
625 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
626 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
627 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
628 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
629 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
630 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400631 };
Cary Clarkcb6bef02018-11-29 12:05:25 -0500632
Cary Clark12799e12017-07-28 15:18:29 -0400633</pre>
634
Cary Clark682c58d2018-05-16 07:07:07 -0400635The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
Cary Clark777eede2018-11-09 16:04:58 -0500636The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
637with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a>.
638All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
639multiple settings at once.
Cary Clark12799e12017-07-28 15:18:29 -0400640
641### Constants
642
Cary Clark682c58d2018-05-16 07:07:07 -0400643<table style='border-collapse: collapse; width: 62.5em'>
644 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
645<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
646<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
647 <tr style='background-color: #f0f0f0; '>
648 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
649 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
650 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400651mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400652 </tr>
653 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400654 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
655 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
656 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
657mask for setting Dither</td>
658 </tr>
659 <tr style='background-color: #f0f0f0; '>
660 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
661 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
662 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500663mask for setting Font_Embolden</td>
Cary Clark12799e12017-07-28 15:18:29 -0400664 </tr>
665 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
667 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
668 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500669mask for setting Font_Linear</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400670 </tr>
671 <tr style='background-color: #f0f0f0; '>
672 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
673 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
674 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500675mask for setting Font_Subpixel</td>
Cary Clark12799e12017-07-28 15:18:29 -0400676 </tr>
677 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
679 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
680 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500681mask for setting Font_Anti_Alias</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400682 </tr>
683 <tr style='background-color: #f0f0f0; '>
684 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
685 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
686 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
687mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400688 </tr>
689 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400690 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
691 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
692 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark3e73dcf2018-12-06 08:41:14 -0500693mask for setting Font_Force_Hinting</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400694 </tr>
695 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400696 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
697 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
698 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -0500699mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use
Cary Clark77b3f3a2018-11-07 14:59:03 -0500700</td>
Cary Clark12799e12017-07-28 15:18:29 -0400701 </tr>
Cary Clark777eede2018-11-09 16:04:58 -0500702<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark682c58d2018-05-16 07:07:07 -0400703</table>
Cary Clark12799e12017-07-28 15:18:29 -0400704
Cary Clark682c58d2018-05-16 07:07:07 -0400705<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400706
707---
Cary Clark12799e12017-07-28 15:18:29 -0400708
Cary Clark682c58d2018-05-16 07:07:07 -0400709<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500710uint32_t <a href='#SkPaint_getFlags'>getFlags</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400711</pre>
712
Cary Clark777eede2018-11-09 16:04:58 -0500713Returns <a href='SkPaint_Reference#Paint'>paint</a> settings described by <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
714bit, and can be tested with <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400715
716### Return Value
717
Cary Clark09d80c02018-10-31 12:14:03 -0400718zero, one, or more bits described by <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400719
720### Example
721
722<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
723
724#### Example Output
725
726~~~~
727(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
728~~~~
729
730</fiddle-embed></div>
731
Cary Clark682c58d2018-05-16 07:07:07 -0400732<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400733
734---
Cary Clark12799e12017-07-28 15:18:29 -0400735
Cary Clark682c58d2018-05-16 07:07:07 -0400736<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500737void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400738</pre>
739
Cary Clark777eede2018-11-09 16:04:58 -0500740Replaces <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> with <a href='#SkPaint_setFlags_flags'>flags</a>, the union of the <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members.
741All <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400742
743### Parameters
744
Cary Clark682c58d2018-05-16 07:07:07 -0400745<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -0500746 <td>union of <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> for <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400747 </tr>
748</table>
749
750### Example
751
752<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
753
754#### Example Output
755
756~~~~
757paint.isAntiAlias()
758paint.isDither()
759~~~~
760
761</fiddle-embed></div>
762
Cary Clarka90ea222018-10-16 10:30:28 -0400763<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400764
Cary Clarka90ea222018-10-16 10:30:28 -0400765---
Cary Clark08895c42018-02-01 09:37:32 -0500766
Cary Clark777eede2018-11-09 16:04:58 -0500767<a href='#Paint_Anti_Alias'>Anti_Alias</a> drawing approximates partial <a href='undocumented#Pixel'>pixel</a> coverage with transparency.
768If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, <a href='undocumented#Pixel'>pixel</a> centers contained by the shape edge are drawn opaque.
769If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, pixels are drawn with <a href='#Color_Alpha'>Color_Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400770
Cary Clark777eede2018-11-09 16:04:58 -0500771The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
772passing through the <a href='undocumented#Pixel'>pixel</a> center may, but is not required to, draw the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400773
Cary Clark777eede2018-11-09 16:04:58 -0500774<a href='#Raster_Engine'>Raster_Engine</a> draws <a href='undocumented#Alias'>Aliased</a> pixels whose centers are on or to the right of the start of an
775active <a href='SkPath_Reference#Path'>Path</a> edge, and whose center is to the left of the end of the active <a href='SkPath_Reference#Path'>Path</a> edge.
Cary Clark12799e12017-07-28 15:18:29 -0400776
Cary Clark777eede2018-11-09 16:04:58 -0500777A platform may only support <a href='#Paint_Anti_Alias'>Anti_Aliased</a> drawing. Some GPU-backed platforms use
778<a href='undocumented#Supersampling'>Supersampling</a> to <a href='#Paint_Anti_Alias'>Anti_Alias</a> all drawing, and have no mechanism to selectively
Cary Clark682c58d2018-05-16 07:07:07 -0400779<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400780
Cary Clark777eede2018-11-09 16:04:58 -0500781The amount of coverage computed for <a href='#Paint_Anti_Alias'>Anti_Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400782
Cary Clark777eede2018-11-09 16:04:58 -0500783<a href='#Paint_Anti_Alias'>Anti_Alias</a> is disabled by default.
784<a href='#Paint_Anti_Alias'>Anti_Alias</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>
785at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400786
787### Example
788
Cary Clark777eede2018-11-09 16:04:58 -0500789<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red <a href='undocumented#Line'>line</a> is drawn with transparency on the edges to make it look smoother.
790A blue <a href='undocumented#Line'>line</a> draws only where the <a href='undocumented#Pixel'>pixel</a> centers are contained.
791The <a href='undocumented#Line'>lines</a> are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
792<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500793</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400794
Cary Clark682c58d2018-05-16 07:07:07 -0400795<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400796
797---
Cary Clark12799e12017-07-28 15:18:29 -0400798
Cary Clark682c58d2018-05-16 07:07:07 -0400799<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500800bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400801</pre>
802
Cary Clark777eede2018-11-09 16:04:58 -0500803Returns true if pixels on the active edges of <a href='SkPath_Reference#SkPath'>SkPath</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -0400804
Cary Clark777eede2018-11-09 16:04:58 -0500805Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400806
807### Return Value
808
Cary Clark777eede2018-11-09 16:04:58 -0500809<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400810
811### Example
812
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000813<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -0400814
815#### Example Output
816
817~~~~
818paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
819paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
820~~~~
821
822</fiddle-embed></div>
823
Cary Clark682c58d2018-05-16 07:07:07 -0400824<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400825
826---
Cary Clark12799e12017-07-28 15:18:29 -0400827
Cary Clark682c58d2018-05-16 07:07:07 -0400828<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500829void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -0400830</pre>
831
skia-bookmaker8be41962018-11-20 05:34:36 +0000832Requests, but does not require, that edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -0400833partial transparency.
834
Cary Clark777eede2018-11-09 16:04:58 -0500835Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
836Clears <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -0400837
838### Parameters
839
Cary Clark682c58d2018-05-16 07:07:07 -0400840<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400841 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400842 </tr>
843</table>
844
845### Example
846
skia-bookmakerb95bbba2018-07-06 05:23:23 +0000847<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -0400848
849#### Example Output
850
851~~~~
852paint1 == paint2
853~~~~
854
855</fiddle-embed></div>
856
Cary Clarka90ea222018-10-16 10:30:28 -0400857<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400858
Cary Clarka90ea222018-10-16 10:30:28 -0400859---
Cary Clark08895c42018-02-01 09:37:32 -0500860
Cary Clark777eede2018-11-09 16:04:58 -0500861Dither increases fidelity by adjusting the <a href='SkColor_Reference#Color'>color</a> of adjacent pixels.
862This can help to smooth <a href='SkColor_Reference#Color'>color</a> transitions and reducing banding in gradients.
863Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
864and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
865and improves rendering into a <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400866
Cary Clark777eede2018-11-09 16:04:58 -0500867Dithering is always enabled for linear gradients drawing into
868<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
869Dither cannot be enabled for <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and
Cary Clark682c58d2018-05-16 07:07:07 -0400870<a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400871
Cary Clark777eede2018-11-09 16:04:58 -0500872Dither is disabled by default.
873Dither can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>
874at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400875
Cary Clark777eede2018-11-09 16:04:58 -0500876Some platform implementations may ignore dithering. Set <code>SK_IGNORE_GPU_DITHER</code>to ignore Dither on <a href='#GPU_Surface'>GPU_Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400877
878### Example
879
Cary Clark777eede2018-11-09 16:04:58 -0500880<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested <a href='SkColor_Reference#Color'>color</a> by
881alternating nearby colors from <a href='undocumented#Pixel'>pixel</a> to <a href='undocumented#Pixel'>pixel</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -0500882</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400883
884### Example
885
Cary Clark777eede2018-11-09 16:04:58 -0500886<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to <a href='SkColor_Reference#Color'>color</a> to smooth gradients.
887Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kPlus'>kPlus</a> exaggerates the
888dither, making it easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -0500889</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400890
Cary Clarka90ea222018-10-16 10:30:28 -0400891### See Also
892
893Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
894
Cary Clark682c58d2018-05-16 07:07:07 -0400895<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400896
897---
Cary Clark12799e12017-07-28 15:18:29 -0400898
Cary Clark682c58d2018-05-16 07:07:07 -0400899<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500900bool <a href='#SkPaint_isDither'>isDither</a>()const
Cary Clark12799e12017-07-28 15:18:29 -0400901</pre>
902
Cary Clark777eede2018-11-09 16:04:58 -0500903Returns true if <a href='SkColor_Reference#Color'>color</a> error may be distributed to smooth <a href='SkColor_Reference#Color'>color</a> transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +0000904
Cary Clark777eede2018-11-09 16:04:58 -0500905Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kDither_Flag'>kDither_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400906
907### Return Value
908
Cary Clark777eede2018-11-09 16:04:58 -0500909<a href='#SkPaint_kDither_Flag'>kDither_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400910
911### Example
912
913<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
914
915#### Example Output
916
917~~~~
918paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
919paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
920~~~~
921
922</fiddle-embed></div>
923
Cary Clark682c58d2018-05-16 07:07:07 -0400924<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400925
926---
Cary Clark12799e12017-07-28 15:18:29 -0400927
Cary Clark682c58d2018-05-16 07:07:07 -0400928<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -0500929void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -0400930</pre>
931
Cary Clark777eede2018-11-09 16:04:58 -0500932Requests, but does not require, to distribute <a href='SkColor_Reference#Color'>color</a> error.
Cary Clark12799e12017-07-28 15:18:29 -0400933
Cary Clark777eede2018-11-09 16:04:58 -0500934Sets <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
935Clears <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -0400936
937### Parameters
938
Cary Clark682c58d2018-05-16 07:07:07 -0400939<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -0400940 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400941 </tr>
942</table>
943
944### Example
945
946<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
947
948#### Example Output
949
950~~~~
951paint1 == paint2
952~~~~
953
954</fiddle-embed></div>
955
956### See Also
957
Cary Clark682c58d2018-05-16 07:07:07 -0400958<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -0400959
Cary Clarka90ea222018-10-16 10:30:28 -0400960<a name='Device_Text'></a>
961
Cary Clark12799e12017-07-28 15:18:29 -0400962---
963
Cary Clark3e73dcf2018-12-06 08:41:14 -0500964<a href='#Font_Anti_Alias'>Font_Anti_Alias</a> and <a href='#Font_Subpixel'>Font_Subpixel</a> increase the precision of <a href='undocumented#Glyph'>glyph</a> position.
Cary Clark12799e12017-07-28 15:18:29 -0400965
Cary Clark777eede2018-11-09 16:04:58 -0500966When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> takes advantage of the organization of RGB stripes that
967create a <a href='SkColor_Reference#Color'>color</a>, and relies
968on the small <a href='undocumented#Size'>size</a> of the stripe and visual perception to make the <a href='SkColor_Reference#Color'>color</a> fringing imperceptible.
Cary Clark3e73dcf2018-12-06 08:41:14 -0500969<a href='#Font_Anti_Alias'>Font_Anti_Alias</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark777eede2018-11-09 16:04:58 -0500970the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -0400971
Cary Clark777eede2018-11-09 16:04:58 -0500972<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> uses the <a href='undocumented#Pixel'>pixel</a> transparency to represent a fractional offset.
973As the opaqueness
974of the <a href='SkColor_Reference#Color'>color</a> increases, the edge of the <a href='undocumented#Glyph'>glyph</a> appears to move towards the outside of the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400975
Cary Clark777eede2018-11-09 16:04:58 -0500976Either or both techniques can be enabled.
977<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> are clear by default.
Cary Clark3e73dcf2018-12-06 08:41:14 -0500978<a href='#Font_Anti_Alias'>Font_Anti_Alias</a> or <a href='#Font_Subpixel'>Font_Subpixel</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to
Cary Clark777eede2018-11-09 16:04:58 -0500979<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> or <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> (or both) at compile time.
Cary Clark12799e12017-07-28 15:18:29 -0400980
981### Example
982
Cary Clark3e73dcf2018-12-06 08:41:14 -0500983<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href='#Font_Anti_Alias'>Font_Anti_Alias</a> and <a href='#Font_Subpixel'>Font_Subpixel</a>.
984When <a href='#Font_Subpixel'>Font_Subpixel</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
985When <a href='#Font_Subpixel'>Font_Subpixel</a> is enabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are unique, but appear evenly spaced.
Cary Clark1a8d7622018-03-05 13:26:16 -0500986</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400987
Cary Clarka90ea222018-10-16 10:30:28 -0400988<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400989
Cary Clark3e73dcf2018-12-06 08:41:14 -0500990<a href='#Font_Linear'>Font_Linear</a> selects whether <a href='undocumented#Text'>text</a> is rendered as a <a href='undocumented#Glyph'>Glyph</a> or as a <a href='SkPath_Reference#Path'>Path</a>.
991If <a href='#Font_Linear'>Font_Linear</a> is set, it has the same effect as setting Hinting to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a>.
992If <a href='#Font_Linear'>Font_Linear</a> is clear, it is the same as setting Hinting to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400993
Cary Clark682c58d2018-05-16 07:07:07 -0400994<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400995
996---
Cary Clark12799e12017-07-28 15:18:29 -0400997
Cary Clark682c58d2018-05-16 07:07:07 -0400998<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -0500999bool <a href='#SkPaint_isLinearText'>isLinearText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001000</pre>
1001
Cary Clark777eede2018-11-09 16:04:58 -05001002Returns true if <a href='undocumented#Text'>text</a> is converted to <a href='SkPath_Reference#SkPath'>SkPath</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001003
Cary Clark777eede2018-11-09 16:04:58 -05001004Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001005
1006### Return Value
1007
Cary Clark777eede2018-11-09 16:04:58 -05001008<a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001009
1010### Example
1011
1012<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1013
1014### See Also
1015
Cary Clarkabaffd82018-11-15 08:25:12 -05001016<a href='#SkPaint_setLinearText'>setLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001017
Cary Clark682c58d2018-05-16 07:07:07 -04001018<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001019
1020---
Cary Clark12799e12017-07-28 15:18:29 -04001021
Cary Clark682c58d2018-05-16 07:07:07 -04001022<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001023void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001024</pre>
1025
skia-bookmaker8be41962018-11-20 05:34:36 +00001026Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> are converted to <a href='SkPath_Reference#SkPath'>SkPath</a>
1027before drawing and measuring.
Cary Clark777eede2018-11-09 16:04:58 -05001028By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001029
Cary Clark777eede2018-11-09 16:04:58 -05001030Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1031Clears <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001032
1033### Parameters
1034
Cary Clark682c58d2018-05-16 07:07:07 -04001035<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001036 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001037 </tr>
1038</table>
1039
1040### Example
1041
Cary Clark83647062018-07-18 16:21:51 -04001042<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001043
1044### See Also
1045
Cary Clarkabaffd82018-11-15 08:25:12 -05001046<a href='#SkPaint_isLinearText'>isLinearText</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001047
Cary Clarka90ea222018-10-16 10:30:28 -04001048<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001049
Cary Clark777eede2018-11-09 16:04:58 -05001050<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> uses the <a href='undocumented#Pixel'>pixel</a> transparency to represent a fractional offset.
1051As the opaqueness
1052of the <a href='SkColor_Reference#Color'>color</a> increases, the edge of the <a href='undocumented#Glyph'>glyph</a> appears to move towards the outside of the <a href='undocumented#Pixel'>pixel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001053
Cary Clark682c58d2018-05-16 07:07:07 -04001054<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001055
1056---
Cary Clark12799e12017-07-28 15:18:29 -04001057
Cary Clark682c58d2018-05-16 07:07:07 -04001058<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001059bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001060</pre>
1061
Cary Clark3e73dcf2018-12-06 08:41:14 -05001062Returns true if <a href='undocumented#Glyph'>glyphs</a> at different <a href='SkFont_Reference#Subpixel'>sub-pixel</a> positions may differ on <a href='undocumented#Pixel'>pixel</a> edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001063
Cary Clark777eede2018-11-09 16:04:58 -05001064Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001065
1066### Return Value
1067
Cary Clark777eede2018-11-09 16:04:58 -05001068<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001069
1070### Example
1071
1072<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1073
1074#### Example Output
1075
1076~~~~
1077paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1078paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1079~~~~
1080
1081</fiddle-embed></div>
1082
Cary Clark682c58d2018-05-16 07:07:07 -04001083<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001084
1085---
Cary Clark12799e12017-07-28 15:18:29 -04001086
Cary Clark682c58d2018-05-16 07:07:07 -04001087<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001088void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001089</pre>
1090
Cary Clark3e73dcf2018-12-06 08:41:14 -05001091Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> respect <a href='SkFont_Reference#Subpixel'>sub-pixel</a> positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001092
Cary Clark777eede2018-11-09 16:04:58 -05001093Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1094Clears <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001095
1096### Parameters
1097
Cary Clark682c58d2018-05-16 07:07:07 -04001098<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001099 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001100 </tr>
1101</table>
1102
1103### Example
1104
1105<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1106
1107#### Example Output
1108
1109~~~~
1110paint1 == paint2
1111~~~~
1112
1113</fiddle-embed></div>
1114
Cary Clarka90ea222018-10-16 10:30:28 -04001115<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001116
Cary Clark3e73dcf2018-12-06 08:41:14 -05001117When set, <a href='#Font_Anti_Alias'>Font_Anti_Alias</a> takes advantage of the organization of RGB stripes that
Cary Clark777eede2018-11-09 16:04:58 -05001118create a <a href='SkColor_Reference#Color'>color</a>, and relies
1119on the small <a href='undocumented#Size'>size</a> of the stripe and visual perception to make the <a href='SkColor_Reference#Color'>color</a> fringing imperceptible.
Cary Clark3e73dcf2018-12-06 08:41:14 -05001120<a href='#Font_Anti_Alias'>Font_Anti_Alias</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark777eede2018-11-09 16:04:58 -05001121the <a href='SkColor_Reference#Color'>color</a> components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001122
Cary Clark682c58d2018-05-16 07:07:07 -04001123<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001124
1125---
Cary Clark12799e12017-07-28 15:18:29 -04001126
Cary Clark682c58d2018-05-16 07:07:07 -04001127<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001128bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001129</pre>
1130
Cary Clark777eede2018-11-09 16:04:58 -05001131Returns true if <a href='undocumented#Glyph'>glyphs</a> may use LCD striping to improve <a href='undocumented#Glyph'>glyph</a> edges.
Cary Clark12799e12017-07-28 15:18:29 -04001132
Cary Clark777eede2018-11-09 16:04:58 -05001133Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> is set.
Cary Clark12799e12017-07-28 15:18:29 -04001134
1135### Return Value
1136
Cary Clark777eede2018-11-09 16:04:58 -05001137<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001138
1139### Example
1140
skia-bookmakera391c722018-07-09 05:28:19 +00001141<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001142
1143#### Example Output
1144
1145~~~~
1146paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1147paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1148~~~~
1149
1150</fiddle-embed></div>
1151
Cary Clark682c58d2018-05-16 07:07:07 -04001152<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001153
1154---
Cary Clark12799e12017-07-28 15:18:29 -04001155
Cary Clark682c58d2018-05-16 07:07:07 -04001156<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001157void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001158</pre>
1159
Cary Clark777eede2018-11-09 16:04:58 -05001160Requests, but does not require, that <a href='undocumented#Glyph'>glyphs</a> use LCD striping for <a href='undocumented#Glyph'>glyph</a> edges.
Cary Clark12799e12017-07-28 15:18:29 -04001161
Cary Clark777eede2018-11-09 16:04:58 -05001162Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1163Clears <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001164
1165### Parameters
1166
Cary Clark682c58d2018-05-16 07:07:07 -04001167<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001168 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001169 </tr>
1170</table>
1171
1172### Example
1173
skia-bookmakere0a458f2018-07-16 05:29:00 +00001174<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001175
1176#### Example Output
1177
1178~~~~
1179paint1 == paint2
1180~~~~
1181
1182</fiddle-embed></div>
1183
Cary Clark3e73dcf2018-12-06 08:41:14 -05001184<a name='Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001185
Cary Clarka90ea222018-10-16 10:30:28 -04001186---
Cary Clark08895c42018-02-01 09:37:32 -05001187
Cary Clark3e73dcf2018-12-06 08:41:14 -05001188<a href='#Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> allows selecting custom sized <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark777eede2018-11-09 16:04:58 -05001189<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> when set chooses an embedded <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> over an outline contained
Cary Clarkcb6bef02018-11-29 12:05:25 -05001190in a <a href='SkFont_Reference#Font'>font</a> if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001191
Cary Clark777eede2018-11-09 16:04:58 -05001192FreeType selects the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is set, and selects
1193the outline <a href='undocumented#Glyph'>glyph</a> if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> is clear.
1194Windows may select the <a href='SkBitmap_Reference#Bitmap'>bitmap</a> <a href='undocumented#Glyph'>glyph</a> but is not required to do so.
1195<a href='#OS_X'>OS_X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001196
Cary Clark3e73dcf2018-12-06 08:41:14 -05001197<a href='#Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> is disabled by default.
1198<a href='#Font_Embedded_Bitmaps'>Font_Embedded_Bitmaps</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults_Flags</a> to
Cary Clark777eede2018-11-09 16:04:58 -05001199<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001200
1201### Example
1202
Cary Clarka560c472017-11-27 10:44:06 -05001203<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001204<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001205 includes an embedded bitmap Glyph at odd font sizes. This example works
1206 on platforms that use FreeType as their Font_Engine.
1207 Windows may, but is not required to, return a bitmap glyph if
1208 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1209 bitmap.allocN32Pixels(30, 15);
1210 bitmap.eraseColor(0);
1211 SkCanvas offscreen(bitmap);
1212 SkPaint paint;
1213 paint.setAntiAlias(true);
1214 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001215 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001216 for (bool embedded : { false, true}) {
1217 paint.setEmbeddedBitmapText(embedded);
1218 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1219 }
1220 canvas->drawBitmap(bitmap, 0, 0);
1221 canvas->scale(10, 10);
1222 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001223
Cary Clarka560c472017-11-27 10:44:06 -05001224</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001225
Cary Clark682c58d2018-05-16 07:07:07 -04001226<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001227
1228---
Cary Clark12799e12017-07-28 15:18:29 -04001229
Cary Clark682c58d2018-05-16 07:07:07 -04001230<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001231bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001232</pre>
1233
Cary Clarkcb6bef02018-11-29 12:05:25 -05001234Returns true if <a href='SkFont_Reference#Font'>font</a> engine may return <a href='undocumented#Glyph'>glyphs</a> from <a href='SkFont_Reference#Font'>font</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001235
Cary Clark777eede2018-11-09 16:04:58 -05001236Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001237
1238### Return Value
1239
Cary Clark777eede2018-11-09 16:04:58 -05001240<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001241
1242### Example
1243
1244<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1245
1246#### Example Output
1247
1248~~~~
1249paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1250paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1251~~~~
1252
1253</fiddle-embed></div>
1254
Cary Clark682c58d2018-05-16 07:07:07 -04001255<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001256
1257---
Cary Clark12799e12017-07-28 15:18:29 -04001258
Cary Clark682c58d2018-05-16 07:07:07 -04001259<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001260void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001261</pre>
1262
Cary Clark777eede2018-11-09 16:04:58 -05001263Requests, but does not require, to use <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> in fonts instead of outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001264
Cary Clark777eede2018-11-09 16:04:58 -05001265Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1266Clears <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001267
1268### Parameters
1269
Cary Clark682c58d2018-05-16 07:07:07 -04001270<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001271 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001272 </tr>
1273</table>
1274
1275### Example
1276
1277<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1278
1279#### Example Output
1280
1281~~~~
1282paint1 == paint2
1283~~~~
1284
1285</fiddle-embed></div>
1286
Cary Clarka90ea222018-10-16 10:30:28 -04001287<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001288
Cary Clark3e73dcf2018-12-06 08:41:14 -05001289If Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, <a href='#Font_Force_Hinting'>Font_Force_Hinting</a>
Cary Clark777eede2018-11-09 16:04:58 -05001290instructs the <a href='#Font_Manager'>Font_Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark3e73dcf2018-12-06 08:41:14 -05001291<a href='#Font_Force_Hinting'>Font_Force_Hinting</a> has no effect if Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001292<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001293
Cary Clark3e73dcf2018-12-06 08:41:14 -05001294<a href='#Font_Force_Hinting'>Font_Force_Hinting</a> only affects platforms that use FreeType as the <a href='#Font_Manager'>Font_Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001295
Cary Clark682c58d2018-05-16 07:07:07 -04001296<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001297
1298---
Cary Clark12799e12017-07-28 15:18:29 -04001299
Cary Clark682c58d2018-05-16 07:07:07 -04001300<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001301bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001302</pre>
1303
Cary Clarkabaffd82018-11-15 08:25:12 -05001304Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or
Cary Clarkcb6bef02018-11-29 12:05:25 -05001305<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>, and if platform uses FreeType as the <a href='SkFont_Reference#Font'>font</a> manager.
1306If true, instructs the <a href='SkFont_Reference#Font'>font</a> manager to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001307
Cary Clark777eede2018-11-09 16:04:58 -05001308Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001309
1310### Return Value
1311
Cary Clark777eede2018-11-09 16:04:58 -05001312<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001313
1314### Example
1315
1316<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1317
1318#### Example Output
1319
1320~~~~
1321paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1322paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1323~~~~
1324
1325</fiddle-embed></div>
1326
1327### See Also
1328
Cary Clarkabaffd82018-11-15 08:25:12 -05001329<a href='#SkPaint_setAutohinted'>setAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001330
Cary Clark682c58d2018-05-16 07:07:07 -04001331<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001332
1333---
Cary Clark12799e12017-07-28 15:18:29 -04001334
Cary Clark682c58d2018-05-16 07:07:07 -04001335<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001336void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001337</pre>
1338
Cary Clark09d80c02018-10-31 12:14:03 -04001339Sets whether to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clarkabaffd82018-11-15 08:25:12 -05001340If <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNormal'>kNormal</a> or <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kFull'>kFull</a>
Cary Clark777eede2018-11-09 16:04:58 -05001341and <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is set, instructs the <a href='undocumented#Font_Manager'>font manager</a> to always hint <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark3e73dcf2018-12-06 08:41:14 -05001342<a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> has no effect if <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::Hinting is set to <a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kNone'>kNone</a> or
Cary Clark777eede2018-11-09 16:04:58 -05001343<a href='undocumented#SkFontHinting'>SkFontHinting</a>::<a href='#SkFontHinting_kSlight'>kSlight</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001344
Cary Clark09d80c02018-10-31 12:14:03 -04001345Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>font manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001346
Cary Clark777eede2018-11-09 16:04:58 -05001347Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1348Clears <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001349
1350### Parameters
1351
Cary Clark682c58d2018-05-16 07:07:07 -04001352<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001353 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001354 </tr>
1355</table>
1356
1357### Example
1358
1359<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1360
1361### See Also
1362
Cary Clarkabaffd82018-11-15 08:25:12 -05001363<a href='#SkPaint_isAutohinted'>isAutohinted</a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -04001364
Cary Clarka90ea222018-10-16 10:30:28 -04001365<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001366
Cary Clarka90ea222018-10-16 10:30:28 -04001367---
Cary Clark08895c42018-02-01 09:37:32 -05001368
Cary Clark3e73dcf2018-12-06 08:41:14 -05001369<a href='#Font_Embolden'>Font_Embolden</a> approximates the bold <a href='SkFont_Reference#Font'>font</a> style accompanying a normal <a href='SkFont_Reference#Font'>font</a> when a bold <a href='SkFont_Reference#Font'>font</a> face
Cary Clarkcb6bef02018-11-29 12:05:25 -05001370is not available. Skia does not provide <a href='SkFont_Reference#Font'>font</a> substitution; it is up to the client to find the
1371bold <a href='SkFont_Reference#Font'>font</a> face using the platform <a href='#Font_Manager'>Font_Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001372
Cary Clarkcb6bef02018-11-29 12:05:25 -05001373Use <a href='#Paint_Text_Skew_X'>Text_Skew_X</a> to approximate an italic <a href='SkFont_Reference#Font'>font</a> style when the italic <a href='SkFont_Reference#Font'>font</a> face
Cary Clark777eede2018-11-09 16:04:58 -05001374is not available.
Cary Clark12799e12017-07-28 15:18:29 -04001375
Cary Clark777eede2018-11-09 16:04:58 -05001376A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkcb6bef02018-11-29 12:05:25 -05001377the <a href='SkFont_Reference#Font_Engine'>font engine</a> to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark777eede2018-11-09 16:04:58 -05001378by increasing the <a href='#Stroke_Width'>stroke width</a> and setting the <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> as needed.
Cary Clark12799e12017-07-28 15:18:29 -04001379
Cary Clark3e73dcf2018-12-06 08:41:14 -05001380<a href='#Font_Embolden'>Font_Embolden</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001381
1382### Example
1383
1384<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1385
Cary Clark682c58d2018-05-16 07:07:07 -04001386<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001387
1388---
Cary Clark12799e12017-07-28 15:18:29 -04001389
Cary Clark682c58d2018-05-16 07:07:07 -04001390<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001391bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001392</pre>
1393
Cary Clark77b3f3a2018-11-07 14:59:03 -05001394Returns true if approximate bold by increasing the stroke width when creating <a href='undocumented#Glyph'>glyph</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a>
Cary Clark12799e12017-07-28 15:18:29 -04001395from outlines.
1396
Cary Clark777eede2018-11-09 16:04:58 -05001397Equivalent to <a href='#SkPaint_getFlags'>getFlags</a>() masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001398
1399### Return Value
1400
Cary Clark777eede2018-11-09 16:04:58 -05001401<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001402
1403### Example
1404
1405<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1406
1407#### Example Output
1408
1409~~~~
1410paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1411paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1412~~~~
1413
1414</fiddle-embed></div>
1415
Cary Clark682c58d2018-05-16 07:07:07 -04001416<a name='SkPaint_setFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001417
1418---
Cary Clark12799e12017-07-28 15:18:29 -04001419
Cary Clark682c58d2018-05-16 07:07:07 -04001420<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001421void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001422</pre>
1423
Cary Clark777eede2018-11-09 16:04:58 -05001424Increases <a href='#Stroke_Width'>stroke width</a> when creating <a href='undocumented#Glyph'>glyph</a> <a href='SkBitmap_Reference#Bitmap'>bitmaps</a> to approximate a bold <a href='undocumented#Typeface'>typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001425
Cary Clark777eede2018-11-09 16:04:58 -05001426Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1427Clears <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001428
1429### Parameters
1430
Cary Clark682c58d2018-05-16 07:07:07 -04001431<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001432 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001433 </tr>
1434</table>
1435
1436### Example
1437
1438<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1439
1440#### Example Output
1441
1442~~~~
1443paint1 == paint2
1444~~~~
1445
1446</fiddle-embed></div>
1447
Cary Clarka90ea222018-10-16 10:30:28 -04001448<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001449
Cary Clarka90ea222018-10-16 10:30:28 -04001450---
Cary Clark08895c42018-02-01 09:37:32 -05001451
Cary Clark777eede2018-11-09 16:04:58 -05001452<a href='#Filter_Quality'>Filter_Quality</a> trades speed for <a href='SkImage_Reference#Image'>image</a> filtering when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1453A lower <a href='#Filter_Quality'>Filter_Quality</a> draws faster, but has less fidelity.
1454A higher <a href='#Filter_Quality'>Filter_Quality</a> draws slower, but looks better.
1455If the <a href='SkImage_Reference#Image'>image</a> is drawn without scaling, the <a href='#Filter_Quality'>Filter_Quality</a> choice will not result
1456in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001457
Cary Clark777eede2018-11-09 16:04:58 -05001458<a href='#Filter_Quality'>Filter_Quality</a> is used in <a href='SkPaint_Reference#Paint'>Paint</a> passed as a parameter to
Cary Clark12799e12017-07-28 15:18:29 -04001459
1460<table> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001461 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmap'>drawBitmap</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001462 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001463 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawBitmapRect'>drawBitmapRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001464 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001465 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImage'>drawImage</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001466 </tr> <tr>
Cary Clark77b3f3a2018-11-07 14:59:03 -05001467 <td><a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawImageRect'>drawImageRect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04001468 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001469</table>
1470
Cary Clark777eede2018-11-09 16:04:58 -05001471and when <a href='SkPaint_Reference#Paint'>Paint</a> has a <a href='undocumented#Shader'>Shader</a> specialization that uses <a href='SkImage_Reference#Image'>Image</a> or <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001472
Cary Clark777eede2018-11-09 16:04:58 -05001473<a href='#Filter_Quality'>Filter_Quality</a> is <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04001474
1475### Example
1476
skia-bookmaker525f9a92018-05-03 06:27:39 +00001477<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001478
Cary Clark682c58d2018-05-16 07:07:07 -04001479<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001480
1481---
Cary Clark12799e12017-07-28 15:18:29 -04001482
Cary Clark682c58d2018-05-16 07:07:07 -04001483<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001484<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001485</pre>
1486
Cary Clark777eede2018-11-09 16:04:58 -05001487Returns <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1488draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
Cary Clark12799e12017-07-28 15:18:29 -04001489
1490### Return Value
1491
Cary Clark682c58d2018-05-16 07:07:07 -04001492one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
Cary Clark09d80c02018-10-31 12:14:03 -04001493
Cary Clark682c58d2018-05-16 07:07:07 -04001494<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001495
1496### Example
1497
1498<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1499
1500#### Example Output
1501
1502~~~~
1503kNone_SkFilterQuality == paint.getFilterQuality()
1504~~~~
1505
1506</fiddle-embed></div>
1507
Cary Clark682c58d2018-05-16 07:07:07 -04001508<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001509
1510---
Cary Clark12799e12017-07-28 15:18:29 -04001511
Cary Clark682c58d2018-05-16 07:07:07 -04001512<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001513void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001514</pre>
1515
Cary Clark777eede2018-11-09 16:04:58 -05001516Sets <a href='undocumented#SkFilterQuality'>SkFilterQuality</a>, the <a href='SkImage_Reference#Image'>image</a> filtering level. A lower setting
1517draws faster; a higher setting looks better when the <a href='SkImage_Reference#Image'>image</a> is scaled.
1518Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001519
1520### Parameters
1521
Cary Clark682c58d2018-05-16 07:07:07 -04001522<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001523 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,</td>
Cary Clark12799e12017-07-28 15:18:29 -04001524 </tr>
1525</table>
1526
Cary Clark09d80c02018-10-31 12:14:03 -04001527<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
1528
Cary Clark12799e12017-07-28 15:18:29 -04001529### Example
1530
1531<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1532
1533#### Example Output
1534
1535~~~~
1536kHigh_SkFilterQuality == paint.getFilterQuality()
1537~~~~
1538
1539</fiddle-embed></div>
1540
1541### See Also
1542
Cary Clark77b3f3a2018-11-07 14:59:03 -05001543<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#Image_Scaling'>Image_Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001544
Cary Clarka90ea222018-10-16 10:30:28 -04001545<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001546
Cary Clarka90ea222018-10-16 10:30:28 -04001547---
Cary Clark12799e12017-07-28 15:18:29 -04001548
Cary Clarkab2621d2018-01-30 10:08:57 -05001549| name | description |
1550| --- | --- |
Cary Clark777eede2018-11-09 16:04:58 -05001551| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='#Color_Alpha'>Color_Alpha</a> and RGB, one drawing <a href='SkColor_Reference#Color'>color</a> |
1552| <a href='#SkPaint_setColor'>setColor</a> | sets <a href='#Color_Alpha'>Color_Alpha</a> and RGB, one drawing <a href='SkColor_Reference#Color'>color</a> |
Cary Clark12799e12017-07-28 15:18:29 -04001553
Cary Clark777eede2018-11-09 16:04:58 -05001554<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='#Color_Alpha'>Color_Alpha</a>
1555values used to draw a filled or stroked shape in a 32-bit value. Each component
1556occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1557All values in any combination are valid.
Cary Clarkab2621d2018-01-30 10:08:57 -05001558
Cary Clark777eede2018-11-09 16:04:58 -05001559<a href='SkColor_Reference#Color'>Color</a> is not <a href='undocumented#Premultiply'>Premultiplied</a>; <a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of
1560RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001561
Cary Clark777eede2018-11-09 16:04:58 -05001562The bit positions of <a href='#Color_Alpha'>Color_Alpha</a> and RGB are independent of the bit
1563positions on the output <a href='undocumented#Device'>device</a>, which may have more or fewer bits, and may have
1564a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001565
Cary Clark77b3f3a2018-11-07 14:59:03 -05001566| bit positions | <a href='#Color_Alpha'>Color_Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001567| --- | --- | --- | --- | --- |
1568| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1569
1570### Example
1571
Ravi Mistry874e22b2018-07-19 03:49:13 +00001572<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001573
Cary Clark682c58d2018-05-16 07:07:07 -04001574<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001575
1576---
Cary Clark12799e12017-07-28 15:18:29 -04001577
Cary Clark682c58d2018-05-16 07:07:07 -04001578<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001579<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001580</pre>
1581
Cary Clark777eede2018-11-09 16:04:58 -05001582Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, packed into 32 bits.
1583Use helpers <a href='SkColor_Reference#SkColorGetA'>SkColorGetA</a>(), <a href='SkColor_Reference#SkColorGetR'>SkColorGetR</a>(), <a href='SkColor_Reference#SkColorGetG'>SkColorGetG</a>(), and <a href='SkColor_Reference#SkColorGetB'>SkColorGetB</a>() to extract
1584a <a href='SkColor_Reference#Color'>color</a> component.
Cary Clark12799e12017-07-28 15:18:29 -04001585
1586### Return Value
1587
Cary Clark777eede2018-11-09 16:04:58 -05001588<a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001589
1590### Example
1591
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001592<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001593
1594#### Example Output
1595
1596~~~~
1597Yellow is 100% red, 100% green, and 0% blue.
1598~~~~
1599
1600</fiddle-embed></div>
1601
1602### See Also
1603
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001604<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1605
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001606<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001607
1608---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001609
1610<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001611<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>()const
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001612</pre>
1613
Cary Clark777eede2018-11-09 16:04:58 -05001614Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> and RGB, <a href='undocumented#Unpremultiply'>unpremultiplied</a>, as four floating <a href='SkPoint_Reference#Point'>point</a> values. RGB are
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001615are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1616
1617### Return Value
1618
Cary Clark777eede2018-11-09 16:04:58 -05001619<a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001620
1621### Example
1622
1623<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1624
1625#### Example Output
1626
1627~~~~
1628Yellow is 100% red, 100% green, and 0% blue.
1629~~~~
1630
1631</fiddle-embed></div>
1632
1633### See Also
1634
1635<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001636
Cary Clark682c58d2018-05-16 07:07:07 -04001637<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001638
1639---
Cary Clark12799e12017-07-28 15:18:29 -04001640
Cary Clark682c58d2018-05-16 07:07:07 -04001641<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark77b3f3a2018-11-07 14:59:03 -05001642void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='SkColor_Reference#Color'>color</a>)
Cary Clark12799e12017-07-28 15:18:29 -04001643</pre>
1644
Cary Clark777eede2018-11-09 16:04:58 -05001645Sets <a href='SkColor_Reference#Alpha'>alpha</a> and RGB used when stroking and filling. The <a href='#SkPaint_setColor_color'>color</a> is a 32-bit value,
1646<a href='undocumented#Unpremultiply'>unpremultiplied</a>, packing 8-bit components for <a href='SkColor_Reference#Alpha'>alpha</a>, red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04001647
1648### Parameters
1649
Cary Clark682c58d2018-05-16 07:07:07 -04001650<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001651 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001652 </tr>
1653</table>
1654
1655### Example
1656
skia-bookmaker233c6522018-07-04 05:33:26 +00001657<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001658
1659#### Example Output
1660
1661~~~~
1662green1 == green2
1663~~~~
1664
1665</fiddle-embed></div>
1666
1667### See Also
1668
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001669<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setColor4f'>setColor4f</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
1670
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001671<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001672
1673---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001674
1675<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001676void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& <a href='SkColor_Reference#Color'>color</a>, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001677</pre>
1678
Cary Clark777eede2018-11-09 16:04:58 -05001679Sets <a href='SkColor_Reference#Alpha'>alpha</a> and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
1680<a href='SkPoint_Reference#Point'>point</a> values, <a href='undocumented#Unpremultiply'>unpremultiplied</a>. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
1681the <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a>. If <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a> is nullptr, then <a href='#SkPaint_setColor4f_color'>color</a> is assumed to be in the
Cary Clark09d80c02018-10-31 12:14:03 -04001682sRGB <a href='undocumented#Color_Space'>color space</a>.
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001683
1684### Parameters
1685
1686<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001687 <td><a href='undocumented#Unpremultiply'>unpremultiplied</a> RGBA</td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001688 </tr>
1689 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001690 <td><a href='undocumented#SkColorSpace'>SkColorSpace</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001691 </tr>
1692</table>
1693
1694### Example
1695
1696<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
1697
1698#### Example Output
1699
1700~~~~
1701green1 == green2
1702~~~~
1703
1704</fiddle-embed></div>
1705
1706### See Also
1707
1708<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setColor'>setColor</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001709
Cary Clarka90ea222018-10-16 10:30:28 -04001710<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001711
Cary Clark777eede2018-11-09 16:04:58 -05001712<a href='#Color_Alpha'>Color_Alpha</a> sets the transparency independent of RGB: red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04001713
Cary Clark682c58d2018-05-16 07:07:07 -04001714<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001715
1716---
Cary Clark12799e12017-07-28 15:18:29 -04001717
Cary Clark682c58d2018-05-16 07:07:07 -04001718<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001719uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001720</pre>
1721
Cary Clark777eede2018-11-09 16:04:58 -05001722Retrieves <a href='SkColor_Reference#Alpha'>alpha</a> from the <a href='SkColor_Reference#Color'>color</a> used when stroking and filling.
Cary Clark12799e12017-07-28 15:18:29 -04001723
1724### Return Value
1725
Cary Clark777eede2018-11-09 16:04:58 -05001726<a href='SkColor_Reference#Alpha'>alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001727
1728### Example
1729
Cary Clark83647062018-07-18 16:21:51 -04001730<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04001731
1732#### Example Output
1733
1734~~~~
1735255 == paint.getAlpha()
1736~~~~
1737
1738</fiddle-embed></div>
1739
Cary Clark682c58d2018-05-16 07:07:07 -04001740<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001741
1742---
Cary Clark12799e12017-07-28 15:18:29 -04001743
Cary Clark682c58d2018-05-16 07:07:07 -04001744<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001745void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04001746</pre>
1747
Cary Clark777eede2018-11-09 16:04:58 -05001748Replaces <a href='SkColor_Reference#Alpha'>alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04001749unchanged. An out of range value triggers an assert in the debug
Cary Clark777eede2018-11-09 16:04:58 -05001750build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
1751<a href='#SkPaint_setAlpha_a'>a</a> set to zero makes <a href='SkColor_Reference#Color'>color</a> fully transparent; <a href='#SkPaint_setAlpha_a'>a</a> set to 255 makes <a href='SkColor_Reference#Color'>color</a>
Cary Clark12799e12017-07-28 15:18:29 -04001752fully opaque.
1753
1754### Parameters
1755
Cary Clark682c58d2018-05-16 07:07:07 -04001756<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001757 <td><a href='SkColor_Reference#Alpha'>alpha</a> component of <a href='SkColor_Reference#Color'>color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001758 </tr>
1759</table>
1760
1761### Example
1762
Ravi Mistry874e22b2018-07-19 03:49:13 +00001763<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04001764
1765#### Example Output
1766
1767~~~~
17680x44112233 == paint.getColor()
1769~~~~
1770
1771</fiddle-embed></div>
1772
Cary Clark682c58d2018-05-16 07:07:07 -04001773<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001774
1775---
Cary Clark12799e12017-07-28 15:18:29 -04001776
Cary Clark682c58d2018-05-16 07:07:07 -04001777<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001778void <a href='#SkPaint_setARGB'>setARGB</a>(<a href='undocumented#U8CPU'>U8CPU</a> a, <a href='undocumented#U8CPU'>U8CPU</a> r, <a href='undocumented#U8CPU'>U8CPU</a> g, <a href='undocumented#U8CPU'>U8CPU</a> b)
Cary Clark12799e12017-07-28 15:18:29 -04001779</pre>
1780
Cary Clark777eede2018-11-09 16:04:58 -05001781Sets <a href='SkColor_Reference#Color'>color</a> used when drawing solid fills. The <a href='SkColor_Reference#Color'>color</a> components range from 0 to 255.
1782The <a href='SkColor_Reference#Color'>color</a> is <a href='undocumented#Unpremultiply'>unpremultiplied</a>; <a href='SkColor_Reference#Alpha'>alpha</a> sets the transparency independent of RGB.
Cary Clark12799e12017-07-28 15:18:29 -04001783
1784### Parameters
1785
Cary Clark682c58d2018-05-16 07:07:07 -04001786<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05001787 <td>amount of <a href='SkColor_Reference#Alpha'>alpha</a>, from fully transparent (0) to fully opaque (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001788 </tr>
1789 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001790 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001791 </tr>
1792 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001793 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04001794 </tr>
1795 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001796 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04001797 </tr>
1798</table>
1799
1800### Example
1801
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001802<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04001803
1804#### Example Output
1805
1806~~~~
1807transRed1 == transRed2
1808~~~~
1809
1810</fiddle-embed></div>
1811
1812### See Also
1813
Cary Clark682c58d2018-05-16 07:07:07 -04001814<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001815
Cary Clarka90ea222018-10-16 10:30:28 -04001816<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001817
Cary Clarka90ea222018-10-16 10:30:28 -04001818---
Cary Clark08895c42018-02-01 09:37:32 -05001819
Cary Clark777eede2018-11-09 16:04:58 -05001820<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
1821Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001822
Cary Clarka90ea222018-10-16 10:30:28 -04001823<a name='Style_Fill'></a>
1824
Cary Clark777eede2018-11-09 16:04:58 -05001825Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kFill_Style'>kFill_Style</a> to fill the shape.
1826The fill covers the area inside the geometry for most shapes.
Cary Clark12799e12017-07-28 15:18:29 -04001827
Cary Clarka90ea222018-10-16 10:30:28 -04001828<a name='Style_Stroke'></a>
1829
Cary Clark777eede2018-11-09 16:04:58 -05001830Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> to stroke the shape.
Cary Clark12799e12017-07-28 15:18:29 -04001831
Cary Clark777eede2018-11-09 16:04:58 -05001832The stroke covers the area described by following the shape edge with a pen or brush of
1833<a href='#Paint_Stroke_Width'>Stroke_Width</a>. The area covered where the shape starts and stops is described by <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
1834The area covered where the shape turns a corner is described by <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
1835The stroke is centered on the shape; it extends equally on either side of the shape edge.As <a href='#Paint_Stroke_Width'>Stroke_Width</a> gets smaller, the drawn <a href='SkPath_Reference#Path'>path</a> frame is thinner. <a href='#Paint_Stroke_Width'>Stroke_Width</a> less than one
1836may have gaps, and if <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, <a href='#Color_Alpha'>Color_Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001837
Cary Clarka90ea222018-10-16 10:30:28 -04001838### See Also
Cary Clark12799e12017-07-28 15:18:29 -04001839
Cary Clark77b3f3a2018-11-07 14:59:03 -05001840<a href='#Path_Fill_Type'>Path_Fill_Type</a> <a href='#Path_Effect'>Path_Effect</a> <a href='#Paint_Style_Fill'>Style_Fill</a> <a href='#Paint_Style_Stroke'>Style_Stroke</a>
Cary Clarka90ea222018-10-16 10:30:28 -04001841
1842<a name='Hairline'></a>
1843
1844---
1845
Cary Clark777eede2018-11-09 16:04:58 -05001846<a href='#Paint_Stroke_Width'>Stroke_Width</a> of zero has a special meaning and switches drawing to use Hairline.
1847Hairline draws the thinnest continuous frame. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is clear, adjacent pixels
1848flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04001849
Cary Clark777eede2018-11-09 16:04:58 -05001850<a href='SkPath_Reference#Path'>Path</a> drawing with Hairline may hit the same <a href='undocumented#Pixel'>pixel</a> more than once. For instance, <a href='SkPath_Reference#Path'>Path</a> containing
1851two <a href='undocumented#Line'>lines</a> in one <a href='#Path_Overview_Contour'>Path_Contour</a> will draw the corner <a href='SkPoint_Reference#Point'>point</a> once, but may both <a href='undocumented#Line'>lines</a> may draw the adjacent
1852<a href='undocumented#Pixel'>pixel</a>. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> is set, transparency is applied twice, resulting in a darker <a href='undocumented#Pixel'>pixel</a>. Some
1853GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
1854while stroking.
Cary Clark12799e12017-07-28 15:18:29 -04001855
Cary Clarka90ea222018-10-16 10:30:28 -04001856### See Also
1857
Cary Clark77b3f3a2018-11-07 14:59:03 -05001858<a href='#Path_Fill_Type'>Path_Fill_Type</a> <a href='#Path_Effect'>Path_Effect</a> <a href='#Paint_Style_Fill'>Style_Fill</a> <a href='#Paint_Style_Stroke'>Style_Stroke</a>
Cary Clarka90ea222018-10-16 10:30:28 -04001859
1860<a name='SkPaint_Style'></a>
1861
1862---
Cary Clark12799e12017-07-28 15:18:29 -04001863
Cary Clarka560c472017-11-27 10:44:06 -05001864<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001865 enum <a href='#SkPaint_Style'>Style</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04001866 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
1867 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
1868 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04001869 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05001870
Cary Clarka90ea222018-10-16 10:30:28 -04001871</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04001872
Cary Clarka90ea222018-10-16 10:30:28 -04001873<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04001874 static constexpr int <a href='#SkPaint_kStyleCount'>kStyleCount</a> = <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05001875</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001876
Cary Clark777eede2018-11-09 16:04:58 -05001877Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
1878The stroke and fill
1879share all <a href='SkPaint_Reference#Paint'>paint</a> attributes; for instance, they are drawn with the same <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001880
Cary Clark777eede2018-11-09 16:04:58 -05001881Use <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> to avoid hitting the same pixels twice with a stroke draw and
1882a fill draw.
Cary Clark12799e12017-07-28 15:18:29 -04001883
1884### Constants
1885
Cary Clark682c58d2018-05-16 07:07:07 -04001886<table style='border-collapse: collapse; width: 62.5em'>
1887 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1888<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1889<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1890 <tr style='background-color: #f0f0f0; '>
1891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
1892 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1893 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001894Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#RRect'>Round_Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
1895<a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkImage_Reference#Image'>Image</a>, <a href='undocumented#Patch'>Patches</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='undocumented#Sprite'>Sprites</a>, and <a href='undocumented#Vertices'>Vertices</a> are painted as if
1896<a href='#SkPaint_kFill_Style'>kFill_Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
1897The <a href='#Path_Fill_Type'>Path_Fill_Type</a> specifies additional rules to fill the area outside the <a href='SkPath_Reference#Path'>path</a> edge,
1898and to create an unfilled hole inside the shape.
1899<a href='#SkPaint_Style'>Style</a> is set to <a href='#SkPaint_kFill_Style'>kFill_Style</a> by default.
Cary Clark1a8d7622018-03-05 13:26:16 -05001900</td>
Cary Clark12799e12017-07-28 15:18:29 -04001901 </tr>
1902 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
1904 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1905 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001906Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#RRect'>Round_Rect</a>, <a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
1907<a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Line'>Lines</a>, and <a href='SkPoint_Reference#Point'>points</a>, are always drawn as if <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> is set,
1908and ignore the set <a href='#SkPaint_Style'>Style</a>.
1909The stroke construction is unaffected by the <a href='#Path_Fill_Type'>Path_Fill_Type</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001910</td>
1911 </tr>
1912 <tr style='background-color: #f0f0f0; '>
1913 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
1914 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1915 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001916Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='#RRect'>Round_Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
1917<a href='SkPath_Reference#Path'>Path</a> is treated as if it is set to <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_kWinding_FillType'>kWinding_FillType</a>,
1918and the set <a href='#Path_Fill_Type'>Path_Fill_Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05001919</td>
Cary Clark12799e12017-07-28 15:18:29 -04001920 </tr>
1921 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001922 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
1923 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1924 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05001925May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05001926</td>
Cary Clark12799e12017-07-28 15:18:29 -04001927 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001928</table>
Cary Clark12799e12017-07-28 15:18:29 -04001929
Cary Clark682c58d2018-05-16 07:07:07 -04001930<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001931
1932---
Cary Clark12799e12017-07-28 15:18:29 -04001933
Cary Clark682c58d2018-05-16 07:07:07 -04001934<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05001935<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04001936</pre>
1937
Cary Clark80247e52018-07-11 16:18:41 -04001938Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04001939
1940### Return Value
1941
Cary Clark09d80c02018-10-31 12:14:03 -04001942one of:<a href='#SkPaint_kFill_Style'>kFill_Style</a>, <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>, <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>
Cary Clark12799e12017-07-28 15:18:29 -04001943
1944### Example
1945
1946<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
1947
1948#### Example Output
1949
1950~~~~
1951SkPaint::kFill_Style == paint.getStyle()
1952~~~~
1953
1954</fiddle-embed></div>
1955
1956### See Also
1957
Cary Clark682c58d2018-05-16 07:07:07 -04001958<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04001959
Cary Clark682c58d2018-05-16 07:07:07 -04001960<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001961
1962---
Cary Clark12799e12017-07-28 15:18:29 -04001963
Cary Clark682c58d2018-05-16 07:07:07 -04001964<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05001965void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04001966</pre>
1967
1968Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark777eede2018-11-09 16:04:58 -05001969Has no effect if <a href='#SkPaint_setStyle_style'>style</a> is not a legal <a href='SkPaint_Reference#SkPaint'>SkPaint</a>::<a href='#SkPaint_Style'>Style</a> value.
Cary Clark12799e12017-07-28 15:18:29 -04001970
1971### Parameters
1972
Cary Clark682c58d2018-05-16 07:07:07 -04001973<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04001974 <td>one of: <a href='#SkPaint_kFill_Style'>kFill_Style</a>, <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>, <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001975 </tr>
1976</table>
1977
1978### Example
1979
1980<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
1981
1982### See Also
1983
Cary Clark682c58d2018-05-16 07:07:07 -04001984<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04001985
Cary Clarka90ea222018-10-16 10:30:28 -04001986<a name='Stroke_Width'></a>
1987
Cary Clark12799e12017-07-28 15:18:29 -04001988---
1989
Cary Clark777eede2018-11-09 16:04:58 -05001990<a href='#Paint_Stroke_Width'>Stroke_Width</a> sets the width for stroking. The width is the thickness
1991of the stroke perpendicular to the <a href='SkPath_Reference#Path_Direction'>path direction</a> when the <a href='SkPaint_Reference#Paint'>paint style</a> is
1992set to <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001993
Cary Clark777eede2018-11-09 16:04:58 -05001994When width is greater than zero, the stroke encompasses as many pixels partially
1995or fully as needed. When the width equals zero, the <a href='SkPaint_Reference#Paint'>paint</a> enables hairlines;
1996the stroke is always one <a href='undocumented#Pixel'>pixel</a> wide.
Cary Clark12799e12017-07-28 15:18:29 -04001997
Cary Clark777eede2018-11-09 16:04:58 -05001998The stroke dimensions are scaled by the <a href='SkCanvas_Reference#Canvas_Matrix'>canvas matrix</a>, but Hairline stroke
1999remains one <a href='undocumented#Pixel'>pixel</a> wide regardless of scaling.
Cary Clark12799e12017-07-28 15:18:29 -04002000
Cary Clark777eede2018-11-09 16:04:58 -05002001The default width for the <a href='SkPaint_Reference#Paint'>paint</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04002002
2003### Example
2004
Cary Clark777eede2018-11-09 16:04:58 -05002005<div><fiddle-embed name="5112c7209a19e035c61cef33a624a652" gpu="true"><div>The pixels hit to represent thin <a href='undocumented#Line'>lines</a> vary with the angle of the
2006<a href='undocumented#Line'>line</a> and the platform implementation.
Cary Clark1a8d7622018-03-05 13:26:16 -05002007</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002008
Cary Clark682c58d2018-05-16 07:07:07 -04002009<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002010
2011---
Cary Clark12799e12017-07-28 15:18:29 -04002012
Cary Clark682c58d2018-05-16 07:07:07 -04002013<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002014<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002015</pre>
2016
Cary Clark777eede2018-11-09 16:04:58 -05002017Returns the thickness of the pen used by <a href='SkPaint_Reference#SkPaint'>SkPaint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002018outline the shape.
2019
2020### Return Value
2021
Cary Clark09d80c02018-10-31 12:14:03 -04002022zero for hairline, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002023
2024### Example
2025
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002026<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002027
2028#### Example Output
2029
2030~~~~
20310 == paint.getStrokeWidth()
2032~~~~
2033
2034</fiddle-embed></div>
2035
Cary Clark682c58d2018-05-16 07:07:07 -04002036<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002037
2038---
Cary Clark12799e12017-07-28 15:18:29 -04002039
Cary Clark682c58d2018-05-16 07:07:07 -04002040<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002041void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002042</pre>
2043
Cary Clark777eede2018-11-09 16:04:58 -05002044Sets the thickness of the pen used by the <a href='SkPaint_Reference#Paint'>paint</a> to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002045outline the shape.
Cary Clark777eede2018-11-09 16:04:58 -05002046Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002047
2048### Parameters
2049
Cary Clark682c58d2018-05-16 07:07:07 -04002050<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002051 <td>zero thickness for hairline; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002052 </tr>
2053</table>
2054
2055### Example
2056
2057<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2058
2059#### Example Output
2060
2061~~~~
20625 == paint.getStrokeWidth()
2063~~~~
2064
2065</fiddle-embed></div>
2066
Cary Clarka90ea222018-10-16 10:30:28 -04002067<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002068
Cary Clarka90ea222018-10-16 10:30:28 -04002069---
Cary Clark08895c42018-02-01 09:37:32 -05002070
Cary Clark777eede2018-11-09 16:04:58 -05002071<a href='#Paint_Miter_Limit'>Miter_Limit</a> specifies the maximum miter length,
2072relative to the <a href='#Stroke_Width'>stroke width</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002073
Cary Clark777eede2018-11-09 16:04:58 -05002074<a href='#Paint_Miter_Limit'>Miter_Limit</a> is used when the <a href='#Paint_Stroke_Join'>Stroke_Join</a>
2075is set to <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>, and the <a href='#SkPaint_Style'>Style</a> is either <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>
2076or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002077
Cary Clark777eede2018-11-09 16:04:58 -05002078If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>
2079is replaced with <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002080
Cary Clark777eede2018-11-09 16:04:58 -05002081<a href='#Paint_Miter_Limit'>Miter_Limit</a> can be computed from the corner angle using:
Cary Clark77b3f3a2018-11-07 14:59:03 -05002082<code><a href='#Miter_Limit'>miter limit</a> = 1 / sin ( angle / 2 )</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002083
Cary Clark777eede2018-11-09 16:04:58 -05002084<a href='#Paint_Miter_Limit'>Miter_Limit</a> default value is 4.
2085The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults_MiterLimit</a>
2086in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002087
Cary Clark777eede2018-11-09 16:04:58 -05002088Here are some miter limits and the angles that triggers them.
Cary Clark12799e12017-07-28 15:18:29 -04002089
Cary Clark77b3f3a2018-11-07 14:59:03 -05002090| <a href='#Miter_Limit'>miter limit</a> | angle in degrees |
Cary Clark12799e12017-07-28 15:18:29 -04002091| --- | --- |
2092| 10 | 11.48 |
2093| 9 | 12.76 |
2094| 8 | 14.36 |
2095| 7 | 16.43 |
2096| 6 | 19.19 |
2097| 5 | 23.07 |
2098| 4 | 28.96 |
2099| 3 | 38.94 |
2100| 2 | 60 |
2101| 1 | 180 |
2102
2103### Example
2104
Cary Clarka619d452018-07-16 08:12:01 -04002105<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark77b3f3a2018-11-07 14:59:03 -05002106When the <a href='#Miter_Limit'>miter limit</a> is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002107by a bevel join.
2108</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002109
Cary Clark682c58d2018-05-16 07:07:07 -04002110<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002111
2112---
Cary Clark12799e12017-07-28 15:18:29 -04002113
Cary Clark682c58d2018-05-16 07:07:07 -04002114<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002115<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002116</pre>
2117
Cary Clark80247e52018-07-11 16:18:41 -04002118Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002119
2120### Return Value
2121
Cary Clark77b3f3a2018-11-07 14:59:03 -05002122zero and greater miter limit
Cary Clark12799e12017-07-28 15:18:29 -04002123
2124### Example
2125
2126<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2127
2128#### Example Output
2129
2130~~~~
2131default miter limit == 4
2132~~~~
2133
2134</fiddle-embed></div>
2135
2136### See Also
2137
Cary Clark77b3f3a2018-11-07 14:59:03 -05002138<a href='#Paint_Miter_Limit'>Miter_Limit</a> <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002139
Cary Clark682c58d2018-05-16 07:07:07 -04002140<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002141
2142---
Cary Clark12799e12017-07-28 15:18:29 -04002143
Cary Clark682c58d2018-05-16 07:07:07 -04002144<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002145void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002146</pre>
2147
Cary Clark80247e52018-07-11 16:18:41 -04002148Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002149Valid values are zero and greater.
Cary Clark777eede2018-11-09 16:04:58 -05002150Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002151
2152### Parameters
2153
Cary Clark682c58d2018-05-16 07:07:07 -04002154<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002155 <td>zero and greater <a href='#Miter_Limit'>miter limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002156 </tr>
2157</table>
2158
2159### Example
2160
skia-bookmakera717ca92018-07-08 05:32:09 +00002161<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002162
2163#### Example Output
2164
2165~~~~
2166default miter limit == 8
2167~~~~
2168
2169</fiddle-embed></div>
2170
2171### See Also
2172
Cary Clark77b3f3a2018-11-07 14:59:03 -05002173<a href='#Paint_Miter_Limit'>Miter_Limit</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002174
Cary Clarka90ea222018-10-16 10:30:28 -04002175<a name='Stroke_Cap'></a>
2176
2177<a name='SkPaint_Cap'></a>
2178
Cary Clark12799e12017-07-28 15:18:29 -04002179---
2180
Cary Clarka560c472017-11-27 10:44:06 -05002181<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002182 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002183 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2184 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2185 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002186 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2187 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002188 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05002189
Cary Clarka90ea222018-10-16 10:30:28 -04002190</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002191
Cary Clarka90ea222018-10-16 10:30:28 -04002192<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002193 static constexpr int <a href='#SkPaint_kCapCount'>kCapCount</a> = <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05002194</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002195
Cary Clark777eede2018-11-09 16:04:58 -05002196<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> draws at the beginning and end of an open <a href='#Path_Overview_Contour'>Path_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002197
2198### Constants
2199
Cary Clark682c58d2018-05-16 07:07:07 -04002200<table style='border-collapse: collapse; width: 62.5em'>
2201 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2202<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2203<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2204 <tr style='background-color: #f0f0f0; '>
2205 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2206 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2207 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2208Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002209</td>
Cary Clark12799e12017-07-28 15:18:29 -04002210 </tr>
2211 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002212 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2213 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2214 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002215Adds a <a href='undocumented#Circle'>circle</a> with a diameter equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2216and end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002217</td>
Cary Clark12799e12017-07-28 15:18:29 -04002218 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002219 <tr style='background-color: #f0f0f0; '>
2220 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2221 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2222 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002223Adds a square with sides equal to <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the beginning
2224and end. The square sides are parallel to the initial and final direction
2225of the stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002226</td>
Cary Clark12799e12017-07-28 15:18:29 -04002227 </tr>
2228 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002229 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2230 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2231 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002232Equivalent to the largest value for <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002233</td>
2234 </tr>
2235 <tr style='background-color: #f0f0f0; '>
2236 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2237 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2238 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002239<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is set to <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> by default.
Cary Clark1a8d7622018-03-05 13:26:16 -05002240</td>
Cary Clark12799e12017-07-28 15:18:29 -04002241 </tr>
2242 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002243 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2244 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2245 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002246May be used to verify that <a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002247</td>
Cary Clark12799e12017-07-28 15:18:29 -04002248 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002249</table>
Cary Clark12799e12017-07-28 15:18:29 -04002250
Cary Clark777eede2018-11-09 16:04:58 -05002251Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2252follows the <a href='#Path_Overview_Contour'>Path_Contour</a>, moving parallel to the <a href='SkPath_Overview#Contour'>contour</a> direction.
Cary Clark12799e12017-07-28 15:18:29 -04002253
Cary Clark777eede2018-11-09 16:04:58 -05002254If the <a href='#Path_Overview_Contour'>Path_Contour</a> is not terminated by <a href='SkPath_Reference#SkPath'>SkPath</a>::<a href='#SkPath_kClose_Verb'>kClose_Verb</a>, the <a href='SkPath_Overview#Contour'>contour</a> has a
2255visible beginning and end.
Cary Clark12799e12017-07-28 15:18:29 -04002256
Cary Clark777eede2018-11-09 16:04:58 -05002257<a href='#Path_Overview_Contour'>Path_Contour</a> may start and end at the same <a href='SkPoint_Reference#Point'>point</a>; defining <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002258
Cary Clark777eede2018-11-09 16:04:58 -05002259<a href='#SkPaint_kButt_Cap'>kButt_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> is not drawn.
2260<a href='#SkPaint_kRound_Cap'>kRound_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> draws a <a href='undocumented#Circle'>circle</a> of diameter <a href='#Paint_Stroke_Width'>Stroke_Width</a>
2261at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
2262<a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a> and <a href='#Path_Overview_Contour_Zero_Length'>Zero_Length_Contour</a> draws an upright square with a side of
2263<a href='#Paint_Stroke_Width'>Stroke_Width</a> at the <a href='SkPath_Overview#Contour'>contour</a> <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002264
Cary Clark777eede2018-11-09 16:04:58 -05002265<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> is <a href='#SkPaint_kButt_Cap'>kButt_Cap</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04002266
Cary Clark12799e12017-07-28 15:18:29 -04002267### Example
2268
Cary Clark2ade9972017-11-02 17:49:34 -04002269<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002270
Cary Clark682c58d2018-05-16 07:07:07 -04002271<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002272
2273---
Cary Clark12799e12017-07-28 15:18:29 -04002274
Cary Clark682c58d2018-05-16 07:07:07 -04002275<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002276<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002277</pre>
2278
Cary Clark80247e52018-07-11 16:18:41 -04002279Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002280
2281### Return Value
2282
Cary Clark09d80c02018-10-31 12:14:03 -04002283one of: <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>, <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>, <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002284
2285### Example
2286
2287<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2288
2289#### Example Output
2290
2291~~~~
2292kButt_Cap == default stroke cap
2293~~~~
2294
2295</fiddle-embed></div>
2296
2297### See Also
2298
Cary Clark77b3f3a2018-11-07 14:59:03 -05002299<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002300
Cary Clark682c58d2018-05-16 07:07:07 -04002301<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002302
2303---
Cary Clark12799e12017-07-28 15:18:29 -04002304
Cary Clark682c58d2018-05-16 07:07:07 -04002305<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002306void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002307</pre>
2308
Cary Clark80247e52018-07-11 16:18:41 -04002309Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002310
2311### Parameters
2312
Cary Clark682c58d2018-05-16 07:07:07 -04002313<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002314 <td>one of: <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>, <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>, <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>;</td>
Cary Clark12799e12017-07-28 15:18:29 -04002315 </tr>
2316</table>
2317
Cary Clark777eede2018-11-09 16:04:58 -05002318has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid
Cary Clark09d80c02018-10-31 12:14:03 -04002319
Cary Clark12799e12017-07-28 15:18:29 -04002320### Example
2321
2322<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2323
2324#### Example Output
2325
2326~~~~
2327kRound_Cap == paint.getStrokeCap()
2328~~~~
2329
2330</fiddle-embed></div>
2331
2332### See Also
2333
Cary Clark77b3f3a2018-11-07 14:59:03 -05002334<a href='#Paint_Stroke_Cap'>Stroke_Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002335
Cary Clarka90ea222018-10-16 10:30:28 -04002336<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002337
Cary Clark777eede2018-11-09 16:04:58 -05002338<a href='#Paint_Stroke_Join'>Stroke_Join</a> draws at the sharp corners of an open or closed <a href='#Path_Overview_Contour'>Path_Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002339
Cary Clark777eede2018-11-09 16:04:58 -05002340Stroke describes the area covered by a pen of <a href='#Paint_Stroke_Width'>Stroke_Width</a> as it
2341follows the <a href='#Path_Overview_Contour'>Path_Contour</a>, moving parallel to the <a href='SkPath_Overview#Contour'>contour</a> direction.
Cary Clark12799e12017-07-28 15:18:29 -04002342
Cary Clark777eede2018-11-09 16:04:58 -05002343If the <a href='SkPath_Overview#Contour'>contour</a> direction changes abruptly, because the tangent direction leading
2344to the end of a <a href='undocumented#Curve'>curve</a> within the <a href='SkPath_Overview#Contour'>contour</a> does not match the tangent direction of
2345the following <a href='undocumented#Curve'>curve</a>, the pair of <a href='undocumented#Curve'>curves</a> meet at <a href='#Paint_Stroke_Join'>Stroke_Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002346
2347### Example
2348
Cary Clark2ade9972017-11-02 17:49:34 -04002349<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002350
Cary Clarka90ea222018-10-16 10:30:28 -04002351<a name='SkPaint_Join'></a>
2352
2353---
Cary Clark12799e12017-07-28 15:18:29 -04002354
Cary Clarka560c472017-11-27 10:44:06 -05002355<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002356 enum <a href='#SkPaint_Join'>Join</a> : uint8_t {
Cary Clark61313f32018-10-08 14:57:48 -04002357 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2358 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2359 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002360 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2361 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002362 };
Cary Clarkcb6bef02018-11-29 12:05:25 -05002363
Cary Clarka90ea222018-10-16 10:30:28 -04002364</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002365
Cary Clarka90ea222018-10-16 10:30:28 -04002366<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002367 static constexpr int <a href='#SkPaint_kJoinCount'>kJoinCount</a> = <a href='#SkPaint_kLast_Join'>kLast_Join</a> + 1;
Cary Clark1a8d7622018-03-05 13:26:16 -05002368</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002369
Cary Clark777eede2018-11-09 16:04:58 -05002370<a href='#SkPaint_Join'>Join</a> specifies how corners are drawn when a shape is stroked. <a href='#SkPaint_Join'>Join</a>
2371affects the four corners of a stroked rectangle, and the connected segments in a
2372stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002373
Cary Clark777eede2018-11-09 16:04:58 -05002374Choose miter join to draw sharp corners. Choose round join to draw a <a href='undocumented#Circle'>circle</a> with a
2375radius equal to the <a href='#Stroke_Width'>stroke width</a> on top of the corner. Choose bevel join to minimally
2376connect the thick strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002377
Cary Clark777eede2018-11-09 16:04:58 -05002378The <a href='#Fill_Path'>fill path</a> constructed to describe the stroked <a href='SkPath_Reference#Path'>path</a> respects the join setting but may
2379not contain the actual join. For instance, a <a href='#Fill_Path'>fill path</a> constructed with round joins does
2380not necessarily include <a href='undocumented#Circle'>circles</a> at each connected segment.
Cary Clark12799e12017-07-28 15:18:29 -04002381
2382### Constants
2383
Cary Clark682c58d2018-05-16 07:07:07 -04002384<table style='border-collapse: collapse; width: 62.5em'>
2385 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2386<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2387<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2388 <tr style='background-color: #f0f0f0; '>
2389 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2390 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2391 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark77b3f3a2018-11-07 14:59:03 -05002392Extends the outside corner to the extent allowed by <a href='#Paint_Miter_Limit'>Miter_Limit</a>.
Cary Clark777eede2018-11-09 16:04:58 -05002393If the extension exceeds <a href='#Paint_Miter_Limit'>Miter_Limit</a>, <a href='#SkPaint_kBevel_Join'>kBevel_Join</a> is used instead.
Cary Clark1a8d7622018-03-05 13:26:16 -05002394</td>
Cary Clark12799e12017-07-28 15:18:29 -04002395 </tr>
2396 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002397 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2398 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2399 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002400Adds a <a href='undocumented#Circle'>circle</a> with a diameter of <a href='#Paint_Stroke_Width'>Stroke_Width</a> at the sharp corner.
Cary Clark682c58d2018-05-16 07:07:07 -04002401</td>
2402 </tr>
2403 <tr style='background-color: #f0f0f0; '>
2404 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2405 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2406 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2407Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002408</td>
Cary Clark12799e12017-07-28 15:18:29 -04002409 </tr>
2410 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002411 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2412 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2413 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2414equivalent to the largest value for Stroke_Join</td>
2415 </tr>
2416 <tr style='background-color: #f0f0f0; '>
2417 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2418 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2419 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002420<a href='#Paint_Stroke_Join'>Stroke_Join</a> is set to <a href='#SkPaint_kMiter_Join'>kMiter_Join</a> by default.
Cary Clark1a8d7622018-03-05 13:26:16 -05002421</td>
Cary Clark12799e12017-07-28 15:18:29 -04002422 </tr>
2423 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002424 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2425 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2426 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark777eede2018-11-09 16:04:58 -05002427May be used to verify that <a href='#Paint_Stroke_Join'>Stroke_Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002428</td>
Cary Clark12799e12017-07-28 15:18:29 -04002429 </tr>
2430</table>
2431
2432### Example
2433
2434<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2435
2436### See Also
2437
Cary Clark682c58d2018-05-16 07:07:07 -04002438<a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a> <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>
Cary Clark12799e12017-07-28 15:18:29 -04002439
Cary Clark682c58d2018-05-16 07:07:07 -04002440<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002441
2442---
Cary Clark12799e12017-07-28 15:18:29 -04002443
Cary Clark682c58d2018-05-16 07:07:07 -04002444<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002445<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002446</pre>
2447
Cary Clark80247e52018-07-11 16:18:41 -04002448Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002449
2450### Return Value
2451
Cary Clark09d80c02018-10-31 12:14:03 -04002452one of: <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>, <a href='#SkPaint_kRound_Join'>kRound_Join</a>, <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002453
2454### Example
2455
Cary Clark7f644ec2018-07-19 10:50:44 -04002456<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002457
2458#### Example Output
2459
2460~~~~
2461kMiter_Join == default stroke join
2462~~~~
2463
2464</fiddle-embed></div>
2465
2466### See Also
2467
Cary Clark77b3f3a2018-11-07 14:59:03 -05002468<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002469
Cary Clark682c58d2018-05-16 07:07:07 -04002470<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002471
2472---
Cary Clark12799e12017-07-28 15:18:29 -04002473
Cary Clark682c58d2018-05-16 07:07:07 -04002474<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002475void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002476</pre>
2477
Cary Clark80247e52018-07-11 16:18:41 -04002478Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002479
2480### Parameters
2481
Cary Clark682c58d2018-05-16 07:07:07 -04002482<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002483 <td>one of: <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>, <a href='#SkPaint_kRound_Join'>kRound_Join</a>, <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>;</td>
Cary Clark12799e12017-07-28 15:18:29 -04002484 </tr>
2485</table>
2486
Cary Clark09d80c02018-10-31 12:14:03 -04002487otherwise, has no effect
2488
Cary Clark12799e12017-07-28 15:18:29 -04002489### Example
2490
2491<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2492
2493#### Example Output
2494
2495~~~~
2496kMiter_Join == paint.getStrokeJoin()
2497~~~~
2498
2499</fiddle-embed></div>
2500
2501### See Also
2502
Cary Clark77b3f3a2018-11-07 14:59:03 -05002503<a href='#Paint_Stroke_Join'>Stroke_Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002504
Cary Clark12799e12017-07-28 15:18:29 -04002505### See Also
2506
Cary Clark77b3f3a2018-11-07 14:59:03 -05002507<a href='#Paint_Miter_Limit'>Miter_Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002508
Cary Clarka90ea222018-10-16 10:30:28 -04002509<a name='Fill_Path'></a>
2510
2511---
Cary Clark08895c42018-02-01 09:37:32 -05002512
Cary Clark777eede2018-11-09 16:04:58 -05002513<a href='#Paint_Fill_Path'>Fill_Path</a> creates a <a href='SkPath_Reference#Path'>Path</a> by applying the <a href='#Path_Effect'>Path_Effect</a>, followed by the <a href='#Paint_Style_Stroke'>Style_Stroke</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002514
Cary Clark777eede2018-11-09 16:04:58 -05002515If <a href='SkPaint_Reference#Paint'>Paint</a> contains <a href='#Path_Effect'>Path_Effect</a>, <a href='#Path_Effect'>Path_Effect</a> operates on the source <a href='SkPath_Reference#Path'>Path</a>; the result
2516replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2517destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002518
Cary Clark777eede2018-11-09 16:04:58 -05002519Fill <a href='SkPath_Reference#Path'>Path</a> can request the <a href='#Path_Effect'>Path_Effect</a> to restrict to a culling rectangle, but
2520the <a href='#Path_Effect'>Path_Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002521
Cary Clark777eede2018-11-09 16:04:58 -05002522If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
2523and <a href='#Paint_Stroke_Width'>Stroke_Width</a> is greater than zero, the <a href='#Paint_Stroke_Width'>Stroke_Width</a>, <a href='#Paint_Stroke_Cap'>Stroke_Cap</a>, <a href='#Paint_Stroke_Join'>Stroke_Join</a>,
2524and <a href='#Paint_Miter_Limit'>Miter_Limit</a> operate on the destination <a href='SkPath_Reference#Path'>Path</a>, replacing it.
Cary Clark12799e12017-07-28 15:18:29 -04002525
Cary Clark777eede2018-11-09 16:04:58 -05002526Fill <a href='SkPath_Reference#Path'>Path</a> can specify the precision used by <a href='#Paint_Stroke_Width'>Stroke_Width</a> to approximate the stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002527
Cary Clark777eede2018-11-09 16:04:58 -05002528If the <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke_Style</a> and the <a href='#Paint_Stroke_Width'>Stroke_Width</a> is zero, <a href='#SkPaint_getFillPath'>getFillPath</a>
2529returns false since Hairline has no filled equivalent.
Cary Clarka90ea222018-10-16 10:30:28 -04002530
2531### See Also
2532
Cary Clark77b3f3a2018-11-07 14:59:03 -05002533<a href='#Paint_Style_Stroke'>Style_Stroke</a> <a href='#Paint_Stroke_Width'>Stroke_Width</a> <a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002534
Cary Clark682c58d2018-05-16 07:07:07 -04002535<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002536
2537---
Cary Clark12799e12017-07-28 15:18:29 -04002538
Cary Clark682c58d2018-05-16 07:07:07 -04002539<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002540bool <a href='#SkPaint_getFillPath'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst, const <a href='SkRect_Reference#SkRect'>SkRect</a>* cullRect, <a href='undocumented#SkScalar'>SkScalar</a> resScale = 1)const
Cary Clark12799e12017-07-28 15:18:29 -04002541</pre>
2542
Cary Clark09d80c02018-10-31 12:14:03 -04002543Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002544
2545### Parameters
2546
Cary Clark682c58d2018-05-16 07:07:07 -04002547<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002548 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002549 </tr>
2550 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002551 <td>resulting <a href='SkPath_Reference#SkPath'>SkPath</a>; may be the same as <a href='#SkPaint_getFillPath_src'>src</a>, but may not be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002552 </tr>
2553 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04002554 <td>optional limit passed to <a href='undocumented#SkPathEffect'>SkPathEffect</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04002555 </tr>
2556 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002557 <td>if > 1, increase precision, else if (0 < <a href='#SkPaint_getFillPath_resScale'>resScale</a> < 1) reduce precision</td>
Cary Clark12799e12017-07-28 15:18:29 -04002558 </tr>
2559</table>
2560
Cary Clark09d80c02018-10-31 12:14:03 -04002561to favor speed and <a href='undocumented#Size'>size</a>
2562
Cary Clark12799e12017-07-28 15:18:29 -04002563### Return Value
2564
Cary Clark777eede2018-11-09 16:04:58 -05002565true if the <a href='SkPath_Reference#Path'>path</a> represents <a href='#Style_Fill'>style fill</a>, or false if it represents hairline
Cary Clark12799e12017-07-28 15:18:29 -04002566
2567### Example
2568
Cary Clark777eede2018-11-09 16:04:58 -05002569<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href='SkPath_Reference#Quad'>Quad</a> stroke is turned into a filled <a href='SkPath_Reference#Path'>path</a> with increasing levels of precision.
2570At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
2571At the highest precision, the filled <a href='SkPath_Reference#Path'>path</a> has high fidelity compared to the original stroke.
Cary Clark1a8d7622018-03-05 13:26:16 -05002572</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002573
Cary Clark682c58d2018-05-16 07:07:07 -04002574<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002575
Cary Clarka90ea222018-10-16 10:30:28 -04002576---
2577
Cary Clark682c58d2018-05-16 07:07:07 -04002578<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002579bool <a href='#SkPaint_getFillPath'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst)const
Cary Clark12799e12017-07-28 15:18:29 -04002580</pre>
2581
Cary Clark09d80c02018-10-31 12:14:03 -04002582Returns the filled equivalent of the stroked <a href='SkPath_Reference#Path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002583
Cary Clark777eede2018-11-09 16:04:58 -05002584Replaces <a href='#SkPaint_getFillPath_2_dst'>dst</a> with the <a href='#SkPaint_getFillPath_2_src'>src</a> <a href='SkPath_Reference#Path'>path</a> modified by <a href='undocumented#SkPathEffect'>SkPathEffect</a> and <a href='#Style_Stroke'>style stroke</a>.
2585<a href='undocumented#SkPathEffect'>SkPathEffect</a>, if any, is not culled. <a href='#Stroke_Width'>stroke width</a> is created with default precision.
Cary Clark12799e12017-07-28 15:18:29 -04002586
2587### Parameters
2588
Cary Clark682c58d2018-05-16 07:07:07 -04002589<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002590 <td><a href='SkPath_Reference#SkPath'>SkPath</a> read to create a filled version</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002591 </tr>
2592 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002593 <td>resulting <a href='SkPath_Reference#SkPath'>SkPath</a> <a href='#SkPaint_getFillPath_2_dst'>dst</a> may be the same as <a href='#SkPaint_getFillPath_2_src'>src</a>, but may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04002594 </tr>
2595</table>
2596
2597### Return Value
2598
Cary Clark777eede2018-11-09 16:04:58 -05002599true if the <a href='SkPath_Reference#Path'>path</a> represents <a href='#Style_Fill'>style fill</a>, or false if it represents hairline
Cary Clark12799e12017-07-28 15:18:29 -04002600
2601### Example
2602
2603<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2604
Cary Clarka90ea222018-10-16 10:30:28 -04002605<a name='Shader_Methods'></a>
2606
Cary Clark12799e12017-07-28 15:18:29 -04002607---
2608
Cary Clark777eede2018-11-09 16:04:58 -05002609<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2610<a href='undocumented#Shader'>Shader</a> may be an <a href='SkImage_Reference#Image'>image</a>, a gradient, or a computed fill.
2611If <a href='SkPaint_Reference#Paint'>Paint</a> has no <a href='undocumented#Shader'>Shader</a>, then <a href='SkColor_Reference#Color'>Color</a> fills the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002612
Cary Clark777eede2018-11-09 16:04:58 -05002613<a href='undocumented#Shader'>Shader</a> is modulated by <a href='#Color_Alpha'>Color_Alpha</a> component of <a href='SkColor_Reference#Color'>Color</a>.
2614If <a href='undocumented#Shader'>Shader</a> object defines only <a href='#Color_Alpha'>Color_Alpha</a>, then <a href='SkColor_Reference#Color'>Color</a> modulated by <a href='#Color_Alpha'>Color_Alpha</a> describes
2615the fill.
Cary Clark12799e12017-07-28 15:18:29 -04002616
Cary Clark777eede2018-11-09 16:04:58 -05002617The drawn transparency can be modified without altering <a href='undocumented#Shader'>Shader</a>, by changing <a href='#Color_Alpha'>Color_Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002618
2619### Example
2620
2621<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2622
Cary Clark777eede2018-11-09 16:04:58 -05002623If <a href='undocumented#Shader'>Shader</a> generates only <a href='#Color_Alpha'>Color_Alpha</a> then all components of <a href='SkColor_Reference#Color'>Color</a> modulate the output.
Cary Clark12799e12017-07-28 15:18:29 -04002624
2625### Example
2626
skia-bookmaker525f9a92018-05-03 06:27:39 +00002627<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002628
Cary Clark682c58d2018-05-16 07:07:07 -04002629<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002630
2631---
Cary Clark12799e12017-07-28 15:18:29 -04002632
Cary Clark682c58d2018-05-16 07:07:07 -04002633<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002634<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002635</pre>
2636
Cary Clark777eede2018-11-09 16:04:58 -05002637Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002638
Cary Clark09d80c02018-10-31 12:14:03 -04002639Does not alter <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002640
2641### Return Value
2642
Cary Clark777eede2018-11-09 16:04:58 -05002643<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002644
2645### Example
2646
2647<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2648
2649#### Example Output
2650
2651~~~~
2652nullptr == shader
2653nullptr != shader
2654~~~~
2655
2656</fiddle-embed></div>
2657
Cary Clark682c58d2018-05-16 07:07:07 -04002658<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002659
2660---
Cary Clark12799e12017-07-28 15:18:29 -04002661
Cary Clark682c58d2018-05-16 07:07:07 -04002662<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002663<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkShader'>SkShader</a>&gt; <a href='#SkPaint_refShader'>refShader</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002664</pre>
2665
Cary Clark777eede2018-11-09 16:04:58 -05002666Returns optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002667
Cary Clark777eede2018-11-09 16:04:58 -05002668Increases <a href='undocumented#SkShader'>SkShader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002669
2670### Return Value
2671
Cary Clark777eede2018-11-09 16:04:58 -05002672<a href='undocumented#SkShader'>SkShader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002673
2674### Example
2675
2676<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2677
2678#### Example Output
2679
2680~~~~
2681shader unique: true
2682shader unique: false
2683~~~~
2684
2685</fiddle-embed></div>
2686
Cary Clark682c58d2018-05-16 07:07:07 -04002687<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002688
2689---
Cary Clark12799e12017-07-28 15:18:29 -04002690
Cary Clark682c58d2018-05-16 07:07:07 -04002691<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002692void <a href='#SkPaint_setShader'>setShader</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkShader'>SkShader</a>&gt; <a href='undocumented#Shader'>shader</a>)
Cary Clark12799e12017-07-28 15:18:29 -04002693</pre>
2694
Cary Clark777eede2018-11-09 16:04:58 -05002695Sets optional colors used when filling a <a href='SkPath_Reference#Path'>path</a>, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002696
Cary Clark777eede2018-11-09 16:04:58 -05002697Sets <a href='undocumented#SkShader'>SkShader</a> to <a href='#SkPaint_setShader_shader'>shader</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous <a href='undocumented#SkShader'>SkShader</a>.
2698Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002699
2700### Parameters
2701
Cary Clark682c58d2018-05-16 07:07:07 -04002702<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002703 <td>how geometry is filled with <a href='SkColor_Reference#Color'>color</a>; if nullptr, <a href='SkColor_Reference#Color'>color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002704 </tr>
2705</table>
2706
2707### Example
2708
skia-bookmakere0a458f2018-07-16 05:29:00 +00002709<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002710
Cary Clarka90ea222018-10-16 10:30:28 -04002711<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002712
Cary Clarka90ea222018-10-16 10:30:28 -04002713---
Cary Clark08895c42018-02-01 09:37:32 -05002714
Cary Clark777eede2018-11-09 16:04:58 -05002715<a href='#Color_Filter'>Color_Filter</a> alters the <a href='SkColor_Reference#Color'>color</a> used when drawing a shape.
2716<a href='#Color_Filter'>Color_Filter</a> may apply <a href='#Blend_Mode'>Blend_Mode</a>, transform the <a href='SkColor_Reference#Color'>color</a> through a <a href='SkMatrix_Reference#Matrix'>matrix</a>, or composite multiple filters.
2717If <a href='SkPaint_Reference#Paint'>Paint</a> has no <a href='#Color_Filter'>Color_Filter</a>, the <a href='SkColor_Reference#Color'>color</a> is unaltered.
Cary Clark12799e12017-07-28 15:18:29 -04002718
Cary Clark777eede2018-11-09 16:04:58 -05002719The drawn transparency can be modified without altering <a href='#Color_Filter'>Color_Filter</a>, by changing <a href='#Color_Alpha'>Color_Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002720
2721### Example
2722
2723<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2724
Cary Clark682c58d2018-05-16 07:07:07 -04002725<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002726
2727---
Cary Clark12799e12017-07-28 15:18:29 -04002728
Cary Clark682c58d2018-05-16 07:07:07 -04002729<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002730<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002731</pre>
2732
Cary Clark777eede2018-11-09 16:04:58 -05002733Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002734Does not alter <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002735
2736### Return Value
2737
Cary Clark777eede2018-11-09 16:04:58 -05002738<a href='undocumented#SkColorFilter'>SkColorFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002739
2740### Example
2741
2742<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2743
2744#### Example Output
2745
2746~~~~
2747nullptr == color filter
2748nullptr != color filter
2749~~~~
2750
2751</fiddle-embed></div>
2752
Cary Clark682c58d2018-05-16 07:07:07 -04002753<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002754
2755---
Cary Clark12799e12017-07-28 15:18:29 -04002756
Cary Clark682c58d2018-05-16 07:07:07 -04002757<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002758<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkColorFilter'>SkColorFilter</a>&gt; <a href='#SkPaint_refColorFilter'>refColorFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002759</pre>
2760
Cary Clark777eede2018-11-09 16:04:58 -05002761Returns <a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr.
2762Increases <a href='undocumented#SkColorFilter'>SkColorFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002763
2764### Return Value
2765
Cary Clark777eede2018-11-09 16:04:58 -05002766<a href='undocumented#SkColorFilter'>SkColorFilter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002767
2768### Example
2769
2770<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2771
2772#### Example Output
2773
2774~~~~
2775color filter unique: true
2776color filter unique: false
2777~~~~
2778
2779</fiddle-embed></div>
2780
Cary Clark682c58d2018-05-16 07:07:07 -04002781<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002782
2783---
Cary Clark12799e12017-07-28 15:18:29 -04002784
Cary Clark682c58d2018-05-16 07:07:07 -04002785<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002786void <a href='#SkPaint_setColorFilter'>setColorFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkColorFilter'>SkColorFilter</a>&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002787</pre>
2788
Cary Clark777eede2018-11-09 16:04:58 -05002789Sets <a href='undocumented#SkColorFilter'>SkColorFilter</a> to filter, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
2790<a href='undocumented#SkColorFilter'>SkColorFilter</a>. Pass nullptr to clear <a href='undocumented#SkColorFilter'>SkColorFilter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002791
Cary Clark777eede2018-11-09 16:04:58 -05002792Increments filter <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002793
2794### Parameters
2795
Cary Clark682c58d2018-05-16 07:07:07 -04002796<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002797 <td><a href='undocumented#SkColorFilter'>SkColorFilter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002798 </tr>
2799</table>
2800
2801### Example
2802
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002803<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002804
Cary Clarka90ea222018-10-16 10:30:28 -04002805<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002806
Cary Clarka90ea222018-10-16 10:30:28 -04002807---
Cary Clark08895c42018-02-01 09:37:32 -05002808
Cary Clark777eede2018-11-09 16:04:58 -05002809<a href='#Blend_Mode'>Blend_Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination <a href='SkColor_Reference#Color'>color</a>.
2810The default setting, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>, draws the source <a href='SkColor_Reference#Color'>color</a>
2811over the destination <a href='SkColor_Reference#Color'>color</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002812
2813### Example
2814
Cary Clark83647062018-07-18 16:21:51 -04002815<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002816
2817### See Also
2818
Cary Clark77b3f3a2018-11-07 14:59:03 -05002819<a href='#Blend_Mode'>Blend_Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002820
Cary Clark682c58d2018-05-16 07:07:07 -04002821<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002822
2823---
Cary Clark12799e12017-07-28 15:18:29 -04002824
Cary Clark682c58d2018-05-16 07:07:07 -04002825<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002826<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002827</pre>
2828
Cary Clark09d80c02018-10-31 12:14:03 -04002829Returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>.
2830By default, returns <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002831
2832### Return Value
2833
Cary Clark777eede2018-11-09 16:04:58 -05002834mode used to combine source <a href='SkColor_Reference#Color'>color</a> with destination <a href='SkColor_Reference#Color'>color</a>
Cary Clark12799e12017-07-28 15:18:29 -04002835
2836### Example
2837
skia-bookmaker525f9a92018-05-03 06:27:39 +00002838<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04002839
2840#### Example Output
2841
2842~~~~
2843kSrcOver == getBlendMode
2844kSrcOver != getBlendMode
2845~~~~
2846
2847</fiddle-embed></div>
2848
Cary Clark682c58d2018-05-16 07:07:07 -04002849<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002850
2851---
Cary Clark12799e12017-07-28 15:18:29 -04002852
Cary Clark682c58d2018-05-16 07:07:07 -04002853<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002854bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002855</pre>
2856
Cary Clark777eede2018-11-09 16:04:58 -05002857Returns true if <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> is <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04002858
2859### Return Value
2860
Cary Clark777eede2018-11-09 16:04:58 -05002861true if <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> is <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04002862
2863### Example
2864
2865<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2866
2867#### Example Output
2868
2869~~~~
2870isSrcOver == true
2871isSrcOver != true
2872~~~~
2873
2874</fiddle-embed></div>
2875
Cary Clark682c58d2018-05-16 07:07:07 -04002876<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002877
2878---
Cary Clark12799e12017-07-28 15:18:29 -04002879
Cary Clark682c58d2018-05-16 07:07:07 -04002880<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002881void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04002882</pre>
2883
Cary Clark777eede2018-11-09 16:04:58 -05002884Sets <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002885Does not check for valid input.
2886
2887### Parameters
2888
Cary Clark682c58d2018-05-16 07:07:07 -04002889<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002890 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source <a href='SkColor_Reference#Color'>color</a> and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04002891 </tr>
2892</table>
2893
2894### Example
2895
2896<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2897
2898#### Example Output
2899
2900~~~~
2901isSrcOver == true
2902isSrcOver != true
2903~~~~
2904
2905</fiddle-embed></div>
2906
Cary Clarka90ea222018-10-16 10:30:28 -04002907<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002908
Cary Clarka90ea222018-10-16 10:30:28 -04002909---
Cary Clark08895c42018-02-01 09:37:32 -05002910
Cary Clark777eede2018-11-09 16:04:58 -05002911<a href='#Path_Effect'>Path_Effect</a> modifies the <a href='SkPath_Reference#Path'>path</a> geometry before drawing it.
2912<a href='#Path_Effect'>Path_Effect</a> may implement dashing, custom fill effects and custom stroke effects.
2913If <a href='SkPaint_Reference#Paint'>Paint</a> has no <a href='#Path_Effect'>Path_Effect</a>, the <a href='SkPath_Reference#Path'>path</a> geometry is unaltered when filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002914
2915### Example
2916
2917<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
2918
2919### See Also
2920
Cary Clark77b3f3a2018-11-07 14:59:03 -05002921<a href='#Path_Effect'>Path_Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002922
Cary Clark682c58d2018-05-16 07:07:07 -04002923<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002924
2925---
Cary Clark12799e12017-07-28 15:18:29 -04002926
Cary Clark682c58d2018-05-16 07:07:07 -04002927<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002928<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002929</pre>
2930
Cary Clark777eede2018-11-09 16:04:58 -05002931Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04002932Does not alter <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002933
2934### Return Value
2935
Cary Clark777eede2018-11-09 16:04:58 -05002936<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002937
2938### Example
2939
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002940<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04002941
2942#### Example Output
2943
2944~~~~
2945nullptr == path effect
2946nullptr != path effect
2947~~~~
2948
2949</fiddle-embed></div>
2950
Cary Clark682c58d2018-05-16 07:07:07 -04002951<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002952
2953---
Cary Clark12799e12017-07-28 15:18:29 -04002954
Cary Clark682c58d2018-05-16 07:07:07 -04002955<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05002956<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkPathEffect'>SkPathEffect</a>&gt; <a href='#SkPaint_refPathEffect'>refPathEffect</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04002957</pre>
2958
Cary Clark777eede2018-11-09 16:04:58 -05002959Returns <a href='undocumented#SkPathEffect'>SkPathEffect</a> if set, or nullptr.
2960Increases <a href='undocumented#SkPathEffect'>SkPathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002961
2962### Return Value
2963
Cary Clark777eede2018-11-09 16:04:58 -05002964<a href='undocumented#SkPathEffect'>SkPathEffect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002965
2966### Example
2967
Cary Clark83647062018-07-18 16:21:51 -04002968<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04002969
2970#### Example Output
2971
2972~~~~
2973path effect unique: true
2974path effect unique: false
2975~~~~
2976
2977</fiddle-embed></div>
2978
Cary Clark682c58d2018-05-16 07:07:07 -04002979<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002980
2981---
Cary Clark12799e12017-07-28 15:18:29 -04002982
Cary Clark682c58d2018-05-16 07:07:07 -04002983<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05002984void <a href='#SkPaint_setPathEffect'>setPathEffect</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkPathEffect'>SkPathEffect</a>&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04002985</pre>
2986
Cary Clark777eede2018-11-09 16:04:58 -05002987Sets <a href='undocumented#SkPathEffect'>SkPathEffect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
2988<a href='undocumented#SkPathEffect'>SkPathEffect</a>. Pass nullptr to leave the <a href='SkPath_Reference#Path'>path</a> geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04002989
Cary Clark777eede2018-11-09 16:04:58 -05002990Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002991
2992### Parameters
2993
Cary Clark682c58d2018-05-16 07:07:07 -04002994<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05002995 <td>replace <a href='SkPath_Reference#SkPath'>SkPath</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04002996 </tr>
2997</table>
2998
2999### Example
3000
3001<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3002
Cary Clarka90ea222018-10-16 10:30:28 -04003003<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003004
Cary Clarka90ea222018-10-16 10:30:28 -04003005---
Cary Clark08895c42018-02-01 09:37:32 -05003006
Cary Clark777eede2018-11-09 16:04:58 -05003007<a href='#Mask_Filter'>Mask_Filter</a> uses coverage of the shape drawn to create <a href='#Mask_Alpha'>Mask_Alpha</a>.
3008<a href='#Mask_Filter'>Mask_Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003009
Cary Clark777eede2018-11-09 16:04:58 -05003010<a href='#Mask_Filter'>Mask_Filter</a> may change the geometry and transparency of the shape, such as
3011creating a blur effect. Set <a href='#Mask_Filter'>Mask_Filter</a> to nullptr to prevent <a href='#Mask_Filter'>Mask_Filter</a> from
3012modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003013
3014### Example
3015
Cary Clark681287e2018-03-16 11:34:15 -04003016<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003017
Cary Clark682c58d2018-05-16 07:07:07 -04003018<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003019
3020---
Cary Clark12799e12017-07-28 15:18:29 -04003021
Cary Clark682c58d2018-05-16 07:07:07 -04003022<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003023<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003024</pre>
3025
Cary Clark777eede2018-11-09 16:04:58 -05003026Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003027Does not alter <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003028
3029### Return Value
3030
Cary Clark777eede2018-11-09 16:04:58 -05003031<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003032
3033### Example
3034
Cary Clark681287e2018-03-16 11:34:15 -04003035<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003036
3037#### Example Output
3038
3039~~~~
3040nullptr == mask filter
3041nullptr != mask filter
3042~~~~
3043
3044</fiddle-embed></div>
3045
Cary Clark682c58d2018-05-16 07:07:07 -04003046<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003047
3048---
Cary Clark12799e12017-07-28 15:18:29 -04003049
Cary Clark682c58d2018-05-16 07:07:07 -04003050<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003051<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>&gt; <a href='#SkPaint_refMaskFilter'>refMaskFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003052</pre>
3053
Cary Clark777eede2018-11-09 16:04:58 -05003054Returns <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003055
Cary Clark777eede2018-11-09 16:04:58 -05003056Increases <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003057
3058### Return Value
3059
Cary Clark777eede2018-11-09 16:04:58 -05003060<a href='undocumented#SkMaskFilter'>SkMaskFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003061
3062### Example
3063
Cary Clark83647062018-07-18 16:21:51 -04003064<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003065
3066#### Example Output
3067
3068~~~~
3069mask filter unique: true
3070mask filter unique: false
3071~~~~
3072
3073</fiddle-embed></div>
3074
Cary Clark682c58d2018-05-16 07:07:07 -04003075<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003076
3077---
Cary Clark12799e12017-07-28 15:18:29 -04003078
Cary Clark682c58d2018-05-16 07:07:07 -04003079<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003080void <a href='#SkPaint_setMaskFilter'>setMaskFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003081</pre>
3082
Cary Clark777eede2018-11-09 16:04:58 -05003083Sets <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3084<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>. Pass nullptr to clear <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> and leave <a href='undocumented#SkMaskFilter'>SkMaskFilter</a> effect on
Cary Clark09d80c02018-10-31 12:14:03 -04003085<a href='undocumented#Mask_Alpha'>mask alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003086
Cary Clark777eede2018-11-09 16:04:58 -05003087Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003088
3089### Parameters
3090
Cary Clark682c58d2018-05-16 07:07:07 -04003091<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3092 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003093 </tr>
3094</table>
3095
3096### Example
3097
Cary Clark681287e2018-03-16 11:34:15 -04003098<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003099
Cary Clarka90ea222018-10-16 10:30:28 -04003100<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003101
Cary Clarka90ea222018-10-16 10:30:28 -04003102---
Cary Clark08895c42018-02-01 09:37:32 -05003103
Cary Clarkcb6bef02018-11-29 12:05:25 -05003104<a href='undocumented#Typeface'>Typeface</a> identifies the <a href='SkFont_Reference#Font'>font</a> used when drawing and measuring <a href='undocumented#Text'>text</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003105<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a <a href='undocumented#Data'>data</a> <a href='SkStream_Reference#Stream'>stream</a>.
Cary Clarkcb6bef02018-11-29 12:05:25 -05003106The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default <a href='SkFont_Reference#Font'>font</a>
Cary Clark777eede2018-11-09 16:04:58 -05003107implementation.
Cary Clark12799e12017-07-28 15:18:29 -04003108
3109### Example
3110
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003111<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003112
Cary Clark682c58d2018-05-16 07:07:07 -04003113<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003114
3115---
Cary Clark12799e12017-07-28 15:18:29 -04003116
Cary Clark682c58d2018-05-16 07:07:07 -04003117<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003118<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003119</pre>
3120
Cary Clark777eede2018-11-09 16:04:58 -05003121Returns <a href='undocumented#SkTypeface'>SkTypeface</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003122Does not alter <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003123
3124### Return Value
3125
Cary Clark777eede2018-11-09 16:04:58 -05003126<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003127
3128### Example
3129
Cary Clarkf9603982018-07-17 08:20:27 -04003130<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003131
3132#### Example Output
3133
3134~~~~
3135nullptr == typeface
3136nullptr != typeface
3137~~~~
3138
3139</fiddle-embed></div>
3140
Cary Clark682c58d2018-05-16 07:07:07 -04003141<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003142
3143---
Cary Clark12799e12017-07-28 15:18:29 -04003144
Cary Clark682c58d2018-05-16 07:07:07 -04003145<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003146<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkTypeface'>SkTypeface</a>&gt; <a href='#SkPaint_refTypeface'>refTypeface</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003147</pre>
3148
Cary Clark777eede2018-11-09 16:04:58 -05003149Increases <a href='undocumented#SkTypeface'>SkTypeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003150
3151### Return Value
3152
Cary Clark777eede2018-11-09 16:04:58 -05003153<a href='undocumented#SkTypeface'>SkTypeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003154
3155### Example
3156
Cary Clark83647062018-07-18 16:21:51 -04003157<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003158
3159#### Example Output
3160
3161~~~~
3162typeface1 != typeface2
3163typeface1 == typeface2
3164~~~~
3165
3166</fiddle-embed></div>
3167
Cary Clark682c58d2018-05-16 07:07:07 -04003168<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003169
3170---
Cary Clark12799e12017-07-28 15:18:29 -04003171
Cary Clark682c58d2018-05-16 07:07:07 -04003172<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003173void <a href='#SkPaint_setTypeface'>setTypeface</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkTypeface'>SkTypeface</a>&gt; <a href='undocumented#Typeface'>typeface</a>)
Cary Clark12799e12017-07-28 15:18:29 -04003174</pre>
3175
Cary Clark777eede2018-11-09 16:04:58 -05003176Sets <a href='undocumented#SkTypeface'>SkTypeface</a> to <a href='#SkPaint_setTypeface_typeface'>typeface</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous <a href='undocumented#SkTypeface'>SkTypeface</a>.
3177Pass nullptr to clear <a href='undocumented#SkTypeface'>SkTypeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3178<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003179
3180### Parameters
3181
Cary Clark682c58d2018-05-16 07:07:07 -04003182<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
Cary Clarkcb6bef02018-11-29 12:05:25 -05003183 <td><a href='SkFont_Reference#Font'>font</a> and style used to draw <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003184 </tr>
3185</table>
3186
3187### Example
3188
Cary Clark71961fb2018-01-05 14:21:59 -05003189<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003190
Cary Clarka90ea222018-10-16 10:30:28 -04003191<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003192
Cary Clarka90ea222018-10-16 10:30:28 -04003193---
Cary Clark08895c42018-02-01 09:37:32 -05003194
Cary Clark777eede2018-11-09 16:04:58 -05003195<a href='#Image_Filter'>Image_Filter</a> operates on the <a href='undocumented#Pixel'>pixel</a> representation of the shape, as modified by <a href='SkPaint_Reference#Paint'>Paint</a>
3196with <a href='#Blend_Mode'>Blend_Mode</a> set to <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a>::<a href='#SkBlendMode_kSrcOver'>kSrcOver</a>. <a href='#Image_Filter'>Image_Filter</a> creates a new <a href='SkBitmap_Reference#Bitmap'>bitmap</a>,
3197which is drawn to the <a href='undocumented#Device'>device</a> using the set <a href='#Blend_Mode'>Blend_Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003198
Cary Clark777eede2018-11-09 16:04:58 -05003199<a href='#Image_Filter'>Image_Filter</a> is higher level than <a href='#Mask_Filter'>Mask_Filter</a>; for instance, an <a href='#Image_Filter'>Image_Filter</a>
3200can operate on all channels of <a href='SkColor_Reference#Color'>Color</a>, while <a href='#Mask_Filter'>Mask_Filter</a> generates <a href='SkColor_Reference#Alpha'>Alpha</a> only.
3201<a href='#Image_Filter'>Image_Filter</a> operates independently of and can be used in combination with
Cary Clark77b3f3a2018-11-07 14:59:03 -05003202<a href='#Mask_Filter'>Mask_Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003203
3204### Example
3205
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003206<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003207
Cary Clark682c58d2018-05-16 07:07:07 -04003208<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003209
3210---
Cary Clark12799e12017-07-28 15:18:29 -04003211
Cary Clark682c58d2018-05-16 07:07:07 -04003212<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003213<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003214</pre>
3215
Cary Clark777eede2018-11-09 16:04:58 -05003216Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003217Does not alter <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003218
3219### Return Value
3220
Cary Clark777eede2018-11-09 16:04:58 -05003221<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003222
3223### Example
3224
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003225<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003226
3227#### Example Output
3228
3229~~~~
3230nullptr == image filter
3231nullptr != image filter
3232~~~~
3233
3234</fiddle-embed></div>
3235
Cary Clark682c58d2018-05-16 07:07:07 -04003236<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003237
3238---
Cary Clark12799e12017-07-28 15:18:29 -04003239
Cary Clark682c58d2018-05-16 07:07:07 -04003240<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003241<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkImageFilter'>SkImageFilter</a>&gt; <a href='#SkPaint_refImageFilter'>refImageFilter</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003242</pre>
3243
Cary Clark777eede2018-11-09 16:04:58 -05003244Returns <a href='undocumented#SkImageFilter'>SkImageFilter</a> if set, or nullptr.
3245Increases <a href='undocumented#SkImageFilter'>SkImageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003246
3247### Return Value
3248
Cary Clark777eede2018-11-09 16:04:58 -05003249<a href='undocumented#SkImageFilter'>SkImageFilter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003250
3251### Example
3252
3253<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3254
3255#### Example Output
3256
3257~~~~
3258image filter unique: true
3259image filter unique: false
3260~~~~
3261
3262</fiddle-embed></div>
3263
Cary Clark682c58d2018-05-16 07:07:07 -04003264<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003265
3266---
Cary Clark12799e12017-07-28 15:18:29 -04003267
Cary Clark682c58d2018-05-16 07:07:07 -04003268<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003269void <a href='#SkPaint_setImageFilter'>setImageFilter</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkImageFilter'>SkImageFilter</a>&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003270</pre>
3271
Cary Clark777eede2018-11-09 16:04:58 -05003272Sets <a href='undocumented#SkImageFilter'>SkImageFilter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3273<a href='undocumented#SkImageFilter'>SkImageFilter</a>. Pass nullptr to clear <a href='undocumented#SkImageFilter'>SkImageFilter</a>, and remove <a href='undocumented#SkImageFilter'>SkImageFilter</a> effect
Cary Clark12799e12017-07-28 15:18:29 -04003274on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003275
Cary Clark777eede2018-11-09 16:04:58 -05003276Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003277
3278### Parameters
3279
Cary Clark682c58d2018-05-16 07:07:07 -04003280<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003281 <td>how <a href='SkImage_Reference#SkImage'>SkImage</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003282 </tr>
3283</table>
3284
3285### Example
3286
3287<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3288
Cary Clarka90ea222018-10-16 10:30:28 -04003289<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003290
Cary Clarka90ea222018-10-16 10:30:28 -04003291---
Cary Clark08895c42018-02-01 09:37:32 -05003292
Cary Clark777eede2018-11-09 16:04:58 -05003293<a href='#Draw_Looper'>Draw_Looper</a> sets a modifier that communicates state from one <a href='#Draw_Layer'>Draw_Layer</a>
3294to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003295
Cary Clark777eede2018-11-09 16:04:58 -05003296<a href='#Draw_Looper'>Draw_Looper</a> draws one or more times, modifying the <a href='SkCanvas_Reference#Canvas'>canvas</a> and <a href='SkPaint_Reference#Paint'>paint</a> each time.
3297<a href='#Draw_Looper'>Draw_Looper</a> may be used to draw multiple colors or create a colored shadow.
3298Set <a href='#Draw_Looper'>Draw_Looper</a> to nullptr to prevent <a href='#Draw_Looper'>Draw_Looper</a> from modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003299
3300### Example
3301
3302<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3303
Cary Clark682c58d2018-05-16 07:07:07 -04003304<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003305
3306---
Cary Clark12799e12017-07-28 15:18:29 -04003307
Cary Clark682c58d2018-05-16 07:07:07 -04003308<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003309<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003310</pre>
3311
Cary Clark777eede2018-11-09 16:04:58 -05003312Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
Cary Clark09d80c02018-10-31 12:14:03 -04003313Does not alter <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003314
3315### Return Value
3316
Cary Clark777eede2018-11-09 16:04:58 -05003317<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003318
3319### Example
3320
3321<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3322
3323#### Example Output
3324
3325~~~~
3326nullptr == draw looper
3327nullptr != draw looper
3328~~~~
3329
3330</fiddle-embed></div>
3331
Cary Clark682c58d2018-05-16 07:07:07 -04003332<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003333
3334---
Cary Clark12799e12017-07-28 15:18:29 -04003335
Cary Clark682c58d2018-05-16 07:07:07 -04003336<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003337<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>&gt; <a href='#SkPaint_refDrawLooper'>refDrawLooper</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003338</pre>
3339
Cary Clark777eede2018-11-09 16:04:58 -05003340Returns <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if set, or nullptr.
3341Increases <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003342
3343### Return Value
3344
Cary Clark777eede2018-11-09 16:04:58 -05003345<a href='undocumented#SkDrawLooper'>SkDrawLooper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003346
3347### Example
3348
3349<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3350
3351#### Example Output
3352
3353~~~~
3354draw looper unique: true
3355draw looper unique: false
3356~~~~
3357
3358</fiddle-embed></div>
3359
Cary Clark682c58d2018-05-16 07:07:07 -04003360<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003361
3362---
Cary Clark12799e12017-07-28 15:18:29 -04003363
Cary Clark682c58d2018-05-16 07:07:07 -04003364<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkabaffd82018-11-15 08:25:12 -05003365void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(<a href='undocumented#sk_sp'>sk_sp</a>&lt;<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003366</pre>
3367
Cary Clark777eede2018-11-09 16:04:58 -05003368Sets <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#SkRefCnt'>SkRefCnt</a> of the previous
3369<a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>. Pass nullptr to clear <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> and leave <a href='undocumented#SkDrawLooper'>SkDrawLooper</a> effect on
Cary Clark6fc50412017-09-21 12:31:06 -04003370drawing unaltered.
3371
Cary Clark777eede2018-11-09 16:04:58 -05003372Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#SkRefCnt'>SkRefCnt</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003373
3374### Parameters
3375
Cary Clark682c58d2018-05-16 07:07:07 -04003376<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003377 <td>iterates through drawing one or more time, altering <a href='SkPaint_Reference#SkPaint'>SkPaint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003378 </tr>
3379</table>
3380
3381### Example
3382
3383<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3384
Cary Clarka90ea222018-10-16 10:30:28 -04003385<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003386
Cary Clarka90ea222018-10-16 10:30:28 -04003387---
Cary Clark08895c42018-02-01 09:37:32 -05003388
Cary Clark777eede2018-11-09 16:04:58 -05003389<a href='#Paint_Text_Size'>Text_Size</a> adjusts the overall <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3390<a href='#Paint_Text_Size'>Text_Size</a> can be set to any positive value or zero.
3391<a href='#Paint_Text_Size'>Text_Size</a> defaults to 12.
3392Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults_TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003393
3394### Example
3395
3396<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3397
Cary Clark682c58d2018-05-16 07:07:07 -04003398<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003399
3400---
Cary Clark12799e12017-07-28 15:18:29 -04003401
Cary Clark682c58d2018-05-16 07:07:07 -04003402<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003403<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003404</pre>
3405
Cary Clark777eede2018-11-09 16:04:58 -05003406Returns <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a> in <a href='SkPoint_Reference#Point'>points</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003407
3408### Return Value
3409
Cary Clark09d80c02018-10-31 12:14:03 -04003410typographic height of <a href='undocumented#Text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04003411
3412### Example
3413
skia-bookmaker233c6522018-07-04 05:33:26 +00003414<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003415
Cary Clark682c58d2018-05-16 07:07:07 -04003416<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003417
3418---
Cary Clark12799e12017-07-28 15:18:29 -04003419
Cary Clark682c58d2018-05-16 07:07:07 -04003420<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003421void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003422</pre>
3423
Cary Clark777eede2018-11-09 16:04:58 -05003424Sets <a href='#Text_Size'>text size</a> in <a href='SkPoint_Reference#Point'>points</a>.
3425Has no effect if <a href='#SkPaint_setTextSize_textSize'>textSize</a> is not greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04003426
3427### Parameters
3428
Cary Clark682c58d2018-05-16 07:07:07 -04003429<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003430 <td>typographic height of <a href='undocumented#Text'>text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003431 </tr>
3432</table>
3433
3434### Example
3435
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003436<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003437
Cary Clarka90ea222018-10-16 10:30:28 -04003438<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003439
Cary Clarka90ea222018-10-16 10:30:28 -04003440---
Cary Clark08895c42018-02-01 09:37:32 -05003441
Cary Clark777eede2018-11-09 16:04:58 -05003442<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal scale.
3443<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
3444is not available.
3445<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> can be set to any value.
3446<a href='#Paint_Text_Scale_X'>Text_Scale_X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003447
3448### Example
3449
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003450<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003451
Cary Clark682c58d2018-05-16 07:07:07 -04003452<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003453
3454---
Cary Clark12799e12017-07-28 15:18:29 -04003455
Cary Clark682c58d2018-05-16 07:07:07 -04003456<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003457<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003458</pre>
3459
Cary Clark777eede2018-11-09 16:04:58 -05003460Returns <a href='undocumented#Text'>text</a> scale on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003461Default value is 1.
3462
3463### Return Value
3464
Cary Clark777eede2018-11-09 16:04:58 -05003465<a href='undocumented#Text'>text</a> horizontal scale
Cary Clark12799e12017-07-28 15:18:29 -04003466
3467### Example
3468
3469<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3470
Cary Clark682c58d2018-05-16 07:07:07 -04003471<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003472
3473---
Cary Clark12799e12017-07-28 15:18:29 -04003474
Cary Clark682c58d2018-05-16 07:07:07 -04003475<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003476void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003477</pre>
3478
Cary Clark777eede2018-11-09 16:04:58 -05003479Sets <a href='undocumented#Text'>text scale</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003480Default value is 1.
3481
3482### Parameters
3483
Cary Clark682c58d2018-05-16 07:07:07 -04003484<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003485 <td><a href='undocumented#Text'>text</a> horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003486 </tr>
3487</table>
3488
3489### Example
3490
3491<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3492
Cary Clarka90ea222018-10-16 10:30:28 -04003493<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003494
Cary Clarka90ea222018-10-16 10:30:28 -04003495---
Cary Clark08895c42018-02-01 09:37:32 -05003496
Cary Clark777eede2018-11-09 16:04:58 -05003497<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> adjusts the <a href='undocumented#Text'>text</a> horizontal slant.
3498<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
3499is not available.
3500<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> can be set to any value.
3501<a href='#Paint_Text_Skew_X'>Text_Skew_X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003502
3503### Example
3504
3505<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3506
Cary Clark682c58d2018-05-16 07:07:07 -04003507<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003508
3509---
Cary Clark12799e12017-07-28 15:18:29 -04003510
Cary Clark682c58d2018-05-16 07:07:07 -04003511<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003512<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003513</pre>
3514
Cary Clark777eede2018-11-09 16:04:58 -05003515Returns <a href='undocumented#Text'>text</a> skew on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003516Default value is zero.
3517
3518### Return Value
3519
Cary Clark09d80c02018-10-31 12:14:03 -04003520additional shear on x-axis relative to y-axis
Cary Clark12799e12017-07-28 15:18:29 -04003521
3522### Example
3523
Cary Clark7f644ec2018-07-19 10:50:44 -04003524<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003525
Cary Clark682c58d2018-05-16 07:07:07 -04003526<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003527
3528---
Cary Clark12799e12017-07-28 15:18:29 -04003529
Cary Clark682c58d2018-05-16 07:07:07 -04003530<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark777eede2018-11-09 16:04:58 -05003531void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04003532</pre>
3533
Cary Clark777eede2018-11-09 16:04:58 -05003534Sets <a href='undocumented#Text'>text skew</a> on x-axis.
Cary Clark12799e12017-07-28 15:18:29 -04003535Default value is zero.
3536
3537### Parameters
3538
Cary Clark682c58d2018-05-16 07:07:07 -04003539<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003540 <td>additional shear on x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04003541 </tr>
3542</table>
3543
3544### Example
3545
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003546<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003547
Cary Clarka90ea222018-10-16 10:30:28 -04003548<a name='Text_Encoding'></a>
3549
Cary Clark12799e12017-07-28 15:18:29 -04003550---
3551
Cary Clark12799e12017-07-28 15:18:29 -04003552### Example
3553
Cary Clark3e73dcf2018-12-06 08:41:14 -05003554<div><fiddle-embed name="767fa4e7b6300e16a419f9881f0f9d3d"><div>First <a href='undocumented#Line'>line</a> is encoded in UTF-8.
Cary Clark777eede2018-11-09 16:04:58 -05003555Second <a href='undocumented#Line'>line</a> is encoded in UTF-16.
3556Third <a href='undocumented#Line'>line</a> is encoded in UTF-32.
3557Fourth <a href='undocumented#Line'>line</a> has 16-bit <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05003558</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003559
Cary Clark682c58d2018-05-16 07:07:07 -04003560<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003561
3562---
Cary Clark12799e12017-07-28 15:18:29 -04003563
Cary Clark682c58d2018-05-16 07:07:07 -04003564<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark3e73dcf2018-12-06 08:41:14 -05003565<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003566</pre>
3567
Cary Clark3e73dcf2018-12-06 08:41:14 -05003568Returns the <a href='undocumented#Text'>text</a> encoding. <a href='undocumented#Text'>Text</a> encoding describes how to interpret the <a href='undocumented#Text'>text</a> bytes pass
3569to methods like <a href='#SkPaint_measureText'>measureText</a>() and <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawText'>drawText</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003570
3571### Return Value
3572
Cary Clark3e73dcf2018-12-06 08:41:14 -05003573the <a href='undocumented#Text'>text</a> encoding
Cary Clark12799e12017-07-28 15:18:29 -04003574
3575### Example
3576
Cary Clark3e73dcf2018-12-06 08:41:14 -05003577<div><fiddle-embed name="0d21e968e9a4c78c902ae3ef494941a0">
Cary Clark12799e12017-07-28 15:18:29 -04003578
3579#### Example Output
3580
3581~~~~
Cary Clark3e73dcf2018-12-06 08:41:14 -05003582kUTF8_SkTextEncoding == text encoding
3583kGlyphID_SkTextEncoding == text encoding
Cary Clark12799e12017-07-28 15:18:29 -04003584~~~~
3585
3586</fiddle-embed></div>
3587
Cary Clark682c58d2018-05-16 07:07:07 -04003588<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003589
3590---
Cary Clark12799e12017-07-28 15:18:29 -04003591
Cary Clark682c58d2018-05-16 07:07:07 -04003592<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark3e73dcf2018-12-06 08:41:14 -05003593void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04003594</pre>
3595
Cary Clark3e73dcf2018-12-06 08:41:14 -05003596Sets the <a href='#Text_Encoding'>text encoding</a>. <a href='undocumented#Text'>Text</a> <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> describes how to interpret the <a href='undocumented#Text'>text</a> bytes pass
3597to methods like <a href='#SkPaint_measureText'>measureText</a>() and <a href='SkCanvas_Reference#SkCanvas'>SkCanvas</a>::<a href='#SkCanvas_drawText'>drawText</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003598
3599### Parameters
3600
Cary Clark682c58d2018-05-16 07:07:07 -04003601<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
Cary Clark3e73dcf2018-12-06 08:41:14 -05003602 <td>the new <a href='#Text_Encoding'>text encoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003603 </tr>
3604</table>
3605
3606### Example
3607
Cary Clark3e73dcf2018-12-06 08:41:14 -05003608<div><fiddle-embed name="a5d1ba0dbf42afb797ffdb07647b5cb9">
Cary Clark12799e12017-07-28 15:18:29 -04003609
3610#### Example Output
3611
3612~~~~
36134 != text encoding
3614~~~~
3615
3616</fiddle-embed></div>
3617
Cary Clark61313f32018-10-08 14:57:48 -04003618<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04003619
Cary Clarka90ea222018-10-16 10:30:28 -04003620---
3621
Cary Clark7e69c8f2018-11-06 20:40:45 -05003622<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003623
Cary Clark682c58d2018-05-16 07:07:07 -04003624<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003625
3626---
Cary Clark12799e12017-07-28 15:18:29 -04003627
Cary Clark682c58d2018-05-16 07:07:07 -04003628<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003629<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='undocumented#SkFontMetrics'>SkFontMetrics</a>* metrics)const
Cary Clark12799e12017-07-28 15:18:29 -04003630</pre>
3631
Cary Clark777eede2018-11-09 16:04:58 -05003632Returns <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> associated with <a href='undocumented#SkTypeface'>SkTypeface</a>.
3633The return value is the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>
Cary Clark12799e12017-07-28 15:18:29 -04003634descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003635If <a href='#SkPaint_getFontMetrics_metrics'>metrics</a> is not nullptr, <a href='undocumented#SkFontMetrics'>SkFontMetrics</a> is copied to <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>.
3636Results are scaled by <a href='#Text_Size'>text size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003637dimensions required by <a href='#Text_Scale_X'>text scale x</a>, <a href='#Text_Skew_X'>text skew x</a>, <a href='#Fake_Bold'>fake bold</a>,
3638<a href='#Style_Stroke'>style stroke</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003639
3640### Parameters
3641
Cary Clark682c58d2018-05-16 07:07:07 -04003642<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003643 <td>storage for <a href='undocumented#SkFontMetrics'>SkFontMetrics</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003644 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04003645</table>
3646
3647### Return Value
3648
Cary Clark09d80c02018-10-31 12:14:03 -04003649recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003650
3651### Example
3652
skia-bookmaker2dc1e342018-11-02 05:33:11 +00003653<div><fiddle-embed name="59d9b8249afa1c2af6186711250ce240"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003654
3655### See Also
3656
Cary Clark3e73dcf2018-12-06 08:41:14 -05003657<a href='#Font_Size'>Font_Size</a> <a href='undocumented#Typeface'>Typeface</a> <a href='#Paint_Typeface_Methods'>Typeface_Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04003658
Cary Clark682c58d2018-05-16 07:07:07 -04003659<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003660
3661---
Cary Clark12799e12017-07-28 15:18:29 -04003662
Cary Clark682c58d2018-05-16 07:07:07 -04003663<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003664<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04003665</pre>
3666
Cary Clark777eede2018-11-09 16:04:58 -05003667Returns the recommended spacing between <a href='undocumented#Line'>lines</a>: the sum of metrics
Cary Clark12799e12017-07-28 15:18:29 -04003668descent, ascent, and leading.
Cary Clark777eede2018-11-09 16:04:58 -05003669Result is scaled by <a href='undocumented#Text'>text</a> <a href='undocumented#Size'>size</a> but does not take into account
Cary Clark09d80c02018-10-31 12:14:03 -04003670dimensions required by stroking and <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
3671Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003672
3673### Return Value
3674
Cary Clark09d80c02018-10-31 12:14:03 -04003675recommended spacing between <a href='undocumented#Line'>lines</a>
Cary Clark12799e12017-07-28 15:18:29 -04003676
3677### Example
3678
3679<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
3680
3681#### Example Output
3682
3683~~~~
3684textSize: 12 fontSpacing: 13.9688
3685textSize: 18 fontSpacing: 20.9531
3686textSize: 24 fontSpacing: 27.9375
3687textSize: 32 fontSpacing: 37.25
3688~~~~
3689
3690</fiddle-embed></div>
3691
Cary Clark682c58d2018-05-16 07:07:07 -04003692<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003693
3694---
Cary Clark12799e12017-07-28 15:18:29 -04003695
Cary Clark682c58d2018-05-16 07:07:07 -04003696<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003697int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength, <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[])const
Cary Clark12799e12017-07-28 15:18:29 -04003698</pre>
3699
Cary Clark777eede2018-11-09 16:04:58 -05003700Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into <a href='undocumented#Glyph'>glyph</a> indices.
3701Returns the number of <a href='undocumented#Glyph'>glyph</a> indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003702<a href='undocumented#SkTextEncoding'>SkTextEncoding</a> specifies how <a href='#SkPaint_textToGlyphs_text'>text</a> represents characters or <a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003703<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the <a href='undocumented#Glyph'>glyph</a> count.
Cary Clark12799e12017-07-28 15:18:29 -04003704
Cary Clark777eede2018-11-09 16:04:58 -05003705Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid <a href='undocumented#Glyph'>glyph</a> indices.
Cary Clark12799e12017-07-28 15:18:29 -04003706
Cary Clark777eede2018-11-09 16:04:58 -05003707If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
3708If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003709
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003710If <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> is <a href='undocumented#kUTF8_SkTextEncoding'>kUTF8_SkTextEncoding</a> and
Cary Clark777eede2018-11-09 16:04:58 -05003711<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04003712
3713### Parameters
3714
Cary Clark682c58d2018-05-16 07:07:07 -04003715<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003716 <td>character storage encoded with <a href='undocumented#SkTextEncoding'>SkTextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003717 </tr>
3718 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
3719 <td>length of character storage in bytes</td>
3720 </tr>
3721 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003722 <td>storage for <a href='undocumented#Glyph'>glyph</a> indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003723 </tr>
3724</table>
3725
3726### Return Value
3727
Cary Clark777eede2018-11-09 16:04:58 -05003728number of <a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> represented by <a href='#SkPaint_textToGlyphs_text'>text</a> of length <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a>
Cary Clark12799e12017-07-28 15:18:29 -04003729
3730### Example
3731
Cary Clark3e73dcf2018-12-06 08:41:14 -05003732<div><fiddle-embed name="d11136d8a74f63009da2a7f550710823"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003733
Cary Clark682c58d2018-05-16 07:07:07 -04003734<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003735
3736---
Cary Clark12799e12017-07-28 15:18:29 -04003737
Cary Clark682c58d2018-05-16 07:07:07 -04003738<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003739int <a href='#SkPaint_countText'>countText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength)const
Cary Clark12799e12017-07-28 15:18:29 -04003740</pre>
3741
Cary Clark777eede2018-11-09 16:04:58 -05003742Returns the number of <a href='undocumented#Glyph'>glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003743Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to count the <a href='undocumented#Glyph'>glyphs</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04003744Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>().
Cary Clark12799e12017-07-28 15:18:29 -04003745
3746### Parameters
3747
Cary Clark682c58d2018-05-16 07:07:07 -04003748<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003749 <td>character storage encoded with <a href='undocumented#SkTextEncoding'>SkTextEncoding</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003750 </tr>
3751 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
3752 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04003753 </tr>
3754</table>
3755
3756### Return Value
3757
Cary Clark777eede2018-11-09 16:04:58 -05003758number of <a href='undocumented#Glyph'>glyphs</a> represented by <a href='#SkPaint_countText_text'>text</a> of length <a href='#SkPaint_countText_byteLength'>byteLength</a>
Cary Clark12799e12017-07-28 15:18:29 -04003759
3760### Example
3761
Cary Clarkf9603982018-07-17 08:20:27 -04003762<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04003763
3764#### Example Output
3765
3766~~~~
3767count = 5
3768~~~~
3769
3770</fiddle-embed></div>
3771
Cary Clark682c58d2018-05-16 07:07:07 -04003772<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003773
3774---
Cary Clark12799e12017-07-28 15:18:29 -04003775
Cary Clark682c58d2018-05-16 07:07:07 -04003776<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003777bool <a href='#SkPaint_containsText'>containsText</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength)const
Cary Clark12799e12017-07-28 15:18:29 -04003778</pre>
3779
Cary Clark777eede2018-11-09 16:04:58 -05003780Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index.
3781Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
Cary Clark09d80c02018-10-31 12:14:03 -04003782<a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003783
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003784If <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> is <a href='undocumented#kGlyphID_SkTextEncoding'>kGlyphID_SkTextEncoding</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003785returns true if all <a href='undocumented#Glyph'>glyph</a> indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
3786does not check to see if <a href='#SkPaint_containsText_text'>text</a> contains valid <a href='undocumented#Glyph'>glyph</a> indices for <a href='undocumented#SkTypeface'>SkTypeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003787
Cary Clark777eede2018-11-09 16:04:58 -05003788Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04003789
3790### Parameters
3791
Cary Clark682c58d2018-05-16 07:07:07 -04003792<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003793 <td>array of characters or <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003794 </tr>
3795 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003796 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04003797 </tr>
3798</table>
3799
3800### Return Value
3801
Cary Clark777eede2018-11-09 16:04:58 -05003802true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero <a href='undocumented#Glyph'>glyph</a> index
Cary Clark12799e12017-07-28 15:18:29 -04003803
Cary Clark777eede2018-11-09 16:04:58 -05003804<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a <a href='undocumented#Glyph'>glyph</a> index
3805corresponding to the Unicode surrogate code <a href='SkPoint_Reference#Point'>point</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003806</div>
Cary Clark12799e12017-07-28 15:18:29 -04003807
3808#### Example Output
3809
3810~~~~
38110x00b0 == has char
38120xd800 != has char
3813~~~~
3814
Cary Clark12799e12017-07-28 15:18:29 -04003815### Example
3816
Cary Clark3e73dcf2018-12-06 08:41:14 -05003817<div><fiddle-embed name="6a68cb3c8b81a5976c81ee004f559247"><div><a href='#SkPaint_containsText'>containsText</a> returns true that <a href='undocumented#Glyph'>glyph</a> index is greater than zero, not
Cary Clark777eede2018-11-09 16:04:58 -05003818that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05003819</div>
Cary Clark12799e12017-07-28 15:18:29 -04003820
3821#### Example Output
3822
3823~~~~
38240x01ff == has glyph
38250x0000 != has glyph
38260xffff == has glyph
3827~~~~
3828
3829</fiddle-embed></div>
3830
3831### See Also
3832
Cary Clark682c58d2018-05-16 07:07:07 -04003833<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04003834
Cary Clark682c58d2018-05-16 07:07:07 -04003835<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003836
3837---
Cary Clark12799e12017-07-28 15:18:29 -04003838
Cary Clark682c58d2018-05-16 07:07:07 -04003839<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003840void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> <a href='undocumented#Glyph'>glyphs</a>[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> <a href='undocumented#Text'>text</a>[])const
Cary Clark12799e12017-07-28 15:18:29 -04003841</pre>
3842
Cary Clark777eede2018-11-09 16:04:58 -05003843Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
3844<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
3845Uses the <a href='undocumented#SkTypeface'>SkTypeface</a>, but is unaffected
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003846by <a href='undocumented#SkTextEncoding'>SkTextEncoding</a>; the <a href='#SkPaint_glyphsToUnichars_text'>text</a> values returned are equivalent to <a href='undocumented#kUTF32_SkTextEncoding'>kUTF32_SkTextEncoding</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003847
Cary Clarkcb6bef02018-11-29 12:05:25 -05003848Only supported on platforms that use FreeType as the <a href='SkFont_Reference#Font_Engine'>font engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003849
3850### Parameters
3851
Cary Clark682c58d2018-05-16 07:07:07 -04003852<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
Cary Clarkcb6bef02018-11-29 12:05:25 -05003853 <td>array of indices into <a href='SkFont_Reference#Font'>font</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04003854 </tr>
3855 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003856 <td>length of <a href='undocumented#Glyph'>glyph</a> array</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003857 </tr>
3858 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04003859 <td>storage for character codes, one per <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003860 </tr>
3861</table>
3862
skia-bookmaker9cabb4f2018-12-11 05:44:07 +00003863<div>Convert UTF-8 <a href='#SkPaint_glyphsToUnichars_text'>text</a> to <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a>; then convert <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> to Unichar code <a href='SkPoint_Reference#Point'>points</a>.
3864</div>
Cary Clark12799e12017-07-28 15:18:29 -04003865
Cary Clarka90ea222018-10-16 10:30:28 -04003866<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003867
Cary Clark682c58d2018-05-16 07:07:07 -04003868<a name='SkPaint_measureText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003869
3870---
Cary Clark12799e12017-07-28 15:18:29 -04003871
Cary Clark682c58d2018-05-16 07:07:07 -04003872<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003873<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds)const
Cary Clark12799e12017-07-28 15:18:29 -04003874</pre>
3875
Cary Clark3aca39d2018-10-23 14:44:05 -04003876Returns the advance width of <a href='#SkPaint_measureText_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003877The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003878Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_measureText_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003879and <a href='#Text_Size'>text size</a>, <a href='#Text_Scale_X'>text scale x</a>, <a href='#Text_Skew_X'>text skew x</a>, <a href='#Stroke_Width'>stroke width</a>, and
3880<a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
3881Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
3882The bounding box is computed as if the <a href='#SkPaint_measureText_text'>text</a> was drawn at the origin.
Cary Clark12799e12017-07-28 15:18:29 -04003883
3884### Parameters
3885
Cary Clark682c58d2018-05-16 07:07:07 -04003886<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003887 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003888 </tr>
3889 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003890 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003891 </tr>
3892 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
3893 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003894 </tr>
3895</table>
3896
3897### Return Value
3898
3899advance width or height
3900
3901### Example
3902
Cary Clark83647062018-07-18 16:21:51 -04003903<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003904
Cary Clark682c58d2018-05-16 07:07:07 -04003905<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05003906
Cary Clarka90ea222018-10-16 10:30:28 -04003907---
3908
Cary Clark682c58d2018-05-16 07:07:07 -04003909<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003910<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* <a href='undocumented#Text'>text</a>, size_t length)const
Cary Clark12799e12017-07-28 15:18:29 -04003911</pre>
3912
Cary Clark3aca39d2018-10-23 14:44:05 -04003913Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04003914The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003915Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_measureText_2_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003916and <a href='#Text_Size'>text size</a> to scale the metrics.
Cary Clark09d80c02018-10-31 12:14:03 -04003917Does not scale the advance or bounds by <a href='#Fake_Bold'>fake bold</a> or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003918
3919### Parameters
3920
Cary Clark682c58d2018-05-16 07:07:07 -04003921<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003922 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003923 </tr>
3924 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003925 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04003926 </tr>
3927</table>
3928
3929### Return Value
3930
3931advance width or height
3932
3933### Example
3934
3935<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
3936
3937#### Example Output
3938
3939~~~~
3940default width = 5
3941double width = 10
3942~~~~
3943
3944</fiddle-embed></div>
3945
Cary Clark682c58d2018-05-16 07:07:07 -04003946<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003947
3948---
Cary Clark12799e12017-07-28 15:18:29 -04003949
Cary Clark682c58d2018-05-16 07:07:07 -04003950<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003951int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* <a href='undocumented#Text'>text</a>, size_t byteLength, <a href='undocumented#SkScalar'>SkScalar</a> widths[], <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr)const
Cary Clark12799e12017-07-28 15:18:29 -04003952</pre>
3953
Cary Clark777eede2018-11-09 16:04:58 -05003954Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each <a href='undocumented#Glyph'>glyph</a> in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
3955the <a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>.
3956Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
3957If <a href='#SkPaint_getTextWidths_widths'>widths</a> is not nullptr, <a href='#SkPaint_getTextWidths_widths'>widths</a> must be an array of <a href='undocumented#Glyph'>glyph</a> count entries.
3958if <a href='#SkPaint_getTextWidths_bounds'>bounds</a> is not nullptr, <a href='#SkPaint_getTextWidths_bounds'>bounds</a> must be an array of <a href='undocumented#Glyph'>glyph</a> count entries.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00003959Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getTextWidths_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='#Font_Metrics'>font metrics</a>,
Cary Clark777eede2018-11-09 16:04:58 -05003960and <a href='#Text_Size'>text size</a> to scale the <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a>.
Cary Clark09d80c02018-10-31 12:14:03 -04003961Does not scale the advance by <a href='#Fake_Bold'>fake bold</a> or <a href='undocumented#SkPathEffect'>SkPathEffect</a>.
Cary Clark777eede2018-11-09 16:04:58 -05003962Does include <a href='#Fake_Bold'>fake bold</a> and <a href='undocumented#SkPathEffect'>SkPathEffect</a> in the <a href='#SkPaint_getTextWidths_bounds'>bounds</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003963
3964### Parameters
3965
Cary Clark682c58d2018-05-16 07:07:07 -04003966<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003967 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices to be measured</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003968 </tr>
3969 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003970 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003971 </tr>
3972 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003973 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each <a href='undocumented#Glyph'>glyph</a>; may be nullptr</td>
Cary Clark682c58d2018-05-16 07:07:07 -04003974 </tr>
3975 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05003976 <td>returns <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each <a href='undocumented#Glyph'>glyph</a> relative to (0, 0); may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04003977 </tr>
3978</table>
3979
3980### Return Value
3981
Cary Clark777eede2018-11-09 16:04:58 -05003982<a href='undocumented#Glyph'>glyph</a> count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04003983
3984### Example
3985
Cary Clark777eede2018-11-09 16:04:58 -05003986<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href='undocumented#Glyph'>Glyphs</a> increase for stroked <a href='#SkPaint_getTextWidths_text'>text</a>, but <a href='#SkPaint_getTextWidths_text'>text</a> advance remains the same.
3987The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05003988</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003989
Cary Clarka90ea222018-10-16 10:30:28 -04003990<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05003991
Cary Clark777eede2018-11-09 16:04:58 -05003992<a href='#Paint_Text_Path'>Text_Path</a> describes the geometry of <a href='undocumented#Glyph'>Glyphs</a> used to draw <a href='undocumented#Text'>text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003993
Cary Clark682c58d2018-05-16 07:07:07 -04003994<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003995
3996---
Cary Clark12799e12017-07-28 15:18:29 -04003997
Cary Clark682c58d2018-05-16 07:07:07 -04003998<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05003999void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>)const
Cary Clark12799e12017-07-28 15:18:29 -04004000</pre>
4001
Cary Clark777eede2018-11-09 16:04:58 -05004002Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004003Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getTextPath_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
Cary Clark777eede2018-11-09 16:04:58 -05004004and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4005All of the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a> are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
4006Uses <a href='#SkPaint_getTextPath_x'>x</a>, <a href='#SkPaint_getTextPath_y'>y</a>, to position <a href='#SkPaint_getTextPath_path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004007
4008### Parameters
4009
Cary Clark682c58d2018-05-16 07:07:07 -04004010<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004011 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004012 </tr>
4013 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4014 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4015 </tr>
4016 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004017 <td>x-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004018 </tr>
4019 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004020 <td>y-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004021 </tr>
4022 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004023 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004024 </tr>
4025</table>
4026
4027### Example
4028
Cary Clark777eede2018-11-09 16:04:58 -05004029<div><fiddle-embed name="7c9e6a399f898d68026c1f0865e6f73e"><div><a href='undocumented#Text'>Text</a> is added to <a href='SkPath_Reference#Path'>Path</a>, offset, and subtracted from <a href='SkPath_Reference#Path'>Path</a>, then added at
4030the offset location. The result is rendered with one draw call.
Cary Clark1a8d7622018-03-05 13:26:16 -05004031</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004032
Cary Clark682c58d2018-05-16 07:07:07 -04004033<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004034
4035---
Cary Clark12799e12017-07-28 15:18:29 -04004036
Cary Clark682c58d2018-05-16 07:07:07 -04004037<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004038void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* <a href='undocumented#Text'>text</a>, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* <a href='SkPath_Reference#Path'>path</a>)const
Cary Clark12799e12017-07-28 15:18:29 -04004039</pre>
4040
Cary Clark777eede2018-11-09 16:04:58 -05004041Returns the geometry as <a href='SkPath_Reference#SkPath'>SkPath</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
skia-bookmakerfe47c2a2018-12-04 06:13:55 +00004042Uses <a href='undocumented#SkTextEncoding'>SkTextEncoding</a> to decode <a href='#SkPaint_getPosTextPath_text'>text</a>, <a href='undocumented#SkTypeface'>SkTypeface</a> to get the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>,
Cary Clark777eede2018-11-09 16:04:58 -05004043and <a href='#Text_Size'>text size</a>, <a href='#Fake_Bold'>fake bold</a>, and <a href='undocumented#SkPathEffect'>SkPathEffect</a> to scale and modify the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a>.
4044All of the <a href='undocumented#Glyph'>glyph</a> <a href='SkPath_Reference#Path'>paths</a> are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
4045Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
4046<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each <a href='undocumented#Glyph'>glyph</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004047
4048### Parameters
4049
Cary Clark682c58d2018-05-16 07:07:07 -04004050<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
Cary Clark777eede2018-11-09 16:04:58 -05004051 <td>character codes or <a href='undocumented#Glyph'>glyph</a> indices</td>
Cary Clark682c58d2018-05-16 07:07:07 -04004052 </tr>
4053 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
4054 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
4055 </tr>
4056 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004057 <td>positions of each <a href='undocumented#Glyph'>glyph</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004058 </tr>
4059 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
Cary Clark09d80c02018-10-31 12:14:03 -04004060 <td>geometry of the <a href='undocumented#Glyph'>glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004061 </tr>
4062</table>
4063
4064### Example
4065
Cary Clark777eede2018-11-09 16:04:58 -05004066<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href='undocumented#Glyph'>Glyphs</a> to eliminate overlaps, and strokes the result.
Cary Clark1a8d7622018-03-05 13:26:16 -05004067</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004068
Cary Clark682c58d2018-05-16 07:07:07 -04004069<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004070
4071---
Cary Clark12799e12017-07-28 15:18:29 -04004072
Cary Clark682c58d2018-05-16 07:07:07 -04004073<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkcb6bef02018-11-29 12:05:25 -05004074bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>()const
Cary Clark12799e12017-07-28 15:18:29 -04004075</pre>
4076
Cary Clark777eede2018-11-09 16:04:58 -05004077Returns true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing;
4078otherwise, the <a href='SkPaint_Reference#SkPaint'>SkPaint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004079
Cary Clark777eede2018-11-09 16:04:58 -05004080Returns true if, for example, <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> combined with <a href='SkColor_Reference#Alpha'>alpha</a> computes a
4081new <a href='SkColor_Reference#Alpha'>alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004082
4083### Return Value
4084
Cary Clark777eede2018-11-09 16:04:58 -05004085true if <a href='SkPaint_Reference#SkPaint'>SkPaint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004086
4087### Example
4088
Cary Clark83647062018-07-18 16:21:51 -04004089<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04004090
4091#### Example Output
4092
4093~~~~
4094initial nothing to draw: false
4095blend dst nothing to draw: true
4096blend src over nothing to draw: false
4097alpha 0 nothing to draw: true
4098~~~~
4099
4100</fiddle-embed></div>
4101
Cary Clarka90ea222018-10-16 10:30:28 -04004102<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05004103