blob: 6f1723520d122948afb9592516a23b5bcd573dac [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">
10class <a href='#SkPaint'>SkPaint</a> {
11public:
12 <a href='#SkPaint_empty_constructor'>SkPaint()</a>;
13 <a href='#SkPaint_copy_const_SkPaint'>SkPaint(const SkPaint& paint)</a>;
14 <a href='#SkPaint_move_SkPaint'>SkPaint(SkPaint&& paint)</a>;
15 <a href='#SkPaint_destructor'>~SkPaint()</a>;
16 <a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>;
17 <a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>;
18 friend bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>;
19 friend bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>;
20 uint32_t <a href='#SkPaint_getHash'>getHash</a>() const;
21 void <a href='#SkPaint_reset'>reset</a>();
22
23 enum <a href='#SkPaint_Hinting'>Hinting</a> {
24 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
25 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
26 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
27 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
28 };
29
30 <a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const;
31 void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel);
32
33 enum <a href='#SkPaint_Flags'>Flags</a> {
34 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
35 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
36 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
37 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
38 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
39 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
40 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
41 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
42 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText_Flag</a> = 0x1000,
43 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
44 };
45
46 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
47 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
48 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 0x10,
49 };
50
51 uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const;
52 void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags);
53 bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const;
54 void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa);
55 bool <a href='#SkPaint_isDither'>isDither</a>() const;
56 void <a href='#SkPaint_setDither'>setDither</a>(bool dither);
57 bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const;
58 void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText);
59 bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const;
60 void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText);
61 bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const;
62 void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText);
63 bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const;
64 void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText);
65 bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const;
66 void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter);
67 bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const;
68 void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText);
69 bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const;
70 void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText);
71 bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const;
72 void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool);
73 <a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const;
74 void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality);
75
76 enum <a href='#SkPaint_Style'>Style</a> {
77 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
78 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
79 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
80 };
81
82 static constexpr int <a href='#SkPaint_kStyleCount'>kStyleCount</a> = <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a> + 1;
83
84 <a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const;
85 void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style);
86 <a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const;
87 <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const;
88 void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color);
89 void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace);
90 uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const;
91 void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a);
92 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);
93 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const;
94 void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width);
95 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const;
96 void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter);
97
98 enum <a href='#SkPaint_Cap'>Cap</a> {
99 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
100 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
101 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
102 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
103 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
104 };
105
106 static constexpr int <a href='#SkPaint_kCapCount'>kCapCount</a> = <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> + 1;
107
108 enum <a href='#SkPaint_Join'>Join</a> {
109 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
110 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
111 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
112 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
113 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
114 };
115
116 static constexpr int <a href='#SkPaint_kJoinCount'>kJoinCount</a> = <a href='#SkPaint_kLast_Join'>kLast_Join</a> + 1;
117
118 <a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const;
119 void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap);
120 <a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const;
121 void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join);
122 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,
123 <a href='undocumented#SkScalar'>SkScalar</a> resScale = 1) const;
124 bool <a href='#SkPaint_getFillPath_2'>getFillPath</a>(const <a href='SkPath_Reference#SkPath'>SkPath</a>& src, <a href='SkPath_Reference#SkPath'>SkPath</a>* dst) const;
125 <a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const;
126 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkShader'>SkShader</a>> <a href='#SkPaint_refShader'>refShader</a>() const;
127 void <a href='#SkPaint_setShader'>setShader</a>(sk_sp<<a href='undocumented#SkShader'>SkShader</a>> shader);
128 <a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const;
129 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkColorFilter'>SkColorFilter</a>> <a href='#SkPaint_refColorFilter'>refColorFilter</a>() const;
130 void <a href='#SkPaint_setColorFilter'>setColorFilter</a>(sk_sp<<a href='undocumented#SkColorFilter'>SkColorFilter</a>> colorFilter);
131 <a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const;
132 bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const;
133 void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode);
134 <a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const;
135 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkPathEffect'>SkPathEffect</a>> <a href='#SkPaint_refPathEffect'>refPathEffect</a>() const;
136 void <a href='#SkPaint_setPathEffect'>setPathEffect</a>(sk_sp<<a href='undocumented#SkPathEffect'>SkPathEffect</a>> pathEffect);
137 <a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const;
138 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> <a href='#SkPaint_refMaskFilter'>refMaskFilter</a>() const;
139 void <a href='#SkPaint_setMaskFilter'>setMaskFilter</a>(sk_sp<<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>> maskFilter);
140 <a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const;
141 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkTypeface'>SkTypeface</a>> <a href='#SkPaint_refTypeface'>refTypeface</a>() const;
142 void <a href='#SkPaint_setTypeface'>setTypeface</a>(sk_sp<<a href='undocumented#SkTypeface'>SkTypeface</a>> typeface);
143 <a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const;
144 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkImageFilter'>SkImageFilter</a>> <a href='#SkPaint_refImageFilter'>refImageFilter</a>() const;
145 void <a href='#SkPaint_setImageFilter'>setImageFilter</a>(sk_sp<<a href='undocumented#SkImageFilter'>SkImageFilter</a>> imageFilter);
146 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const;
147 <a href='undocumented#sk_sp'>sk_sp</a><<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> <a href='#SkPaint_refDrawLooper'>refDrawLooper</a>() const;
148 <a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const;
149 void <a href='#SkPaint_setDrawLooper'>setDrawLooper</a>(sk_sp<<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
150 void <a href='#SkPaint_setLooper'>setLooper</a>(sk_sp<<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>> drawLooper);
151
152 enum <a href='#SkPaint_Align'>Align</a> {
153 <a href='#SkPaint_kLeft_Align'>kLeft_Align</a>,
154 <a href='#SkPaint_kCenter_Align'>kCenter_Align</a>,
155 <a href='#SkPaint_kRight_Align'>kRight_Align</a>,
156 };
157
158 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
159
160 <a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const;
161 void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align);
162 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const;
163 void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize);
164 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const;
165 void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX);
166 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const;
167 void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX);
168
169 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
170 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
171 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
172 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
173 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
174 };
175
176 <a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const;
177 void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding);
178
179 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
180
181 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
182 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
183 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
184 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
185 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
186 };
187
188 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
189 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
190 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
191 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
192 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
193 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
194 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
195 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
196 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
197 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
198 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
199 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
200 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
201 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
202 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
203 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
204 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
205 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
206 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
207 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
208 };
209
210 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='#SkPaint_FontMetrics'>FontMetrics</a>* metrics, <a href='undocumented#SkScalar'>SkScalar</a> scale = 0) const;
211 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const;
212 int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* text, size_t byteLength,
213 <a href='undocumented#SkGlyphID'>SkGlyphID</a> glyphs[]) const;
214 bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const;
215 void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> glyphs[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> text[]) const;
216 int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const;
217 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* text, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const;
218 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText_2'>measureText</a>(const void* text, size_t length) const;
219 size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
220 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const;
221 int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* text, size_t byteLength, <a href='undocumented#SkScalar'>SkScalar</a> widths[],
222 <a href='SkRect_Reference#SkRect'>SkRect</a> bounds[] = nullptr) const;
223 void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
224 <a href='SkPath_Reference#SkPath'>SkPath</a>* path) const;
225 void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* text, size_t length,
226 const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* path) const;
227 int <a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
228 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
229 int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
230 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
231 int <a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a>(const void* text, size_t length, const <a href='undocumented#SkScalar'>SkScalar</a> xpos[],
232 <a href='undocumented#SkScalar'>SkScalar</a> constY, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
233 int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='SkTextBlob_Reference#SkTextBlob'>SkTextBlob</a>* blob, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2],
234 <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const;
235 <a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const;
236 bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const;
237 bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const;
238 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastBounds'>computeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const;
239 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig,
240 <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const;
241 const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage,
242 <a href='#SkPaint_Style'>Style</a> style) const;
243};
244</pre>
245
Cary Clark682c58d2018-05-16 07:07:07 -0400246<a href='#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='#Paint'>Paint</a> collects all
247options outside of the <a href='SkCanvas_Reference#Clip'>Canvas Clip</a> and <a href='SkCanvas_Reference#Matrix'>Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400248
Cary Clark7cfcbca2018-01-04 16:11:51 -0500249Various options apply to text, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -0400250
251Some options may not be implemented on all platforms; in these cases, setting
Cary Clark682c58d2018-05-16 07:07:07 -0400252the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -0400253functionality; for instance, text size is identical to matrix scale.
254
Cary Clark682c58d2018-05-16 07:07:07 -0400255<a href='#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
256pipeline and multiple pipeline stages may be affected by a single <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400257
Cary Clark682c58d2018-05-16 07:07:07 -0400258<a href='#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -0400259algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark682c58d2018-05-16 07:07:07 -0400260<a href='#Paint'>Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -0400261
Cary Clark682c58d2018-05-16 07:07:07 -0400262The objects contained by <a href='#Paint'>Paint</a> are opaque, and cannot be edited outside of the <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400263to affect it. The implementation is free to defer computations associated with the
Cary Clark682c58d2018-05-16 07:07:07 -0400264<a href='#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
Cary Clarkffb3d682018-05-17 12:17:28 -0400265<a href='SkPath_Reference#Path'>Path</a> geometries with <a href='#Anti_Alias'>Anti Aliasing</a>, regardless of how <a href='#SkPaint_kAntiAlias_Flag'>SkPaint::kAntiAlias Flag</a>
Cary Clark682c58d2018-05-16 07:07:07 -0400266is set in <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400267
Cary Clark682c58d2018-05-16 07:07:07 -0400268<a href='#Paint'>Paint</a> describes a single color, a single font, a single image quality, and so on.
Cary Clark12799e12017-07-28 15:18:29 -0400269Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark682c58d2018-05-16 07:07:07 -0400270<a href='undocumented#Shader'>Shader</a> attached to <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400271
Cary Clark682c58d2018-05-16 07:07:07 -0400272<a name='SkPaint_empty_constructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400273
274---
Cary Clark12799e12017-07-28 15:18:29 -0400275
Cary Clark682c58d2018-05-16 07:07:07 -0400276<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
277<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400278</pre>
279
Cary Clark682c58d2018-05-16 07:07:07 -0400280Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400281
282| attribute | default value |
283| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400284| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark224c7002018-06-27 11:00:21 -0400285| <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
Cary Clark682c58d2018-05-16 07:07:07 -0400286| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
287| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
288| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
289| <a href='#Dither'>Dither</a> | false |
290| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
291| <a href='#Fake_Bold'>Fake Bold</a> | false |
292| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
293| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
294| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
295| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
296| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
297| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
298| <a href='#LCD_Text'>LCD Text</a> | false |
299| <a href='#Linear_Text'>Linear Text</a> | false |
300| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
301| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
302| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
303| <a href='undocumented#Shader'>Shader</a> | nullptr |
304| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
305| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
306| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
307| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
308| <a href='#Text_Size'>Text Size</a> | 12 |
309| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
310| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
311| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
312| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
313| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
314| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
315| <a href='#Vertical_Text'>Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400316
317The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500318paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400319build system.
320
321### Return Value
322
Cary Clark682c58d2018-05-16 07:07:07 -0400323default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400324
325### Example
326
327<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
328
Cary Clark682c58d2018-05-16 07:07:07 -0400329<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400330
331---
Cary Clark12799e12017-07-28 15:18:29 -0400332
Cary Clark682c58d2018-05-16 07:07:07 -0400333<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
334<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400335</pre>
336
Cary Clark682c58d2018-05-16 07:07:07 -0400337Makes a shallow copy of <a href='#Paint'>Paint</a>. <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
338<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> are shared
339between the original <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a> and the copy. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400340their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400341
Cary Clark682c58d2018-05-16 07:07:07 -0400342The referenced objects <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
343<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
344This prevents objects with <a href='undocumented#Reference_Count'>Reference Count</a> from being modified once <a href='#Paint'>Paint</a> refers to them.
Cary Clark12799e12017-07-28 15:18:29 -0400345
346### Parameters
347
Cary Clark682c58d2018-05-16 07:07:07 -0400348<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
349 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400350 </tr>
351</table>
352
353### Return Value
354
Cary Clark682c58d2018-05-16 07:07:07 -0400355shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400356
357### Example
358
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000359<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400360
361#### Example Output
362
363~~~~
364SK_ColorRED == paint1.getColor()
365SK_ColorBLUE == paint2.getColor()
366~~~~
367
368</fiddle-embed></div>
369
Cary Clark682c58d2018-05-16 07:07:07 -0400370<a name='SkPaint_move_SkPaint'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400371
372---
Cary Clark12799e12017-07-28 15:18:29 -0400373
Cary Clark682c58d2018-05-16 07:07:07 -0400374<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
375<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400376</pre>
377
Cary Clarkd0530ba2017-09-14 11:25:39 -0400378Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -0400379of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400380
Cary Clark682c58d2018-05-16 07:07:07 -0400381After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400382
383### Parameters
384
Cary Clark682c58d2018-05-16 07:07:07 -0400385<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
386 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400387 </tr>
388</table>
389
390### Return Value
391
Cary Clark682c58d2018-05-16 07:07:07 -0400392content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400393
394### Example
395
Cary Clark83647062018-07-18 16:21:51 -0400396<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -0400397
398#### Example Output
399
400~~~~
401path effect unique: true
402~~~~
403
404</fiddle-embed></div>
405
Cary Clark682c58d2018-05-16 07:07:07 -0400406<a name='SkPaint_reset'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400407
408---
Cary Clark12799e12017-07-28 15:18:29 -0400409
Cary Clark682c58d2018-05-16 07:07:07 -0400410<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
411void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400412</pre>
413
Cary Clark682c58d2018-05-16 07:07:07 -0400414Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
415<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400416
417### Example
418
419<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
420
421#### Example Output
422
423~~~~
424paint1 == paint2
425~~~~
426
427</fiddle-embed></div>
428
Cary Clark682c58d2018-05-16 07:07:07 -0400429<a name='SkPaint_destructor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400430
431---
Cary Clark12799e12017-07-28 15:18:29 -0400432
Cary Clark682c58d2018-05-16 07:07:07 -0400433<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
434<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400435</pre>
436
Cary Clark682c58d2018-05-16 07:07:07 -0400437Decreases <a href='#Paint'>Paint</a> <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects: <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
438<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a>. If the
439objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400440
Cary Clarka90ea222018-10-16 10:30:28 -0400441<a name='Management'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400442
Cary Clark682c58d2018-05-16 07:07:07 -0400443<a name='SkPaint_copy_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400444
445---
Cary Clark12799e12017-07-28 15:18:29 -0400446
Cary Clark682c58d2018-05-16 07:07:07 -0400447<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
448<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400449</pre>
450
Cary Clark682c58d2018-05-16 07:07:07 -0400451Makes a shallow copy of <a href='#Paint'>Paint</a>. <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
452<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> are shared
453between the original <a href='#SkPaint_copy_operator_paint'>paint</a> and the copy. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400454prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -0400455resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
456are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400457
458### Parameters
459
Cary Clark682c58d2018-05-16 07:07:07 -0400460<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
461 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400462 </tr>
463</table>
464
465### Return Value
466
Cary Clark682c58d2018-05-16 07:07:07 -0400467content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400468
469### Example
470
471<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
472
473#### Example Output
474
475~~~~
476SK_ColorRED == paint1.getColor()
477SK_ColorRED == paint2.getColor()
478~~~~
479
480</fiddle-embed></div>
481
Cary Clark682c58d2018-05-16 07:07:07 -0400482<a name='SkPaint_move_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400483
484---
Cary Clark12799e12017-07-28 15:18:29 -0400485
Cary Clark682c58d2018-05-16 07:07:07 -0400486<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
487<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400488</pre>
489
Cary Clark682c58d2018-05-16 07:07:07 -0400490Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
491of objects referenced by the <a href='#SkPaint_move_operator_paint'>paint</a> parameter. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400492prior destination are decreased by one; those objects are deleted if the resulting count
493is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400494
Cary Clark682c58d2018-05-16 07:07:07 -0400495After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400496
497### Parameters
498
Cary Clark682c58d2018-05-16 07:07:07 -0400499<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
500 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -0400501 </tr>
502</table>
503
504### Return Value
505
Cary Clark682c58d2018-05-16 07:07:07 -0400506content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400507
508### Example
509
Ravi Mistry874e22b2018-07-19 03:49:13 +0000510<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -0400511
512#### Example Output
513
514~~~~
515SK_ColorRED == paint2.getColor()
516~~~~
517
518</fiddle-embed></div>
519
Cary Clark682c58d2018-05-16 07:07:07 -0400520<a name='SkPaint_equal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400521
522---
Cary Clark12799e12017-07-28 15:18:29 -0400523
Cary Clark682c58d2018-05-16 07:07:07 -0400524<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
525bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400526</pre>
527
Cary Clark682c58d2018-05-16 07:07:07 -0400528Compares <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
529if <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
530<a href='undocumented#Draw_Looper'>Draw Looper</a>, or <a href='undocumented#Image_Filter'>Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400531
532### Parameters
533
Cary Clark682c58d2018-05-16 07:07:07 -0400534<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
535 <td><a href='#Paint'>Paint</a> to compare</td>
536 </tr>
537 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
538 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400539 </tr>
540</table>
541
542### Return Value
543
Cary Clark682c58d2018-05-16 07:07:07 -0400544true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400545
546### Example
547
548<div><fiddle-embed name="7481a948e34672720337a631830586dd">
549
550#### Example Output
551
552~~~~
553paint1 == paint2
554paint1 != paint2
555~~~~
556
557</fiddle-embed></div>
558
Cary Clark06c20f32018-03-20 15:53:27 -0400559### See Also
560
Cary Clark682c58d2018-05-16 07:07:07 -0400561<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400562
Cary Clark682c58d2018-05-16 07:07:07 -0400563<a name='SkPaint_notequal_operator'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400564
565---
Cary Clark12799e12017-07-28 15:18:29 -0400566
Cary Clark682c58d2018-05-16 07:07:07 -0400567<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
568bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -0400569</pre>
570
Cary Clark682c58d2018-05-16 07:07:07 -0400571Compares <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
572if <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
573<a href='undocumented#Draw_Looper'>Draw Looper</a>, or <a href='undocumented#Image_Filter'>Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400574
575### Parameters
576
Cary Clark682c58d2018-05-16 07:07:07 -0400577<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
578 <td><a href='#Paint'>Paint</a> to compare</td>
579 </tr>
580 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
581 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400582 </tr>
583</table>
584
585### Return Value
586
Cary Clark682c58d2018-05-16 07:07:07 -0400587true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400588
589### Example
590
skia-bookmakera717ca92018-07-08 05:32:09 +0000591<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -0400592
593#### Example Output
594
595~~~~
596paint1 == paint2
597paint1 == paint2
598~~~~
599
600</fiddle-embed></div>
601
Cary Clark06c20f32018-03-20 15:53:27 -0400602### See Also
603
Cary Clark682c58d2018-05-16 07:07:07 -0400604<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -0400605
Cary Clark682c58d2018-05-16 07:07:07 -0400606<a name='SkPaint_getHash'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400607
608---
Cary Clark12799e12017-07-28 15:18:29 -0400609
Cary Clark682c58d2018-05-16 07:07:07 -0400610<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
611uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400612</pre>
613
Cary Clark682c58d2018-05-16 07:07:07 -0400614Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400615Identical hashes guarantee that the paints are
616equivalent, but differing hashes do not guarantee that the paints have differing
617contents.
618
Cary Clark682c58d2018-05-16 07:07:07 -0400619If <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a> returns true for two paints,
Cary Clark12799e12017-07-28 15:18:29 -0400620their hashes are also equal.
621
622The hash returned is platform and implementation specific.
623
624### Return Value
625
626a shallow hash
627
628### Example
629
Cary Clark83647062018-07-18 16:21:51 -0400630<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -0400631
632#### Example Output
633
634~~~~
635paint1 == paint2
636paint1.getHash() == paint2.getHash()
637~~~~
638
639</fiddle-embed></div>
640
Cary Clarka90ea222018-10-16 10:30:28 -0400641<a name='Hinting'></a>
642
643<a name='SkPaint_Hinting'></a>
644
Cary Clark12799e12017-07-28 15:18:29 -0400645---
646
Cary Clarka560c472017-11-27 10:44:06 -0500647<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400648 enum <a href='#SkPaint_Hinting'>Hinting</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400649 <a href='#SkPaint_kNo_Hinting'>kNo_Hinting</a> = 0,
650 <a href='#SkPaint_kSlight_Hinting'>kSlight_Hinting</a> = 1,
651 <a href='#SkPaint_kNormal_Hinting'>kNormal_Hinting</a> = 2,
652 <a href='#SkPaint_kFull_Hinting'>kFull_Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -0400653 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500654</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400655
Cary Clark682c58d2018-05-16 07:07:07 -0400656<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
657look at a given point size on font engines that support it. <a href='#SkPaint_Hinting'>Hinting</a> may have a
Cary Clark12799e12017-07-28 15:18:29 -0400658muted effect or no effect at all depending on the platform.
659
Cary Clark7cfcbca2018-01-04 16:11:51 -0500660The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -0400661as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400662
663### Constants
664
Cary Clark682c58d2018-05-16 07:07:07 -0400665<table style='border-collapse: collapse; width: 62.5em'>
666 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
667<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
668<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
669 <tr style='background-color: #f0f0f0; '>
670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
671 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
672 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
673Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500674With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
675bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400676outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -0500677to 26.6 fractional pixels.
678</td>
Cary Clark12799e12017-07-28 15:18:29 -0400679 </tr>
680 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400681 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
682 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
683 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
684Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500685With FreeType, this is equivalent in spirit to the
686FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400687lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -0400688Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -0500689</td>
Cary Clark12799e12017-07-28 15:18:29 -0400690 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400691 <tr style='background-color: #f0f0f0; '>
692 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
693 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
694 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
695Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500696With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
697choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -0500698gray-level rendering.
699</td>
Cary Clark12799e12017-07-28 15:18:29 -0400700 </tr>
701 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400702 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
703 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
704 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -0400705Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -0400706FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is set.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500707FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
708horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -0500709variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
710</td>
Cary Clark12799e12017-07-28 15:18:29 -0400711 </tr>
712</table>
713
Cary Clark682c58d2018-05-16 07:07:07 -0400714On <a href='undocumented#OS_X'>OS X</a> and iOS, hinting controls whether <a href='undocumented#Core_Graphics'>Core Graphics</a> dilates the font outlines
Cary Clark137b8742018-05-30 09:21:49 -0400715to account for LCD text. No hinting uses <a href='undocumented#Core_Text'>Core Text</a> <a href='undocumented#Grayscale'>Grayscale</a> output.
Cary Clark682c58d2018-05-16 07:07:07 -0400716Normal hinting uses <a href='undocumented#Core_Text'>Core Text</a> LCD output. If <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is clear,
Cary Clark137b8742018-05-30 09:21:49 -0400717the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -0400718
Cary Clark682c58d2018-05-16 07:07:07 -0400719On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400720
Cary Clark682c58d2018-05-16 07:07:07 -0400721<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
722Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400723
Cary Clark682c58d2018-05-16 07:07:07 -0400724<a name='SkPaint_getHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400725
726---
Cary Clark12799e12017-07-28 15:18:29 -0400727
Cary Clark682c58d2018-05-16 07:07:07 -0400728<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
729<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400730</pre>
731
732Returns level of glyph outline adjustment.
733
734### Return Value
735
Cary Clark682c58d2018-05-16 07:07:07 -0400736one of: <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -0400737
738### Example
739
Cary Clark83647062018-07-18 16:21:51 -0400740<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
Cary Clark12799e12017-07-28 15:18:29 -0400741
742#### Example Output
743
744~~~~
745SkPaint::kNormal_Hinting == paint.getHinting()
746~~~~
747
748</fiddle-embed></div>
749
Cary Clark682c58d2018-05-16 07:07:07 -0400750<a name='SkPaint_setHinting'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400751
752---
Cary Clark12799e12017-07-28 15:18:29 -0400753
Cary Clark682c58d2018-05-16 07:07:07 -0400754<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
755void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -0400756</pre>
757
758Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -0400759Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400760
Cary Clark682c58d2018-05-16 07:07:07 -0400761| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400762| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -0400763| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
764| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
765| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
766| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400767
768### Parameters
769
Cary Clark682c58d2018-05-16 07:07:07 -0400770<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
771 <td>one of: <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400772 </tr>
773</table>
774
775### Example
776
777<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
778
779#### Example Output
780
781~~~~
782paint1 == paint2
783~~~~
784
785</fiddle-embed></div>
786
Cary Clarka90ea222018-10-16 10:30:28 -0400787<a name='Flags'></a>
788
789<a name='SkPaint_Flags'></a>
790
Cary Clark12799e12017-07-28 15:18:29 -0400791---
792
Cary Clarka560c472017-11-27 10:44:06 -0500793<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400794 enum <a href='#SkPaint_Flags'>Flags</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400795 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias_Flag</a> = 0x01,
796 <a href='#SkPaint_kDither_Flag'>kDither_Flag</a> = 0x04,
797 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText_Flag</a> = 0x20,
798 <a href='#SkPaint_kLinearText_Flag'>kLinearText_Flag</a> = 0x40,
799 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText_Flag</a> = 0x80,
800 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText_Flag</a> = 0x200,
Cary Clark61313f32018-10-08 14:57:48 -0400801 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText_Flag</a> = 0x400,
Cary Clarka90ea222018-10-16 10:30:28 -0400802 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting_Flag</a> = 0x800,
803 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText_Flag</a> = 0x1000,
Cary Clark682c58d2018-05-16 07:07:07 -0400804 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -0400805 };
Cary Clark12799e12017-07-28 15:18:29 -0400806</pre>
807
Cary Clark682c58d2018-05-16 07:07:07 -0400808The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
809The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
810with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
811All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400812multiple settings at once.
813
814### Constants
815
Cary Clark682c58d2018-05-16 07:07:07 -0400816<table style='border-collapse: collapse; width: 62.5em'>
817 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
818<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
819<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
820 <tr style='background-color: #f0f0f0; '>
821 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
822 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -0400824mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400825 </tr>
826 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
828 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
829 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
830mask for setting Dither</td>
831 </tr>
832 <tr style='background-color: #f0f0f0; '>
833 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
834 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
836mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -0400837 </tr>
838 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400839 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
840 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
841 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
842mask for setting Linear_Text</td>
843 </tr>
844 <tr style='background-color: #f0f0f0; '>
845 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
846 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
848mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400849 </tr>
850 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400851 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
852 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
853 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
854mask for setting LCD_Text</td>
855 </tr>
856 <tr style='background-color: #f0f0f0; '>
857 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
858 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
860mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -0400861 </tr>
862 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
864 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
865 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
866mask for setting Automatic_Hinting</td>
867 </tr>
868 <tr style='background-color: #f0f0f0; '>
869 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kVerticalText_Flag'><code>SkPaint::kVerticalText_Flag</code></a></td>
870 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x1000</td>
871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
872mask for setting Vertical_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400873 </tr>
874 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
876 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
877 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
878mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use</td>
Cary Clark12799e12017-07-28 15:18:29 -0400879 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400880<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
881</table>
Cary Clark12799e12017-07-28 15:18:29 -0400882
Cary Clarka90ea222018-10-16 10:30:28 -0400883<a name='SkPaint_ReserveFlags'></a>
884
885---
Cary Clark06c20f32018-03-20 15:53:27 -0400886
Cary Clarke8161dd2018-09-06 12:47:04 -0400887To be deprecated soon.
Cary Clark12799e12017-07-28 15:18:29 -0400888
Cary Clarke8161dd2018-09-06 12:47:04 -0400889Only valid for Android framework.
Cary Clark4855f782018-02-06 09:41:53 -0500890
Cary Clarka560c472017-11-27 10:44:06 -0500891<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -0400892 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
Cary Clarka90ea222018-10-16 10:30:28 -0400893 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText_ReserveFlag</a> = 0x08,
894 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText_ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -0400895 };
Cary Clark1a8d7622018-03-05 13:26:16 -0500896</pre>
Cary Clark12799e12017-07-28 15:18:29 -0400897
898### Constants
899
Cary Clark682c58d2018-05-16 07:07:07 -0400900<table style='border-collapse: collapse; width: 62.5em'>
901 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
902<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
903<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
904 <tr style='background-color: #f0f0f0; '>
905 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
906 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
907 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400908To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400909
Cary Clarke8161dd2018-09-06 12:47:04 -0400910</td>
Cary Clark12799e12017-07-28 15:18:29 -0400911 </tr>
912 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400913 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
914 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
915 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -0400916To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -0400917
Cary Clarke8161dd2018-09-06 12:47:04 -0400918</td>
Cary Clark12799e12017-07-28 15:18:29 -0400919 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400920</table>
Cary Clark4855f782018-02-06 09:41:53 -0500921
Cary Clark682c58d2018-05-16 07:07:07 -0400922<a name='SkPaint_getFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400923
924---
Cary Clark12799e12017-07-28 15:18:29 -0400925
Cary Clark682c58d2018-05-16 07:07:07 -0400926<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
927uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -0400928</pre>
929
Cary Clark682c58d2018-05-16 07:07:07 -0400930Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
931bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400932
933### Return Value
934
Cary Clark682c58d2018-05-16 07:07:07 -0400935zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400936
937### Example
938
939<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
940
941#### Example Output
942
943~~~~
944(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
945~~~~
946
947</fiddle-embed></div>
948
Cary Clark682c58d2018-05-16 07:07:07 -0400949<a name='SkPaint_setFlags'></a>
Cary Clarka90ea222018-10-16 10:30:28 -0400950
951---
Cary Clark12799e12017-07-28 15:18:29 -0400952
Cary Clark682c58d2018-05-16 07:07:07 -0400953<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
954void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -0400955</pre>
956
Cary Clark682c58d2018-05-16 07:07:07 -0400957Replaces <a href='#SkPaint_Flags'>Flags</a> with <a href='#SkPaint_setFlags_flags'>flags</a>, the union of the <a href='#SkPaint_Flags'>Flags</a> members.
958All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400959
960### Parameters
961
Cary Clark682c58d2018-05-16 07:07:07 -0400962<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
963 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400964 </tr>
965</table>
966
967### Example
968
969<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
970
971#### Example Output
972
973~~~~
974paint.isAntiAlias()
975paint.isDither()
976~~~~
977
978</fiddle-embed></div>
979
Cary Clarka90ea222018-10-16 10:30:28 -0400980<a name='Anti_Alias'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400981
Cary Clarka90ea222018-10-16 10:30:28 -0400982---
Cary Clark08895c42018-02-01 09:37:32 -0500983
Cary Clarkffb3d682018-05-17 12:17:28 -0400984<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -0400985If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
986If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is set, pixels are drawn with <a href='SkColor_Reference#Alpha'>Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400987
Cary Clark682c58d2018-05-16 07:07:07 -0400988The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400989passing through the pixel center may, but is not required to, draw the pixel.
990
Cary Clark682c58d2018-05-16 07:07:07 -0400991<a href='undocumented#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
992active <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 -0400993
Cary Clarkffb3d682018-05-17 12:17:28 -0400994A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
995<a href='undocumented#Supersampling'>Supersampling</a> to <a href='#Anti_Alias'>Anti Alias</a> all drawing, and have no mechanism to selectively
Cary Clark682c58d2018-05-16 07:07:07 -0400996<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400997
Cary Clarkffb3d682018-05-17 12:17:28 -0400998The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400999
Cary Clarkffb3d682018-05-17 12:17:28 -04001000<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
1001<a href='#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>
Cary Clark12799e12017-07-28 15:18:29 -04001002at compile time.
1003
1004### Example
1005
1006<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
1007A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -04001008The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
1009<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001010</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001011
Cary Clark682c58d2018-05-16 07:07:07 -04001012<a name='SkPaint_isAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001013
1014---
Cary Clark12799e12017-07-28 15:18:29 -04001015
Cary Clark682c58d2018-05-16 07:07:07 -04001016<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1017bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001018</pre>
1019
Cary Clark80247e52018-07-11 16:18:41 -04001020Returns true if pixels on the active edges of <a href='SkPath_Reference#Path'>Path</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -04001021
Cary Clark682c58d2018-05-16 07:07:07 -04001022Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001023
1024### Return Value
1025
Cary Clark682c58d2018-05-16 07:07:07 -04001026<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001027
1028### Example
1029
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001030<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -04001031
1032#### Example Output
1033
1034~~~~
1035paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1036paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1037~~~~
1038
1039</fiddle-embed></div>
1040
Cary Clark682c58d2018-05-16 07:07:07 -04001041<a name='SkPaint_setAntiAlias'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001042
1043---
Cary Clark12799e12017-07-28 15:18:29 -04001044
Cary Clark682c58d2018-05-16 07:07:07 -04001045<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1046void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001047</pre>
1048
Cary Clark682c58d2018-05-16 07:07:07 -04001049Requests, but does not require, that <a href='SkPath_Reference#Path'>Path</a> edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -04001050partial transparency.
1051
Cary Clark682c58d2018-05-16 07:07:07 -04001052Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1053Clears <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 -04001054
1055### Parameters
1056
Cary Clark682c58d2018-05-16 07:07:07 -04001057<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1058 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001059 </tr>
1060</table>
1061
1062### Example
1063
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001064<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -04001065
1066#### Example Output
1067
1068~~~~
1069paint1 == paint2
1070~~~~
1071
1072</fiddle-embed></div>
1073
Cary Clarka90ea222018-10-16 10:30:28 -04001074<a name='Dither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001075
Cary Clarka90ea222018-10-16 10:30:28 -04001076---
Cary Clark08895c42018-02-01 09:37:32 -05001077
Cary Clark682c58d2018-05-16 07:07:07 -04001078<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001079This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001080Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1081and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1082and 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 -04001083
1084Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001085<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>.
1086<a href='#Dither'>Dither</a> cannot be enabled for <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and
1087<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 -04001088
Cary Clark682c58d2018-05-16 07:07:07 -04001089<a href='#Dither'>Dither</a> is disabled by default.
1090<a href='#Dither'>Dither</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001091at compile time.
1092
Cary Clark2be81cf2018-09-13 12:04:30 -04001093Some platform implementations may ignore dithering. Set <code>SK_IGNORE_GPU_DITHER</code>to ignore <a href='#Dither'>Dither</a> on <a href='undocumented#GPU_Surface'>GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001094
1095### Example
1096
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001097<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
Cary Clark1a8d7622018-03-05 13:26:16 -05001098alternating nearby colors from pixel to pixel.
1099</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001100
1101### Example
1102
Cary Clarka619d452018-07-16 08:12:01 -04001103<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark224c7002018-06-27 11:00:21 -04001104Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001105dither, making it easier to see.
1106</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001107
Cary Clarka90ea222018-10-16 10:30:28 -04001108### See Also
1109
1110Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1111
Cary Clark682c58d2018-05-16 07:07:07 -04001112<a name='SkPaint_isDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001113
1114---
Cary Clark12799e12017-07-28 15:18:29 -04001115
Cary Clark682c58d2018-05-16 07:07:07 -04001116<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1117bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001118</pre>
1119
Cary Clark80247e52018-07-11 16:18:41 -04001120Returns true if color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001121
Cary Clark682c58d2018-05-16 07:07:07 -04001122Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001123
1124### Return Value
1125
Cary Clark682c58d2018-05-16 07:07:07 -04001126<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001127
1128### Example
1129
1130<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1131
1132#### Example Output
1133
1134~~~~
1135paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1136paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1137~~~~
1138
1139</fiddle-embed></div>
1140
Cary Clark682c58d2018-05-16 07:07:07 -04001141<a name='SkPaint_setDither'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001142
1143---
Cary Clark12799e12017-07-28 15:18:29 -04001144
Cary Clark682c58d2018-05-16 07:07:07 -04001145<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1146void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001147</pre>
1148
1149Requests, but does not require, to distribute color error.
1150
Cary Clark682c58d2018-05-16 07:07:07 -04001151Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1152Clears <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 -04001153
1154### Parameters
1155
Cary Clark682c58d2018-05-16 07:07:07 -04001156<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1157 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001158 </tr>
1159</table>
1160
1161### Example
1162
1163<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1164
1165#### Example Output
1166
1167~~~~
1168paint1 == paint2
1169~~~~
1170
1171</fiddle-embed></div>
1172
1173### See Also
1174
Cary Clark682c58d2018-05-16 07:07:07 -04001175<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001176
Cary Clarka90ea222018-10-16 10:30:28 -04001177<a name='Device_Text'></a>
1178
Cary Clark12799e12017-07-28 15:18:29 -04001179---
1180
Cary Clark682c58d2018-05-16 07:07:07 -04001181<a href='#LCD_Text'>LCD Text</a> and <a href='#Subpixel_Text'>Subpixel Text</a> increase the precision of glyph position.
Cary Clark12799e12017-07-28 15:18:29 -04001182
Cary Clarkffb3d682018-05-17 12:17:28 -04001183When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> takes advantage of the organization of RGB stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001184create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001185on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001186<a href='#LCD_Text'>LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clarkffb3d682018-05-17 12:17:28 -04001187the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001188
Cary Clark682c58d2018-05-16 07:07:07 -04001189<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001190As the opaqueness
1191of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1192
1193Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001194<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1195<a href='#LCD_Text'>LCD Text</a> or <a href='#Subpixel_Text'>Subpixel Text</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
1196<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 -04001197
1198### Example
1199
Cary Clark682c58d2018-05-16 07:07:07 -04001200<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href='#LCD_Text'>LCD Text</a> and <a href='#Subpixel_Text'>Subpixel Text</a>.
1201When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1202When <a href='#Subpixel_Text'>Subpixel Text</a> is enabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are unique, but appear evenly spaced.
Cary Clark1a8d7622018-03-05 13:26:16 -05001203</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001204
Cary Clarka90ea222018-10-16 10:30:28 -04001205<a name='Linear_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001206
Cary Clark682c58d2018-05-16 07:07:07 -04001207<a href='#Linear_Text'>Linear Text</a> selects whether text is rendered as a <a href='undocumented#Glyph'>Glyph</a> or as a <a href='SkPath_Reference#Path'>Path</a>.
1208If <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is set, it has the same effect as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1209If <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear, it is the same as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001210
Cary Clark682c58d2018-05-16 07:07:07 -04001211<a name='SkPaint_isLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001212
1213---
Cary Clark12799e12017-07-28 15:18:29 -04001214
Cary Clark682c58d2018-05-16 07:07:07 -04001215<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1216bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001217</pre>
1218
Cary Clark80247e52018-07-11 16:18:41 -04001219Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001220
Cary Clark682c58d2018-05-16 07:07:07 -04001221Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001222
1223### Return Value
1224
Cary Clark682c58d2018-05-16 07:07:07 -04001225<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001226
1227### Example
1228
1229<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1230
1231### See Also
1232
Cary Clark682c58d2018-05-16 07:07:07 -04001233<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001234
Cary Clark682c58d2018-05-16 07:07:07 -04001235<a name='SkPaint_setLinearText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001236
1237---
Cary Clark12799e12017-07-28 15:18:29 -04001238
Cary Clark682c58d2018-05-16 07:07:07 -04001239<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1240void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001241</pre>
1242
Cary Clark80247e52018-07-11 16:18:41 -04001243Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark682c58d2018-05-16 07:07:07 -04001244By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001245
Cary Clark682c58d2018-05-16 07:07:07 -04001246Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1247Clears <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 -04001248
1249### Parameters
1250
Cary Clark682c58d2018-05-16 07:07:07 -04001251<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1252 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001253 </tr>
1254</table>
1255
1256### Example
1257
Cary Clark83647062018-07-18 16:21:51 -04001258<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001259
1260### See Also
1261
Cary Clark682c58d2018-05-16 07:07:07 -04001262<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001263
Cary Clarka90ea222018-10-16 10:30:28 -04001264<a name='Subpixel_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001265
Cary Clark682c58d2018-05-16 07:07:07 -04001266<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001267As the opaqueness
1268of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1269
Cary Clark682c58d2018-05-16 07:07:07 -04001270<a name='SkPaint_isSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001271
1272---
Cary Clark12799e12017-07-28 15:18:29 -04001273
Cary Clark682c58d2018-05-16 07:07:07 -04001274<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1275bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001276</pre>
1277
Cary Clark80247e52018-07-11 16:18:41 -04001278Returns true if <a href='undocumented#Glyph'>Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001279
Cary Clark682c58d2018-05-16 07:07:07 -04001280Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001281
1282### Return Value
1283
Cary Clark682c58d2018-05-16 07:07:07 -04001284<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001285
1286### Example
1287
1288<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1289
1290#### Example Output
1291
1292~~~~
1293paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1294paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1295~~~~
1296
1297</fiddle-embed></div>
1298
Cary Clark682c58d2018-05-16 07:07:07 -04001299<a name='SkPaint_setSubpixelText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001300
1301---
Cary Clark12799e12017-07-28 15:18:29 -04001302
Cary Clark682c58d2018-05-16 07:07:07 -04001303<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1304void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001305</pre>
1306
Cary Clark682c58d2018-05-16 07:07:07 -04001307Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001308
Cary Clark682c58d2018-05-16 07:07:07 -04001309Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1310Clears <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 -04001311
1312### Parameters
1313
Cary Clark682c58d2018-05-16 07:07:07 -04001314<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1315 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001316 </tr>
1317</table>
1318
1319### Example
1320
1321<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1322
1323#### Example Output
1324
1325~~~~
1326paint1 == paint2
1327~~~~
1328
1329</fiddle-embed></div>
1330
Cary Clarka90ea222018-10-16 10:30:28 -04001331<a name='LCD_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001332
Cary Clarkffb3d682018-05-17 12:17:28 -04001333When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> takes advantage of the organization of RGB stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001334create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001335on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001336<a href='#LCD_Text'>LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clarkffb3d682018-05-17 12:17:28 -04001337the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001338
Cary Clark682c58d2018-05-16 07:07:07 -04001339<a name='SkPaint_isLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001340
1341---
Cary Clark12799e12017-07-28 15:18:29 -04001342
Cary Clark682c58d2018-05-16 07:07:07 -04001343<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1344bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001345</pre>
1346
Cary Clark80247e52018-07-11 16:18:41 -04001347Returns true if <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001348
Cary Clark682c58d2018-05-16 07:07:07 -04001349Returns true if <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is set.
Cary Clark12799e12017-07-28 15:18:29 -04001350
1351### Return Value
1352
Cary Clark682c58d2018-05-16 07:07:07 -04001353<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001354
1355### Example
1356
skia-bookmakera391c722018-07-09 05:28:19 +00001357<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04001358
1359#### Example Output
1360
1361~~~~
1362paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1363paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1364~~~~
1365
1366</fiddle-embed></div>
1367
Cary Clark682c58d2018-05-16 07:07:07 -04001368<a name='SkPaint_setLCDRenderText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001369
1370---
Cary Clark12799e12017-07-28 15:18:29 -04001371
Cary Clark682c58d2018-05-16 07:07:07 -04001372<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1373void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04001374</pre>
1375
Cary Clark682c58d2018-05-16 07:07:07 -04001376Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001377
Cary Clark682c58d2018-05-16 07:07:07 -04001378Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
1379Clears <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 -04001380
1381### Parameters
1382
Cary Clark682c58d2018-05-16 07:07:07 -04001383<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
1384 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001385 </tr>
1386</table>
1387
1388### Example
1389
skia-bookmakere0a458f2018-07-16 05:29:00 +00001390<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04001391
1392#### Example Output
1393
1394~~~~
1395paint1 == paint2
1396~~~~
1397
1398</fiddle-embed></div>
1399
Cary Clarka90ea222018-10-16 10:30:28 -04001400<a name='Font_Embedded_Bitmaps'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001401
Cary Clarka90ea222018-10-16 10:30:28 -04001402---
Cary Clark08895c42018-02-01 09:37:32 -05001403
Cary Clark682c58d2018-05-16 07:07:07 -04001404<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
1405<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> when set chooses an embedded bitmap glyph over an outline contained
Cary Clark7cfcbca2018-01-04 16:11:51 -05001406in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001407
Cary Clark682c58d2018-05-16 07:07:07 -04001408FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
1409the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001410Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04001411<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001412
Cary Clark682c58d2018-05-16 07:07:07 -04001413<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
1414<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
1415<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001416
1417### Example
1418
Cary Clarka560c472017-11-27 10:44:06 -05001419<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05001420<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05001421 includes an embedded bitmap Glyph at odd font sizes. This example works
1422 on platforms that use FreeType as their Font_Engine.
1423 Windows may, but is not required to, return a bitmap glyph if
1424 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1425 bitmap.allocN32Pixels(30, 15);
1426 bitmap.eraseColor(0);
1427 SkCanvas offscreen(bitmap);
1428 SkPaint paint;
1429 paint.setAntiAlias(true);
1430 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001431 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001432 for (bool embedded : { false, true}) {
1433 paint.setEmbeddedBitmapText(embedded);
1434 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1435 }
1436 canvas->drawBitmap(bitmap, 0, 0);
1437 canvas->scale(10, 10);
1438 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05001439
Cary Clarka560c472017-11-27 10:44:06 -05001440</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001441
Cary Clark682c58d2018-05-16 07:07:07 -04001442<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001443
1444---
Cary Clark12799e12017-07-28 15:18:29 -04001445
Cary Clark682c58d2018-05-16 07:07:07 -04001446<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1447bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001448</pre>
1449
Cary Clark80247e52018-07-11 16:18:41 -04001450Returns true if <a href='undocumented#Engine'>Font Engine</a> may return <a href='undocumented#Glyph'>Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001451
Cary Clark682c58d2018-05-16 07:07:07 -04001452Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001453
1454### Return Value
1455
Cary Clark682c58d2018-05-16 07:07:07 -04001456<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001457
1458### Example
1459
1460<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1461
1462#### Example Output
1463
1464~~~~
1465paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1466paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1467~~~~
1468
1469</fiddle-embed></div>
1470
Cary Clark682c58d2018-05-16 07:07:07 -04001471<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001472
1473---
Cary Clark12799e12017-07-28 15:18:29 -04001474
Cary Clark682c58d2018-05-16 07:07:07 -04001475<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1476void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04001477</pre>
1478
1479Requests, but does not require, to use bitmaps in fonts instead of outlines.
1480
Cary Clark682c58d2018-05-16 07:07:07 -04001481Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
1482Clears <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 -04001483
1484### Parameters
1485
Cary Clark682c58d2018-05-16 07:07:07 -04001486<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
1487 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001488 </tr>
1489</table>
1490
1491### Example
1492
1493<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1494
1495#### Example Output
1496
1497~~~~
1498paint1 == paint2
1499~~~~
1500
1501</fiddle-embed></div>
1502
Cary Clarka90ea222018-10-16 10:30:28 -04001503<a name='Automatic_Hinting'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001504
Cary Clark682c58d2018-05-16 07:07:07 -04001505If <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, <a href='#Automatic_Hinting'>Automatic Hinting</a>
1506instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
1507<a href='#Automatic_Hinting'>Automatic Hinting</a> has no effect if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> or
1508<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001509
Cary Clark682c58d2018-05-16 07:07:07 -04001510<a href='#Automatic_Hinting'>Automatic Hinting</a> only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001511
Cary Clark682c58d2018-05-16 07:07:07 -04001512<a name='SkPaint_isAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001513
1514---
Cary Clark12799e12017-07-28 15:18:29 -04001515
Cary Clark682c58d2018-05-16 07:07:07 -04001516<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1517bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001518</pre>
1519
Cary Clark80247e52018-07-11 16:18:41 -04001520Returns true if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, and if
1521platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>. If true, instructs
1522the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001523
Cary Clark682c58d2018-05-16 07:07:07 -04001524Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001525
1526### Return Value
1527
Cary Clark682c58d2018-05-16 07:07:07 -04001528<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001529
1530### Example
1531
1532<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1533
1534#### Example Output
1535
1536~~~~
1537paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1538paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1539~~~~
1540
1541</fiddle-embed></div>
1542
1543### See Also
1544
Cary Clark682c58d2018-05-16 07:07:07 -04001545<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001546
Cary Clark682c58d2018-05-16 07:07:07 -04001547<a name='SkPaint_setAutohinted'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001548
1549---
Cary Clark12799e12017-07-28 15:18:29 -04001550
Cary Clark682c58d2018-05-16 07:07:07 -04001551<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1552void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04001553</pre>
1554
Cary Clark80247e52018-07-11 16:18:41 -04001555Sets whether to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001556If <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> and <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is set,
Cary Clark80247e52018-07-11 16:18:41 -04001557instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04001558<a href='#Automatic_Hinting'>Automatic Hinting</a> has no effect if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> or
1559<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001560
Cary Clark682c58d2018-05-16 07:07:07 -04001561Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001562
Cary Clark682c58d2018-05-16 07:07:07 -04001563Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
1564Clears <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 -04001565
1566### Parameters
1567
Cary Clark682c58d2018-05-16 07:07:07 -04001568<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
1569 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001570 </tr>
1571</table>
1572
1573### Example
1574
1575<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1576
1577### See Also
1578
Cary Clark682c58d2018-05-16 07:07:07 -04001579<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001580
Cary Clarka90ea222018-10-16 10:30:28 -04001581<a name='Vertical_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001582
Cary Clarka90ea222018-10-16 10:30:28 -04001583---
Cary Clark08895c42018-02-01 09:37:32 -05001584
Cary Clark682c58d2018-05-16 07:07:07 -04001585<a href='undocumented#Text'>Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
1586using <a href='undocumented#Advance'>Font Advance</a> to position subsequent <a href='undocumented#Glyph'>Glyphs</a>. By default, each successive glyph
1587is positioned to the right of the preceding glyph. <a href='#Vertical_Text'>Vertical Text</a> sets successive
1588<a href='undocumented#Glyph'>Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001589
Cary Clark682c58d2018-05-16 07:07:07 -04001590Skia can translate text character codes as a series of <a href='undocumented#Glyph'>Glyphs</a>, but does not implement
Cary Clark7cfcbca2018-01-04 16:11:51 -05001591font substitution,
Cary Clark137b8742018-05-30 09:21:49 -04001592textual substitution, line layout, or contextual spacing like <a href='undocumented#Kerning'>Kerning</a> pairs. Use
Cary Clark682c58d2018-05-16 07:07:07 -04001593a text shaping engine like <a href='https://harfbuzz.org/'>HarfBuzz</a></a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001594into glyph series.
1595
Cary Clark682c58d2018-05-16 07:07:07 -04001596<a href='#Vertical_Text'>Vertical Text</a> is clear if text is drawn left to right or set if drawn from top to bottom.
Cary Clark12799e12017-07-28 15:18:29 -04001597
Cary Clark682c58d2018-05-16 07:07:07 -04001598<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if clear draws text left to right.
1599<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if set draws text top to bottom.
Cary Clark12799e12017-07-28 15:18:29 -04001600
Cary Clark682c58d2018-05-16 07:07:07 -04001601<a href='#Vertical_Text'>Vertical Text</a> is clear by default.
1602<a href='#Vertical_Text'>Vertical Text</a> can be set by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
1603<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001604
1605### Example
1606
1607<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1608
Cary Clark682c58d2018-05-16 07:07:07 -04001609<a name='SkPaint_isVerticalText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001610
1611---
Cary Clark12799e12017-07-28 15:18:29 -04001612
Cary Clark682c58d2018-05-16 07:07:07 -04001613<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1614bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001615</pre>
1616
Cary Clark80247e52018-07-11 16:18:41 -04001617Returns true if <a href='undocumented#Glyph'>Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001618
Cary Clark682c58d2018-05-16 07:07:07 -04001619Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001620
1621### Return Value
1622
Cary Clark682c58d2018-05-16 07:07:07 -04001623<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001624
1625### Example
1626
1627<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1628
1629#### Example Output
1630
1631~~~~
1632paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1633paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1634~~~~
1635
1636</fiddle-embed></div>
1637
Cary Clark682c58d2018-05-16 07:07:07 -04001638<a name='SkPaint_setVerticalText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001639
1640---
Cary Clark12799e12017-07-28 15:18:29 -04001641
Cary Clark682c58d2018-05-16 07:07:07 -04001642<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1643void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText)
Cary Clark12799e12017-07-28 15:18:29 -04001644</pre>
1645
Cary Clark80247e52018-07-11 16:18:41 -04001646Returns true if text advance positions the next glyph below the previous glyph instead of to the
Cary Clark12799e12017-07-28 15:18:29 -04001647right of previous glyph.
1648
Cary Clark682c58d2018-05-16 07:07:07 -04001649Sets <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is true.
1650Clears <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001651
1652### Parameters
1653
Cary Clark682c58d2018-05-16 07:07:07 -04001654<table> <tr> <td><a name='SkPaint_setVerticalText_verticalText'><code><strong>verticalText</strong></code></a></td>
1655 <td>setting for <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001656 </tr>
1657</table>
1658
1659### Example
1660
1661<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1662
1663#### Example Output
1664
1665~~~~
1666paint1 == paint2
1667~~~~
1668
1669</fiddle-embed></div>
1670
Cary Clarka90ea222018-10-16 10:30:28 -04001671<a name='Fake_Bold'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001672
Cary Clarka90ea222018-10-16 10:30:28 -04001673---
Cary Clark08895c42018-02-01 09:37:32 -05001674
Cary Clark682c58d2018-05-16 07:07:07 -04001675<a href='#Fake_Bold'>Fake Bold</a> approximates the bold font style accompanying a normal font when a bold font face
Cary Clark7cfcbca2018-01-04 16:11:51 -05001676is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04001677bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001678
Cary Clark682c58d2018-05-16 07:07:07 -04001679Use <a href='#Text_Skew_X'>Text Skew X</a> to approximate an italic font style when the italic font face
Cary Clark12799e12017-07-28 15:18:29 -04001680is not available.
1681
Cary Clark7cfcbca2018-01-04 16:11:51 -05001682A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04001683the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
1684by increasing the stroke width 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 -04001685
Cary Clark682c58d2018-05-16 07:07:07 -04001686<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001687
1688### Example
1689
1690<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1691
Cary Clark682c58d2018-05-16 07:07:07 -04001692<a name='SkPaint_isFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001693
1694---
Cary Clark12799e12017-07-28 15:18:29 -04001695
Cary Clark682c58d2018-05-16 07:07:07 -04001696<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1697bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001698</pre>
1699
Cary Clark80247e52018-07-11 16:18:41 -04001700Returns true if approximate bold by increasing the stroke width when creating glyph bitmaps
Cary Clark12799e12017-07-28 15:18:29 -04001701from outlines.
1702
Cary Clark682c58d2018-05-16 07:07:07 -04001703Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001704
1705### Return Value
1706
Cary Clark682c58d2018-05-16 07:07:07 -04001707<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001708
1709### Example
1710
1711<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1712
1713#### Example Output
1714
1715~~~~
1716paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1717paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1718~~~~
1719
1720</fiddle-embed></div>
1721
Cary Clark682c58d2018-05-16 07:07:07 -04001722<a name='SkPaint_setFakeBoldText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001723
1724---
Cary Clark12799e12017-07-28 15:18:29 -04001725
Cary Clark682c58d2018-05-16 07:07:07 -04001726<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1727void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04001728</pre>
1729
Cary Clark80247e52018-07-11 16:18:41 -04001730Increases stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001731
Cary Clark682c58d2018-05-16 07:07:07 -04001732Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
1733Clears <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 -04001734
1735### Parameters
1736
Cary Clark682c58d2018-05-16 07:07:07 -04001737<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
1738 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001739 </tr>
1740</table>
1741
1742### Example
1743
1744<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1745
1746#### Example Output
1747
1748~~~~
1749paint1 == paint2
1750~~~~
1751
1752</fiddle-embed></div>
1753
Cary Clarka90ea222018-10-16 10:30:28 -04001754<a name='Full_Hinting_Spacing'></a>
Cary Clark08895c42018-02-01 09:37:32 -05001755
Cary Clark682c58d2018-05-16 07:07:07 -04001756if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> adjusts the character
Cary Clark137b8742018-05-30 09:21:49 -04001757spacing by the difference of the hinted and <a href='undocumented#Unhinted'>Unhinted</a> <a href='undocumented#Left_Side_Bearing'>Left Side Bearing</a> and
Cary Clark682c58d2018-05-16 07:07:07 -04001758<a href='undocumented#Right_Side_Bearing'>Right Side Bearing</a>. <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> only applies to platforms that use
1759FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001760
Cary Clark137b8742018-05-30 09:21:49 -04001761<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
1762a specific pair of characters is adjusted using data in the font <a href='undocumented#Kerning'>Kerning</a> tables.
Cary Clark12799e12017-07-28 15:18:29 -04001763
Cary Clark682c58d2018-05-16 07:07:07 -04001764<a name='SkPaint_isDevKernText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001765
1766---
Cary Clark12799e12017-07-28 15:18:29 -04001767
Cary Clark682c58d2018-05-16 07:07:07 -04001768<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1769bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001770</pre>
1771
Cary Clark682c58d2018-05-16 07:07:07 -04001772Deprecated.
1773
Cary Clark682c58d2018-05-16 07:07:07 -04001774<a name='SkPaint_setDevKernText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001775
1776---
Cary Clark12799e12017-07-28 15:18:29 -04001777
Cary Clark682c58d2018-05-16 07:07:07 -04001778<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1779void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04001780</pre>
1781
Cary Clark682c58d2018-05-16 07:07:07 -04001782Deprecated.
1783
Cary Clarka90ea222018-10-16 10:30:28 -04001784<a name='Filter_Quality_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001785
Cary Clarka90ea222018-10-16 10:30:28 -04001786---
Cary Clark08895c42018-02-01 09:37:32 -05001787
Cary Clark682c58d2018-05-16 07:07:07 -04001788<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
1789A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
1790A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
1791If the image is drawn without scaling, the <a href='undocumented#Filter_Quality'>Filter Quality</a> choice will not result
Cary Clarkce101242017-09-01 15:51:02 -04001792in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001793
Cary Clark682c58d2018-05-16 07:07:07 -04001794<a href='undocumented#Filter_Quality'>Filter Quality</a> is used in <a href='#Paint'>Paint</a> passed as a parameter to
Cary Clark12799e12017-07-28 15:18:29 -04001795
1796<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001797 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
1798 </tr> <tr>
1799 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
1800 </tr> <tr>
1801 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
1802 </tr> <tr>
1803 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
1804 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001805</table>
1806
Cary Clark682c58d2018-05-16 07:07:07 -04001807and when <a href='#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 -04001808
Cary Clark682c58d2018-05-16 07:07:07 -04001809<a href='undocumented#Filter_Quality'>Filter Quality</a> is <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04001810
1811### Example
1812
skia-bookmaker525f9a92018-05-03 06:27:39 +00001813<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001814
Cary Clark682c58d2018-05-16 07:07:07 -04001815<a name='SkPaint_getFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001816
1817---
Cary Clark12799e12017-07-28 15:18:29 -04001818
Cary Clark682c58d2018-05-16 07:07:07 -04001819<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1820<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001821</pre>
1822
Cary Clark682c58d2018-05-16 07:07:07 -04001823Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001824draws faster; a higher setting looks better when the image is scaled.
1825
1826### Return Value
1827
Cary Clark682c58d2018-05-16 07:07:07 -04001828one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
1829<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001830
1831### Example
1832
1833<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1834
1835#### Example Output
1836
1837~~~~
1838kNone_SkFilterQuality == paint.getFilterQuality()
1839~~~~
1840
1841</fiddle-embed></div>
1842
Cary Clark682c58d2018-05-16 07:07:07 -04001843<a name='SkPaint_setFilterQuality'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001844
1845---
Cary Clark12799e12017-07-28 15:18:29 -04001846
Cary Clark682c58d2018-05-16 07:07:07 -04001847<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1848void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04001849</pre>
1850
Cary Clark682c58d2018-05-16 07:07:07 -04001851Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001852draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04001853Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001854
1855### Parameters
1856
Cary Clark682c58d2018-05-16 07:07:07 -04001857<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
1858 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
1859<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001860 </tr>
1861</table>
1862
1863### Example
1864
1865<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1866
1867#### Example Output
1868
1869~~~~
1870kHigh_SkFilterQuality == paint.getFilterQuality()
1871~~~~
1872
1873</fiddle-embed></div>
1874
1875### See Also
1876
Cary Clark682c58d2018-05-16 07:07:07 -04001877<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001878
Cary Clarka90ea222018-10-16 10:30:28 -04001879<a name='Color_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001880
Cary Clarka90ea222018-10-16 10:30:28 -04001881---
Cary Clark12799e12017-07-28 15:18:29 -04001882
Cary Clarkab2621d2018-01-30 10:08:57 -05001883| name | description |
1884| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04001885| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
1886| <a href='#SkPaint_setColor'>setColor</a> | sets <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
Cary Clark12799e12017-07-28 15:18:29 -04001887
Cary Clarkffb3d682018-05-17 12:17:28 -04001888<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='SkColor_Reference#Alpha'>Color Alpha</a>
Cary Clarkab2621d2018-01-30 10:08:57 -05001889values used to draw a filled or stroked shape in a 32-bit value. Each component
1890occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1891All values in any combination are valid.
1892
Cary Clark682c58d2018-05-16 07:07:07 -04001893<a href='SkColor_Reference#Color'>Color</a> is not <a href='undocumented#Premultiply'>Premultiplied</a>; <a href='SkColor_Reference#Alpha'>Color Alpha</a> sets the transparency independent of
Cary Clarkffb3d682018-05-17 12:17:28 -04001894RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05001895
Cary Clarkffb3d682018-05-17 12:17:28 -04001896The bit positions of <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB are independent of the bit
Cary Clarkab2621d2018-01-30 10:08:57 -05001897positions on the output device, which may have more or fewer bits, and may have
1898a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001899
Cary Clarkffb3d682018-05-17 12:17:28 -04001900| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04001901| --- | --- | --- | --- | --- |
1902| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1903
1904### Example
1905
Ravi Mistry874e22b2018-07-19 03:49:13 +00001906<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001907
Cary Clark682c58d2018-05-16 07:07:07 -04001908<a name='SkPaint_getColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001909
1910---
Cary Clark12799e12017-07-28 15:18:29 -04001911
Cary Clark682c58d2018-05-16 07:07:07 -04001912<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1913<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001914</pre>
1915
Cary Clarkffb3d682018-05-17 12:17:28 -04001916Retrieves <a href='SkColor_Reference#Alpha'>Alpha</a> and RGB, <a href='undocumented#Unpremultiply'>Unpremultiplied</a>, packed into 32 bits.
Cary Clark682c58d2018-05-16 07:07:07 -04001917Use 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
Cary Clark12799e12017-07-28 15:18:29 -04001918a color component.
1919
1920### Return Value
1921
Cary Clarkffb3d682018-05-17 12:17:28 -04001922<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04001923
1924### Example
1925
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00001926<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04001927
1928#### Example Output
1929
1930~~~~
1931Yellow is 100% red, 100% green, and 0% blue.
1932~~~~
1933
1934</fiddle-embed></div>
1935
1936### See Also
1937
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001938<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
1939
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001940<a name='SkPaint_getColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001941
1942---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04001943
1944<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1945<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
1946</pre>
1947
1948Retrieves alpha and RGB, unpmreultiplied, as four floating point values. RGB are
1949are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
1950
1951### Return Value
1952
1953<a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA
1954
1955### Example
1956
1957<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
1958
1959#### Example Output
1960
1961~~~~
1962Yellow is 100% red, 100% green, and 0% blue.
1963~~~~
1964
1965</fiddle-embed></div>
1966
1967### See Also
1968
1969<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001970
Cary Clark682c58d2018-05-16 07:07:07 -04001971<a name='SkPaint_setColor'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04001972
1973---
Cary Clark12799e12017-07-28 15:18:29 -04001974
Cary Clark682c58d2018-05-16 07:07:07 -04001975<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1976void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04001977</pre>
1978
Cary Clarkffb3d682018-05-17 12:17:28 -04001979Sets <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,
1980<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 -04001981
1982### Parameters
1983
Cary Clark682c58d2018-05-16 07:07:07 -04001984<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04001985 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04001986 </tr>
1987</table>
1988
1989### Example
1990
skia-bookmaker233c6522018-07-04 05:33:26 +00001991<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04001992
1993#### Example Output
1994
1995~~~~
1996green1 == green2
1997~~~~
1998
1999</fiddle-embed></div>
2000
2001### See Also
2002
Cary Clarkbbe8ff92018-09-05 11:39:01 -04002003<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>
2004
Cary Clarkbbe8ff92018-09-05 11:39:01 -04002005<a name='SkPaint_setColor4f'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002006
2007---
Cary Clarkbbe8ff92018-09-05 11:39:01 -04002008
2009<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2010void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
2011</pre>
2012
2013Sets alpha and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
2014point values, unpremultiplied. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
2015the <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
2016sRGB <a href='#SkPaint_setColor4f_color'>color</a> space.
2017
2018### Parameters
2019
2020<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
2021 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA</td>
2022 </tr>
2023 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
2024 <td><a href='undocumented#Color_Space'>Color Space</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
2025 </tr>
2026</table>
2027
2028### Example
2029
2030<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
2031
2032#### Example Output
2033
2034~~~~
2035green1 == green2
2036~~~~
2037
2038</fiddle-embed></div>
2039
2040### See Also
2041
2042<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 -04002043
Cary Clarka90ea222018-10-16 10:30:28 -04002044<a name='Alpha_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002045
Cary Clarkffb3d682018-05-17 12:17:28 -04002046<a href='SkColor_Reference#Alpha'>Color Alpha</a> sets the transparency independent of RGB: red, blue, and green.
Cary Clark12799e12017-07-28 15:18:29 -04002047
Cary Clark682c58d2018-05-16 07:07:07 -04002048<a name='SkPaint_getAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002049
2050---
Cary Clark12799e12017-07-28 15:18:29 -04002051
Cary Clark682c58d2018-05-16 07:07:07 -04002052<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2053uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002054</pre>
2055
Cary Clark682c58d2018-05-16 07:07:07 -04002056Retrieves <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 -04002057
2058### Return Value
2059
Cary Clark682c58d2018-05-16 07:07:07 -04002060<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04002061
2062### Example
2063
Cary Clark83647062018-07-18 16:21:51 -04002064<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04002065
2066#### Example Output
2067
2068~~~~
2069255 == paint.getAlpha()
2070~~~~
2071
2072</fiddle-embed></div>
2073
Cary Clark682c58d2018-05-16 07:07:07 -04002074<a name='SkPaint_setAlpha'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002075
2076---
Cary Clark12799e12017-07-28 15:18:29 -04002077
Cary Clark682c58d2018-05-16 07:07:07 -04002078<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2079void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04002080</pre>
2081
Cary Clarkffb3d682018-05-17 12:17:28 -04002082Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04002083unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04002084build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
2085<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 -04002086fully opaque.
2087
2088### Parameters
2089
Cary Clark682c58d2018-05-16 07:07:07 -04002090<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
2091 <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 -04002092 </tr>
2093</table>
2094
2095### Example
2096
Ravi Mistry874e22b2018-07-19 03:49:13 +00002097<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04002098
2099#### Example Output
2100
2101~~~~
21020x44112233 == paint.getColor()
2103~~~~
2104
2105</fiddle-embed></div>
2106
Cary Clark682c58d2018-05-16 07:07:07 -04002107<a name='SkPaint_setARGB'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002108
2109---
Cary Clark12799e12017-07-28 15:18:29 -04002110
Cary Clark682c58d2018-05-16 07:07:07 -04002111<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2112void <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 -04002113</pre>
2114
Cary Clark682c58d2018-05-16 07:07:07 -04002115Sets <a href='SkColor_Reference#Color'>Color</a> used when drawing solid fills. The color components range from 0 to 255.
Cary Clarkffb3d682018-05-17 12:17:28 -04002116The color 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 -04002117
2118### Parameters
2119
Cary Clark682c58d2018-05-16 07:07:07 -04002120<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2121 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2122 </tr>
2123 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002124 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002125 </tr>
2126 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002127 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002128 </tr>
2129 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002130 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002131 </tr>
2132</table>
2133
2134### Example
2135
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002136<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04002137
2138#### Example Output
2139
2140~~~~
2141transRed1 == transRed2
2142~~~~
2143
2144</fiddle-embed></div>
2145
2146### See Also
2147
Cary Clark682c58d2018-05-16 07:07:07 -04002148<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002149
Cary Clarka90ea222018-10-16 10:30:28 -04002150<a name='Style'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002151
Cary Clarka90ea222018-10-16 10:30:28 -04002152---
Cary Clark08895c42018-02-01 09:37:32 -05002153
Cary Clark682c58d2018-05-16 07:07:07 -04002154<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2155Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002156
Cary Clarka90ea222018-10-16 10:30:28 -04002157<a name='Style_Fill'></a>
2158
Cary Clark682c58d2018-05-16 07:07:07 -04002159Set <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kFill_Style'>kFill Style</a> to fill the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002160The fill covers the area inside the geometry for most shapes.
2161
Cary Clarka90ea222018-10-16 10:30:28 -04002162<a name='Style_Stroke'></a>
2163
Cary Clark682c58d2018-05-16 07:07:07 -04002164Set <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 -04002165
Cary Clarkbc5697d2017-10-04 14:31:33 -04002166The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002167<a href='#Stroke_Width'>Stroke Width</a>. The area covered where the shape starts and stops is described by <a href='#Stroke_Cap'>Stroke Cap</a>.
2168The area covered where the shape turns a corner is described by <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clarka90ea222018-10-16 10:30:28 -04002169The stroke is centered on the shape; it extends equally on either side of the shape edge.As <a href='#Stroke_Width'>Stroke Width</a> gets smaller, the drawn path frame is thinner. <a href='#Stroke_Width'>Stroke Width</a> less than one
Cary Clark682c58d2018-05-16 07:07:07 -04002170may have gaps, and if <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is set, <a href='SkColor_Reference#Alpha'>Color Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04002171
Cary Clarka90ea222018-10-16 10:30:28 -04002172### See Also
Cary Clark12799e12017-07-28 15:18:29 -04002173
Cary Clarka90ea222018-10-16 10:30:28 -04002174<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> <a href='undocumented#Path_Effect'>Path Effect</a> <a href='#Style_Fill'>Style Fill</a> <a href='#Style_Stroke'>Style Stroke</a>
2175
2176<a name='Hairline'></a>
2177
2178---
2179
2180<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Hairline'>Hairline</a>.
2181<a href='#Hairline'>Hairline</a> draws the thinnest continuous frame. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, adjacent pixels
Cary Clark7cfcbca2018-01-04 16:11:51 -05002182flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002183
Cary Clarka90ea222018-10-16 10:30:28 -04002184<a href='SkPath_Reference#Path'>Path</a> drawing with <a href='#Hairline'>Hairline</a> may hit the same pixel more than once. For instance, <a href='SkPath_Reference#Path'>Path</a> containing
Cary Clark61313f32018-10-08 14:57:48 -04002185two lines in one <a href='SkPath_Overview#Contour'>Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
Cary Clark682c58d2018-05-16 07:07:07 -04002186pixel. If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clark7cfcbca2018-01-04 16:11:51 -05002187GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002188while stroking.
2189
Cary Clarka90ea222018-10-16 10:30:28 -04002190### See Also
2191
2192<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> <a href='undocumented#Path_Effect'>Path Effect</a> <a href='#Style_Fill'>Style Fill</a> <a href='#Style_Stroke'>Style Stroke</a>
2193
2194<a name='SkPaint_Style'></a>
2195
2196---
Cary Clark12799e12017-07-28 15:18:29 -04002197
Cary Clarka560c472017-11-27 10:44:06 -05002198<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002199 enum <a href='#SkPaint_Style'>Style</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002200 <a href='#SkPaint_kFill_Style'>kFill_Style</a>,
2201 <a href='#SkPaint_kStroke_Style'>kStroke_Style</a>,
2202 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill_Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002203 };
Cary Clarka90ea222018-10-16 10:30:28 -04002204</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04002205
Cary Clarka90ea222018-10-16 10:30:28 -04002206<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002207 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 -05002208</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002209
Cary Clark682c58d2018-05-16 07:07:07 -04002210Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002211The stroke and fill
2212share all paint attributes; for instance, they are drawn with the same color.
2213
Cary Clark682c58d2018-05-16 07:07:07 -04002214Use <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a> to avoid hitting the same pixels twice with a stroke draw and
Cary Clark12799e12017-07-28 15:18:29 -04002215a fill draw.
2216
2217### Constants
2218
Cary Clark682c58d2018-05-16 07:07:07 -04002219<table style='border-collapse: collapse; width: 62.5em'>
2220 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2221<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2222<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2223 <tr style='background-color: #f0f0f0; '>
2224 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2225 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2226 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002227Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#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>.
2228<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
Cary Clark682c58d2018-05-16 07:07:07 -04002229<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2230The <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> specifies additional rules to fill the area outside the path edge,
Cary Clark12799e12017-07-28 15:18:29 -04002231and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002232<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 -05002233</td>
Cary Clark12799e12017-07-28 15:18:29 -04002234 </tr>
2235 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002236 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2237 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2238 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002239Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#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>.
Cary Clark682c58d2018-05-16 07:07:07 -04002240<a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Line'>Lines</a>, and points, are always drawn as if <a href='#SkPaint_kStroke_Style'>kStroke Style</a> is set,
2241and ignore the set <a href='#SkPaint_Style'>Style</a>.
2242The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2243</td>
2244 </tr>
2245 <tr style='background-color: #f0f0f0; '>
2246 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2247 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2248 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002249Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#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>.
Cary Clark682c58d2018-05-16 07:07:07 -04002250<a href='SkPath_Reference#Path'>Path</a> is treated as if it is set to <a href='SkPath_Reference#SkPath_kWinding_FillType'>SkPath::kWinding FillType</a>,
2251and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002252</td>
Cary Clark12799e12017-07-28 15:18:29 -04002253 </tr>
2254 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002255 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2256 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2257 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2258May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002259</td>
Cary Clark12799e12017-07-28 15:18:29 -04002260 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002261</table>
Cary Clark12799e12017-07-28 15:18:29 -04002262
Cary Clark682c58d2018-05-16 07:07:07 -04002263<a name='SkPaint_getStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002264
2265---
Cary Clark12799e12017-07-28 15:18:29 -04002266
Cary Clark682c58d2018-05-16 07:07:07 -04002267<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2268<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002269</pre>
2270
Cary Clark80247e52018-07-11 16:18:41 -04002271Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002272
2273### Return Value
2274
Cary Clark682c58d2018-05-16 07:07:07 -04002275one 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 -04002276
2277### Example
2278
2279<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2280
2281#### Example Output
2282
2283~~~~
2284SkPaint::kFill_Style == paint.getStyle()
2285~~~~
2286
2287</fiddle-embed></div>
2288
2289### See Also
2290
Cary Clark682c58d2018-05-16 07:07:07 -04002291<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002292
Cary Clark682c58d2018-05-16 07:07:07 -04002293<a name='SkPaint_setStyle'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002294
2295---
Cary Clark12799e12017-07-28 15:18:29 -04002296
Cary Clark682c58d2018-05-16 07:07:07 -04002297<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2298void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002299</pre>
2300
2301Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002302Has no effect if <a href='#SkPaint_setStyle_style'>style</a> is not a legal <a href='#SkPaint_Style'>Style</a> value.
Cary Clark12799e12017-07-28 15:18:29 -04002303
2304### Parameters
2305
Cary Clark682c58d2018-05-16 07:07:07 -04002306<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2307 <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 -04002308 </tr>
2309</table>
2310
2311### Example
2312
2313<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2314
2315### See Also
2316
Cary Clark682c58d2018-05-16 07:07:07 -04002317<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002318
Cary Clarka90ea222018-10-16 10:30:28 -04002319<a name='Stroke_Width'></a>
2320
Cary Clark12799e12017-07-28 15:18:29 -04002321---
2322
Cary Clark682c58d2018-05-16 07:07:07 -04002323<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002324of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002325set 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 -04002326
2327When width is greater than zero, the stroke encompasses as many pixels partially
2328or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002329the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002330
Cary Clarka90ea222018-10-16 10:30:28 -04002331The stroke dimensions are scaled by the canvas matrix, but <a href='#Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002332remains one pixel wide regardless of scaling.
2333
2334The default width for the paint is zero.
2335
2336### Example
2337
skia-bookmaker525f9a92018-05-03 06:27:39 +00002338<div><fiddle-embed name="5112c7209a19e035c61cef33a624a652" gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clark1a8d7622018-03-05 13:26:16 -05002339line and the platform implementation.
2340</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002341
Cary Clark682c58d2018-05-16 07:07:07 -04002342<a name='SkPaint_getStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002343
2344---
Cary Clark12799e12017-07-28 15:18:29 -04002345
Cary Clark682c58d2018-05-16 07:07:07 -04002346<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2347<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002348</pre>
2349
Cary Clark682c58d2018-05-16 07:07:07 -04002350Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002351outline the shape.
2352
2353### Return Value
2354
Cary Clarka90ea222018-10-16 10:30:28 -04002355zero for <a href='#Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002356
2357### Example
2358
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002359<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002360
2361#### Example Output
2362
2363~~~~
23640 == paint.getStrokeWidth()
2365~~~~
2366
2367</fiddle-embed></div>
2368
Cary Clark682c58d2018-05-16 07:07:07 -04002369<a name='SkPaint_setStrokeWidth'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002370
2371---
Cary Clark12799e12017-07-28 15:18:29 -04002372
Cary Clark682c58d2018-05-16 07:07:07 -04002373<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2374void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002375</pre>
2376
2377Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002378outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002379Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002380
2381### Parameters
2382
Cary Clark682c58d2018-05-16 07:07:07 -04002383<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
Cary Clarka90ea222018-10-16 10:30:28 -04002384 <td>zero thickness for <a href='#Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002385 </tr>
2386</table>
2387
2388### Example
2389
2390<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2391
2392#### Example Output
2393
2394~~~~
23955 == paint.getStrokeWidth()
2396~~~~
2397
2398</fiddle-embed></div>
2399
Cary Clarka90ea222018-10-16 10:30:28 -04002400<a name='Miter_Limit'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002401
Cary Clarka90ea222018-10-16 10:30:28 -04002402---
Cary Clark08895c42018-02-01 09:37:32 -05002403
Cary Clark682c58d2018-05-16 07:07:07 -04002404<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002405relative to the stroke width.
2406
Cary Clark682c58d2018-05-16 07:07:07 -04002407<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2408is 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>
2409or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002410
Cary Clark682c58d2018-05-16 07:07:07 -04002411If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
2412is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002413
Cary Clark2be81cf2018-09-13 12:04:30 -04002414<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle using:
2415<code>miter limit&nbsp;=&nbsp;1&nbsp;/&nbsp;sin&nbsp;\(&nbsp;angle&nbsp;/&nbsp;2&nbsp;\)</code>.
Cary Clark12799e12017-07-28 15:18:29 -04002416
Cary Clark2be81cf2018-09-13 12:04:30 -04002417<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
Cary Clark682c58d2018-05-16 07:07:07 -04002418The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002419in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002420
2421Here are some miter limits and the angles that triggers them.
2422
2423| miter limit | angle in degrees |
2424| --- | --- |
2425| 10 | 11.48 |
2426| 9 | 12.76 |
2427| 8 | 14.36 |
2428| 7 | 16.43 |
2429| 6 | 19.19 |
2430| 5 | 23.07 |
2431| 4 | 28.96 |
2432| 3 | 38.94 |
2433| 2 | 60 |
2434| 1 | 180 |
2435
2436### Example
2437
Cary Clarka619d452018-07-16 08:12:01 -04002438<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark12799e12017-07-28 15:18:29 -04002439When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05002440by a bevel join.
2441</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002442
Cary Clark682c58d2018-05-16 07:07:07 -04002443<a name='SkPaint_getStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002444
2445---
Cary Clark12799e12017-07-28 15:18:29 -04002446
Cary Clark682c58d2018-05-16 07:07:07 -04002447<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2448<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002449</pre>
2450
Cary Clark80247e52018-07-11 16:18:41 -04002451Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002452
2453### Return Value
2454
Cary Clark682c58d2018-05-16 07:07:07 -04002455zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002456
2457### Example
2458
2459<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2460
2461#### Example Output
2462
2463~~~~
2464default miter limit == 4
2465~~~~
2466
2467</fiddle-embed></div>
2468
2469### See Also
2470
Cary Clark682c58d2018-05-16 07:07:07 -04002471<a href='#Miter_Limit'>Miter Limit</a> <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002472
Cary Clark682c58d2018-05-16 07:07:07 -04002473<a name='SkPaint_setStrokeMiter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002474
2475---
Cary Clark12799e12017-07-28 15:18:29 -04002476
Cary Clark682c58d2018-05-16 07:07:07 -04002477<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2478void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04002479</pre>
2480
Cary Clark80247e52018-07-11 16:18:41 -04002481Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04002482Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04002483Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002484
2485### Parameters
2486
Cary Clark682c58d2018-05-16 07:07:07 -04002487<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
2488 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002489 </tr>
2490</table>
2491
2492### Example
2493
skia-bookmakera717ca92018-07-08 05:32:09 +00002494<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04002495
2496#### Example Output
2497
2498~~~~
2499default miter limit == 8
2500~~~~
2501
2502</fiddle-embed></div>
2503
2504### See Also
2505
Cary Clark682c58d2018-05-16 07:07:07 -04002506<a href='#Miter_Limit'>Miter Limit</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a> <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002507
Cary Clarka90ea222018-10-16 10:30:28 -04002508<a name='Stroke_Cap'></a>
2509
2510<a name='SkPaint_Cap'></a>
2511
Cary Clark12799e12017-07-28 15:18:29 -04002512---
2513
Cary Clarka560c472017-11-27 10:44:06 -05002514<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002515 enum <a href='#SkPaint_Cap'>Cap</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002516 <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
2517 <a href='#SkPaint_kRound_Cap'>kRound_Cap</a>,
2518 <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002519 <a href='#SkPaint_kLast_Cap'>kLast_Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare_Cap</a>,
2520 <a href='#SkPaint_kDefault_Cap'>kDefault_Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt_Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002521 };
Cary Clarka90ea222018-10-16 10:30:28 -04002522</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002523
Cary Clarka90ea222018-10-16 10:30:28 -04002524<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002525 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 -05002526</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002527
Cary Clark61313f32018-10-08 14:57:48 -04002528<a href='#Stroke_Cap'>Stroke Cap</a> draws at the beginning and end of an open <a href='SkPath_Overview#Contour'>Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002529
2530### Constants
2531
Cary Clark682c58d2018-05-16 07:07:07 -04002532<table style='border-collapse: collapse; width: 62.5em'>
2533 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2534<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2535<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2536 <tr style='background-color: #f0f0f0; '>
2537 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
2538 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2539 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2540Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05002541</td>
Cary Clark12799e12017-07-28 15:18:29 -04002542 </tr>
2543 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002544 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
2545 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2546 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2547Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05002548and end.
2549</td>
Cary Clark12799e12017-07-28 15:18:29 -04002550 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002551 <tr style='background-color: #f0f0f0; '>
2552 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
2553 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2554 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2555Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002556and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05002557of the stroke.
2558</td>
Cary Clark12799e12017-07-28 15:18:29 -04002559 </tr>
2560 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002561 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
2562 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2563 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2564Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
2565</td>
2566 </tr>
2567 <tr style='background-color: #f0f0f0; '>
2568 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
2569 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2570 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2571<a href='#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 -05002572</td>
Cary Clark12799e12017-07-28 15:18:29 -04002573 </tr>
2574 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002575 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
2576 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2577 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2578May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002579</td>
Cary Clark12799e12017-07-28 15:18:29 -04002580 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002581</table>
Cary Clark12799e12017-07-28 15:18:29 -04002582
Cary Clark682c58d2018-05-16 07:07:07 -04002583Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002584follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002585
Cary Clark61313f32018-10-08 14:57:48 -04002586If the <a href='SkPath_Overview#Contour'>Path Contour</a> is not terminated by <a href='SkPath_Reference#SkPath_kClose_Verb'>SkPath::kClose Verb</a>, the contour has a
Cary Clark12799e12017-07-28 15:18:29 -04002587visible beginning and end.
2588
Cary Clark61313f32018-10-08 14:57:48 -04002589<a href='SkPath_Overview#Contour'>Path Contour</a> may start and end at the same point; defining <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002590
Cary Clark61313f32018-10-08 14:57:48 -04002591<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
2592<a href='#SkPaint_kRound_Cap'>kRound Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> draws a circle of diameter <a href='#Stroke_Width'>Stroke Width</a>
Cary Clark12799e12017-07-28 15:18:29 -04002593at the contour point.
Cary Clark61313f32018-10-08 14:57:48 -04002594<a href='#SkPaint_kSquare_Cap'>kSquare Cap</a> and <a href='SkPath_Overview#Contour_Zero_Length'>Zero Length Contour</a> draws an upright square with a side of
Cary Clark682c58d2018-05-16 07:07:07 -04002595<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002596
Cary Clark682c58d2018-05-16 07:07:07 -04002597<a href='#Stroke_Cap'>Stroke Cap</a> is <a href='#SkPaint_kButt_Cap'>kButt Cap</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04002598
Cary Clark12799e12017-07-28 15:18:29 -04002599### Example
2600
Cary Clark2ade9972017-11-02 17:49:34 -04002601<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002602
Cary Clark682c58d2018-05-16 07:07:07 -04002603<a name='SkPaint_getStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002604
2605---
Cary Clark12799e12017-07-28 15:18:29 -04002606
Cary Clark682c58d2018-05-16 07:07:07 -04002607<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2608<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002609</pre>
2610
Cary Clark80247e52018-07-11 16:18:41 -04002611Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002612
2613### Return Value
2614
Cary Clark682c58d2018-05-16 07:07:07 -04002615one 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 -04002616
2617### Example
2618
2619<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2620
2621#### Example Output
2622
2623~~~~
2624kButt_Cap == default stroke cap
2625~~~~
2626
2627</fiddle-embed></div>
2628
2629### See Also
2630
Cary Clark682c58d2018-05-16 07:07:07 -04002631<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002632
Cary Clark682c58d2018-05-16 07:07:07 -04002633<a name='SkPaint_setStrokeCap'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002634
2635---
Cary Clark12799e12017-07-28 15:18:29 -04002636
Cary Clark682c58d2018-05-16 07:07:07 -04002637<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2638void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04002639</pre>
2640
Cary Clark80247e52018-07-11 16:18:41 -04002641Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002642
2643### Parameters
2644
Cary Clark682c58d2018-05-16 07:07:07 -04002645<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
2646 <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>;
2647has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002648 </tr>
2649</table>
2650
2651### Example
2652
2653<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2654
2655#### Example Output
2656
2657~~~~
2658kRound_Cap == paint.getStrokeCap()
2659~~~~
2660
2661</fiddle-embed></div>
2662
2663### See Also
2664
Cary Clark682c58d2018-05-16 07:07:07 -04002665<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002666
Cary Clarka90ea222018-10-16 10:30:28 -04002667<a name='Stroke_Join'></a>
Cary Clark08895c42018-02-01 09:37:32 -05002668
Cary Clark61313f32018-10-08 14:57:48 -04002669<a href='#Stroke_Join'>Stroke Join</a> draws at the sharp corners of an open or closed <a href='SkPath_Overview#Contour'>Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002670
Cary Clark682c58d2018-05-16 07:07:07 -04002671Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
Cary Clark61313f32018-10-08 14:57:48 -04002672follows the <a href='SkPath_Overview#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002673
2674If the contour direction changes abruptly, because the tangent direction leading
2675to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04002676the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002677
2678### Example
2679
Cary Clark2ade9972017-11-02 17:49:34 -04002680<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002681
Cary Clarka90ea222018-10-16 10:30:28 -04002682<a name='SkPaint_Join'></a>
2683
2684---
Cary Clark12799e12017-07-28 15:18:29 -04002685
Cary Clarka560c472017-11-27 10:44:06 -05002686<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002687 enum <a href='#SkPaint_Join'>Join</a> {
Cary Clark61313f32018-10-08 14:57:48 -04002688 <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
2689 <a href='#SkPaint_kRound_Join'>kRound_Join</a>,
2690 <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
Cary Clark61313f32018-10-08 14:57:48 -04002691 <a href='#SkPaint_kLast_Join'>kLast_Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel_Join</a>,
2692 <a href='#SkPaint_kDefault_Join'>kDefault_Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter_Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002693 };
Cary Clarka90ea222018-10-16 10:30:28 -04002694</pre>
Cary Clark6fc50412017-09-21 12:31:06 -04002695
Cary Clarka90ea222018-10-16 10:30:28 -04002696<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark61313f32018-10-08 14:57:48 -04002697 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 -05002698</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002699
Cary Clark682c58d2018-05-16 07:07:07 -04002700<a href='#SkPaint_Join'>Join</a> specifies how corners are drawn when a shape is stroked. <a href='#SkPaint_Join'>Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002701affects the four corners of a stroked rectangle, and the connected segments in a
2702stroked path.
2703
2704Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2705radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2706connect the thick strokes.
2707
Cary Clark7cfcbca2018-01-04 16:11:51 -05002708The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002709not contain the actual join. For instance, a fill path constructed with round joins does
2710not necessarily include circles at each connected segment.
2711
2712### Constants
2713
Cary Clark682c58d2018-05-16 07:07:07 -04002714<table style='border-collapse: collapse; width: 62.5em'>
2715 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2716<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2717<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2718 <tr style='background-color: #f0f0f0; '>
2719 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
2720 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2721 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2722Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
2723If the extension exceeds <a href='#Miter_Limit'>Miter Limit</a>, <a href='#SkPaint_kBevel_Join'>kBevel Join</a> is used instead.
Cary Clark1a8d7622018-03-05 13:26:16 -05002724</td>
Cary Clark12799e12017-07-28 15:18:29 -04002725 </tr>
2726 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002727 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
2728 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2729 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2730Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
2731</td>
2732 </tr>
2733 <tr style='background-color: #f0f0f0; '>
2734 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
2735 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2736 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2737Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05002738</td>
Cary Clark12799e12017-07-28 15:18:29 -04002739 </tr>
2740 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002741 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
2742 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2744equivalent to the largest value for Stroke_Join</td>
2745 </tr>
2746 <tr style='background-color: #f0f0f0; '>
2747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
2748 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2749 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2750<a href='#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 -05002751</td>
Cary Clark12799e12017-07-28 15:18:29 -04002752 </tr>
2753 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002754 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
2755 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2756 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2757May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002758</td>
Cary Clark12799e12017-07-28 15:18:29 -04002759 </tr>
2760</table>
2761
2762### Example
2763
2764<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2765
2766### See Also
2767
Cary Clark682c58d2018-05-16 07:07:07 -04002768<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 -04002769
Cary Clark682c58d2018-05-16 07:07:07 -04002770<a name='SkPaint_getStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002771
2772---
Cary Clark12799e12017-07-28 15:18:29 -04002773
Cary Clark682c58d2018-05-16 07:07:07 -04002774<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2775<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002776</pre>
2777
Cary Clark80247e52018-07-11 16:18:41 -04002778Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002779
2780### Return Value
2781
Cary Clark682c58d2018-05-16 07:07:07 -04002782one 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 -04002783
2784### Example
2785
Cary Clark7f644ec2018-07-19 10:50:44 -04002786<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04002787
2788#### Example Output
2789
2790~~~~
2791kMiter_Join == default stroke join
2792~~~~
2793
2794</fiddle-embed></div>
2795
2796### See Also
2797
Cary Clark682c58d2018-05-16 07:07:07 -04002798<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002799
Cary Clark682c58d2018-05-16 07:07:07 -04002800<a name='SkPaint_setStrokeJoin'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002801
2802---
Cary Clark12799e12017-07-28 15:18:29 -04002803
Cary Clark682c58d2018-05-16 07:07:07 -04002804<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2805void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04002806</pre>
2807
Cary Clark80247e52018-07-11 16:18:41 -04002808Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002809
2810### Parameters
2811
Cary Clark682c58d2018-05-16 07:07:07 -04002812<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
2813 <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>;
Cary Clarkbad5ad72017-08-03 17:14:08 -04002814otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002815 </tr>
2816</table>
2817
2818### Example
2819
2820<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2821
2822#### Example Output
2823
2824~~~~
2825kMiter_Join == paint.getStrokeJoin()
2826~~~~
2827
2828</fiddle-embed></div>
2829
2830### See Also
2831
Cary Clark682c58d2018-05-16 07:07:07 -04002832<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002833
Cary Clark12799e12017-07-28 15:18:29 -04002834### See Also
2835
Cary Clark682c58d2018-05-16 07:07:07 -04002836<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002837
Cary Clarka90ea222018-10-16 10:30:28 -04002838<a name='Fill_Path'></a>
2839
2840---
Cary Clark08895c42018-02-01 09:37:32 -05002841
Cary Clark682c58d2018-05-16 07:07:07 -04002842<a href='#Fill_Path'>Fill Path</a> creates a <a href='SkPath_Reference#Path'>Path</a> by applying the <a href='undocumented#Path_Effect'>Path Effect</a>, followed by the <a href='#Style_Stroke'>Style Stroke</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002843
Cary Clark682c58d2018-05-16 07:07:07 -04002844If <a href='#Paint'>Paint</a> contains <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Path_Effect'>Path Effect</a> operates on the source <a href='SkPath_Reference#Path'>Path</a>; the result
2845replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
2846destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002847
Cary Clark682c58d2018-05-16 07:07:07 -04002848Fill <a href='SkPath_Reference#Path'>Path</a> can request the <a href='undocumented#Path_Effect'>Path Effect</a> to restrict to a culling rectangle, but
2849the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002850
Cary Clark682c58d2018-05-16 07:07:07 -04002851If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
2852and <a href='#Stroke_Width'>Stroke Width</a> is greater than zero, the <a href='#Stroke_Width'>Stroke Width</a>, <a href='#Stroke_Cap'>Stroke Cap</a>, <a href='#Stroke_Join'>Stroke Join</a>,
2853and <a href='#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 -04002854
Cary Clark682c58d2018-05-16 07:07:07 -04002855Fill <a href='SkPath_Reference#Path'>Path</a> can specify the precision used by <a href='#Stroke_Width'>Stroke Width</a> to approximate the stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002856
Cary Clark682c58d2018-05-16 07:07:07 -04002857If the <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> and the <a href='#Stroke_Width'>Stroke Width</a> is zero, <a href='#SkPaint_getFillPath'>getFillPath</a>
Cary Clarka90ea222018-10-16 10:30:28 -04002858returns false since <a href='#Hairline'>Hairline</a> has no filled equivalent.
2859
2860### See Also
2861
2862<a href='#Style_Stroke'>Style Stroke</a> <a href='#Stroke_Width'>Stroke Width</a> <a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002863
Cary Clark682c58d2018-05-16 07:07:07 -04002864<a name='SkPaint_getFillPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002865
2866---
Cary Clark12799e12017-07-28 15:18:29 -04002867
Cary Clark682c58d2018-05-16 07:07:07 -04002868<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2869bool <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 -04002870</pre>
2871
Cary Clark80247e52018-07-11 16:18:41 -04002872Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04002873
2874### Parameters
2875
Cary Clark682c58d2018-05-16 07:07:07 -04002876<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
2877 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
2878 </tr>
2879 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
2880 <td>resulting <a href='SkPath_Reference#Path'>Path</a>; may be the same as <a href='#SkPaint_getFillPath_src'>src</a>, but may not be nullptr</td>
2881 </tr>
2882 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
2883 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
2884 </tr>
2885 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
2886 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04002887to favor speed and size</td>
2888 </tr>
2889</table>
2890
2891### Return Value
2892
Cary Clarka90ea222018-10-16 10:30:28 -04002893true if the path represents <a href='#Style_Fill'>Style Fill</a>, or false if it represents <a href='#Hairline'>Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002894
2895### Example
2896
Cary Clark682c58d2018-05-16 07:07:07 -04002897<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href='SkPath_Reference#Quad'>Quad</a> stroke is turned into a filled path with increasing levels of precision.
2898At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05002899At the highest precision, the filled path has high fidelity compared to the original stroke.
2900</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002901
Cary Clark682c58d2018-05-16 07:07:07 -04002902<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05002903
Cary Clarka90ea222018-10-16 10:30:28 -04002904---
2905
Cary Clark682c58d2018-05-16 07:07:07 -04002906<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2907bool <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 -04002908</pre>
2909
Cary Clark80247e52018-07-11 16:18:41 -04002910Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04002911
Cary Clark682c58d2018-05-16 07:07:07 -04002912Replaces <a href='#SkPaint_getFillPath_2_dst'>dst</a> with the <a href='#SkPaint_getFillPath_2_src'>src</a> path modified by <a href='undocumented#Path_Effect'>Path Effect</a> and <a href='#Style_Stroke'>Style Stroke</a>.
2913<a href='undocumented#Path_Effect'>Path Effect</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 -04002914
2915### Parameters
2916
Cary Clark682c58d2018-05-16 07:07:07 -04002917<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
2918 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
2919 </tr>
2920 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
2921 <td>resulting <a href='SkPath_Reference#Path'>Path</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 -04002922 </tr>
2923</table>
2924
2925### Return Value
2926
Cary Clarka90ea222018-10-16 10:30:28 -04002927true if the path represents <a href='#Style_Fill'>Style Fill</a>, or false if it represents <a href='#Hairline'>Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002928
2929### Example
2930
2931<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2932
Cary Clarka90ea222018-10-16 10:30:28 -04002933<a name='Shader_Methods'></a>
2934
Cary Clark12799e12017-07-28 15:18:29 -04002935---
2936
Cary Clark682c58d2018-05-16 07:07:07 -04002937<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
2938<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
2939If <a href='#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 -04002940
Cary Clark682c58d2018-05-16 07:07:07 -04002941<a href='undocumented#Shader'>Shader</a> is modulated by <a href='SkColor_Reference#Alpha'>Color Alpha</a> component of <a href='SkColor_Reference#Color'>Color</a>.
2942If <a href='undocumented#Shader'>Shader</a> object defines only <a href='SkColor_Reference#Alpha'>Color Alpha</a>, then <a href='SkColor_Reference#Color'>Color</a> modulated by <a href='SkColor_Reference#Alpha'>Color Alpha</a> describes
Cary Clark12799e12017-07-28 15:18:29 -04002943the fill.
2944
Cary Clark682c58d2018-05-16 07:07:07 -04002945The drawn transparency can be modified without altering <a href='undocumented#Shader'>Shader</a>, by changing <a href='SkColor_Reference#Alpha'>Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002946
2947### Example
2948
2949<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2950
Cary Clark682c58d2018-05-16 07:07:07 -04002951If <a href='undocumented#Shader'>Shader</a> generates only <a href='SkColor_Reference#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 -04002952
2953### Example
2954
skia-bookmaker525f9a92018-05-03 06:27:39 +00002955<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002956
Cary Clark682c58d2018-05-16 07:07:07 -04002957<a name='SkPaint_getShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002958
2959---
Cary Clark12799e12017-07-28 15:18:29 -04002960
Cary Clark682c58d2018-05-16 07:07:07 -04002961<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2962<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002963</pre>
2964
Cary Clark80247e52018-07-11 16:18:41 -04002965Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002966
Cary Clark682c58d2018-05-16 07:07:07 -04002967Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002968
2969### Return Value
2970
Cary Clark682c58d2018-05-16 07:07:07 -04002971<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002972
2973### Example
2974
2975<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2976
2977#### Example Output
2978
2979~~~~
2980nullptr == shader
2981nullptr != shader
2982~~~~
2983
2984</fiddle-embed></div>
2985
Cary Clark682c58d2018-05-16 07:07:07 -04002986<a name='SkPaint_refShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04002987
2988---
Cary Clark12799e12017-07-28 15:18:29 -04002989
Cary Clark682c58d2018-05-16 07:07:07 -04002990<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2991<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 -04002992</pre>
2993
Cary Clark80247e52018-07-11 16:18:41 -04002994Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04002995
Cary Clark682c58d2018-05-16 07:07:07 -04002996Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002997
2998### Return Value
2999
Cary Clark682c58d2018-05-16 07:07:07 -04003000<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003001
3002### Example
3003
3004<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
3005
3006#### Example Output
3007
3008~~~~
3009shader unique: true
3010shader unique: false
3011~~~~
3012
3013</fiddle-embed></div>
3014
Cary Clark682c58d2018-05-16 07:07:07 -04003015<a name='SkPaint_setShader'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003016
3017---
Cary Clark12799e12017-07-28 15:18:29 -04003018
Cary Clark682c58d2018-05-16 07:07:07 -04003019<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3020void <a href='#SkPaint_setShader'>setShader</a>(<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkShader'>SkShader</a>&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04003021</pre>
3022
Cary Clark80247e52018-07-11 16:18:41 -04003023Sets optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003024
Cary Clark682c58d2018-05-16 07:07:07 -04003025Sets <a href='undocumented#Shader'>Shader</a> to <a href='#SkPaint_setShader_shader'>shader</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous <a href='undocumented#Shader'>Shader</a>.
3026Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003027
3028### Parameters
3029
Cary Clark682c58d2018-05-16 07:07:07 -04003030<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
3031 <td>how geometry is filled with color; if nullptr, <a href='SkColor_Reference#Color'>Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04003032 </tr>
3033</table>
3034
3035### Example
3036
skia-bookmakere0a458f2018-07-16 05:29:00 +00003037<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003038
Cary Clarka90ea222018-10-16 10:30:28 -04003039<a name='Color_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003040
Cary Clarka90ea222018-10-16 10:30:28 -04003041---
Cary Clark08895c42018-02-01 09:37:32 -05003042
Cary Clark682c58d2018-05-16 07:07:07 -04003043<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04003044<a href='undocumented#Color_Filter'>Color Filter</a> may apply <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
Cary Clark682c58d2018-05-16 07:07:07 -04003045If <a href='#Paint'>Paint</a> has no <a href='undocumented#Color_Filter'>Color Filter</a>, the color is unaltered.
Cary Clark12799e12017-07-28 15:18:29 -04003046
Cary Clark682c58d2018-05-16 07:07:07 -04003047The drawn transparency can be modified without altering <a href='undocumented#Color_Filter'>Color Filter</a>, by changing <a href='SkColor_Reference#Alpha'>Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003048
3049### Example
3050
3051<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
3052
Cary Clark682c58d2018-05-16 07:07:07 -04003053<a name='SkPaint_getColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003054
3055---
Cary Clark12799e12017-07-28 15:18:29 -04003056
Cary Clark682c58d2018-05-16 07:07:07 -04003057<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3058<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003059</pre>
3060
Cary Clark682c58d2018-05-16 07:07:07 -04003061Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3062Does not alter <a href='undocumented#Color_Filter'>Color Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003063
3064### Return Value
3065
Cary Clark682c58d2018-05-16 07:07:07 -04003066<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003067
3068### Example
3069
3070<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
3071
3072#### Example Output
3073
3074~~~~
3075nullptr == color filter
3076nullptr != color filter
3077~~~~
3078
3079</fiddle-embed></div>
3080
Cary Clark682c58d2018-05-16 07:07:07 -04003081<a name='SkPaint_refColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003082
3083---
Cary Clark12799e12017-07-28 15:18:29 -04003084
Cary Clark682c58d2018-05-16 07:07:07 -04003085<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3086<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 -04003087</pre>
3088
Cary Clark682c58d2018-05-16 07:07:07 -04003089Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3090Increases <a href='undocumented#Color_Filter'>Color Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003091
3092### Return Value
3093
Cary Clark682c58d2018-05-16 07:07:07 -04003094<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04003095
3096### Example
3097
3098<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3099
3100#### Example Output
3101
3102~~~~
3103color filter unique: true
3104color filter unique: false
3105~~~~
3106
3107</fiddle-embed></div>
3108
Cary Clark682c58d2018-05-16 07:07:07 -04003109<a name='SkPaint_setColorFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003110
3111---
Cary Clark12799e12017-07-28 15:18:29 -04003112
Cary Clark682c58d2018-05-16 07:07:07 -04003113<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3114void <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 -04003115</pre>
3116
Cary Clark682c58d2018-05-16 07:07:07 -04003117Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3118<a href='undocumented#Color_Filter'>Color Filter</a>. Pass nullptr to clear <a href='undocumented#Color_Filter'>Color Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003119
Cary Clark682c58d2018-05-16 07:07:07 -04003120Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003121
3122### Parameters
3123
Cary Clark682c58d2018-05-16 07:07:07 -04003124<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3125 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003126 </tr>
3127</table>
3128
3129### Example
3130
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003131<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003132
Cary Clarka90ea222018-10-16 10:30:28 -04003133<a name='Blend_Mode_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003134
Cary Clarka90ea222018-10-16 10:30:28 -04003135---
Cary Clark08895c42018-02-01 09:37:32 -05003136
Cary Clark224c7002018-06-27 11:00:21 -04003137<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3138The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003139over the destination color.
3140
3141### Example
3142
Cary Clark83647062018-07-18 16:21:51 -04003143<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003144
3145### See Also
3146
Cary Clark224c7002018-06-27 11:00:21 -04003147<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003148
Cary Clark682c58d2018-05-16 07:07:07 -04003149<a name='SkPaint_getBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003150
3151---
Cary Clark12799e12017-07-28 15:18:29 -04003152
Cary Clark682c58d2018-05-16 07:07:07 -04003153<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003154<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003155</pre>
3156
Cary Clark224c7002018-06-27 11:00:21 -04003157Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
3158By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003159
3160### Return Value
3161
3162mode used to combine source color with destination color
3163
3164### Example
3165
skia-bookmaker525f9a92018-05-03 06:27:39 +00003166<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003167
3168#### Example Output
3169
3170~~~~
3171kSrcOver == getBlendMode
3172kSrcOver != getBlendMode
3173~~~~
3174
3175</fiddle-embed></div>
3176
Cary Clark682c58d2018-05-16 07:07:07 -04003177<a name='SkPaint_isSrcOver'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003178
3179---
Cary Clark12799e12017-07-28 15:18:29 -04003180
Cary Clark682c58d2018-05-16 07:07:07 -04003181<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3182bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003183</pre>
3184
Cary Clark224c7002018-06-27 11:00:21 -04003185Returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003186
3187### Return Value
3188
Cary Clark224c7002018-06-27 11:00:21 -04003189true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003190
3191### Example
3192
3193<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3194
3195#### Example Output
3196
3197~~~~
3198isSrcOver == true
3199isSrcOver != true
3200~~~~
3201
3202</fiddle-embed></div>
3203
Cary Clark682c58d2018-05-16 07:07:07 -04003204<a name='SkPaint_setBlendMode'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003205
3206---
Cary Clark12799e12017-07-28 15:18:29 -04003207
Cary Clark682c58d2018-05-16 07:07:07 -04003208<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003209void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003210</pre>
3211
Cary Clark224c7002018-06-27 11:00:21 -04003212Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003213Does not check for valid input.
3214
3215### Parameters
3216
Cary Clark682c58d2018-05-16 07:07:07 -04003217<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark224c7002018-06-27 11:00:21 -04003218 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003219 </tr>
3220</table>
3221
3222### Example
3223
3224<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3225
3226#### Example Output
3227
3228~~~~
3229isSrcOver == true
3230isSrcOver != true
3231~~~~
3232
3233</fiddle-embed></div>
3234
Cary Clarka90ea222018-10-16 10:30:28 -04003235<a name='Path_Effect_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003236
Cary Clarka90ea222018-10-16 10:30:28 -04003237---
Cary Clark08895c42018-02-01 09:37:32 -05003238
Cary Clark682c58d2018-05-16 07:07:07 -04003239<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3240<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3241If <a href='#Paint'>Paint</a> has no <a href='undocumented#Path_Effect'>Path Effect</a>, the path geometry is unaltered when filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04003242
3243### Example
3244
3245<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3246
3247### See Also
3248
Cary Clark682c58d2018-05-16 07:07:07 -04003249<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003250
Cary Clark682c58d2018-05-16 07:07:07 -04003251<a name='SkPaint_getPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003252
3253---
Cary Clark12799e12017-07-28 15:18:29 -04003254
Cary Clark682c58d2018-05-16 07:07:07 -04003255<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3256<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003257</pre>
3258
Cary Clark682c58d2018-05-16 07:07:07 -04003259Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3260Does not alter <a href='undocumented#Path_Effect'>Path Effect</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003261
3262### Return Value
3263
Cary Clark682c58d2018-05-16 07:07:07 -04003264<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003265
3266### Example
3267
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003268<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003269
3270#### Example Output
3271
3272~~~~
3273nullptr == path effect
3274nullptr != path effect
3275~~~~
3276
3277</fiddle-embed></div>
3278
Cary Clark682c58d2018-05-16 07:07:07 -04003279<a name='SkPaint_refPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003280
3281---
Cary Clark12799e12017-07-28 15:18:29 -04003282
Cary Clark682c58d2018-05-16 07:07:07 -04003283<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3284<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 -04003285</pre>
3286
Cary Clark682c58d2018-05-16 07:07:07 -04003287Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3288Increases <a href='undocumented#Path_Effect'>Path Effect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003289
3290### Return Value
3291
Cary Clark682c58d2018-05-16 07:07:07 -04003292<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003293
3294### Example
3295
Cary Clark83647062018-07-18 16:21:51 -04003296<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003297
3298#### Example Output
3299
3300~~~~
3301path effect unique: true
3302path effect unique: false
3303~~~~
3304
3305</fiddle-embed></div>
3306
Cary Clark682c58d2018-05-16 07:07:07 -04003307<a name='SkPaint_setPathEffect'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003308
3309---
Cary Clark12799e12017-07-28 15:18:29 -04003310
Cary Clark682c58d2018-05-16 07:07:07 -04003311<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3312void <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 -04003313</pre>
3314
Cary Clark682c58d2018-05-16 07:07:07 -04003315Sets <a href='undocumented#Path_Effect'>Path Effect</a> to <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3316<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003317
Cary Clark682c58d2018-05-16 07:07:07 -04003318Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003319
3320### Parameters
3321
Cary Clark682c58d2018-05-16 07:07:07 -04003322<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3323 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003324 </tr>
3325</table>
3326
3327### Example
3328
3329<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3330
Cary Clarka90ea222018-10-16 10:30:28 -04003331<a name='Mask_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003332
Cary Clarka90ea222018-10-16 10:30:28 -04003333---
Cary Clark08895c42018-02-01 09:37:32 -05003334
Cary Clark682c58d2018-05-16 07:07:07 -04003335<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3336<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003337
Cary Clark682c58d2018-05-16 07:07:07 -04003338<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3339creating a blur effect. Set <a href='undocumented#Mask_Filter'>Mask Filter</a> to nullptr to prevent <a href='undocumented#Mask_Filter'>Mask Filter</a> from
Cary Clark6fc50412017-09-21 12:31:06 -04003340modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003341
3342### Example
3343
Cary Clark681287e2018-03-16 11:34:15 -04003344<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003345
Cary Clark682c58d2018-05-16 07:07:07 -04003346<a name='SkPaint_getMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003347
3348---
Cary Clark12799e12017-07-28 15:18:29 -04003349
Cary Clark682c58d2018-05-16 07:07:07 -04003350<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3351<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003352</pre>
3353
Cary Clark682c58d2018-05-16 07:07:07 -04003354Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
3355Does not alter <a href='undocumented#Mask_Filter'>Mask Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003356
3357### Return Value
3358
Cary Clark682c58d2018-05-16 07:07:07 -04003359<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003360
3361### Example
3362
Cary Clark681287e2018-03-16 11:34:15 -04003363<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003364
3365#### Example Output
3366
3367~~~~
3368nullptr == mask filter
3369nullptr != mask filter
3370~~~~
3371
3372</fiddle-embed></div>
3373
Cary Clark682c58d2018-05-16 07:07:07 -04003374<a name='SkPaint_refMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003375
3376---
Cary Clark12799e12017-07-28 15:18:29 -04003377
Cary Clark682c58d2018-05-16 07:07:07 -04003378<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3379<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 -04003380</pre>
3381
Cary Clark682c58d2018-05-16 07:07:07 -04003382Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003383
Cary Clark682c58d2018-05-16 07:07:07 -04003384Increases <a href='undocumented#Mask_Filter'>Mask Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003385
3386### Return Value
3387
Cary Clark682c58d2018-05-16 07:07:07 -04003388<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003389
3390### Example
3391
Cary Clark83647062018-07-18 16:21:51 -04003392<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003393
3394#### Example Output
3395
3396~~~~
3397mask filter unique: true
3398mask filter unique: false
3399~~~~
3400
3401</fiddle-embed></div>
3402
Cary Clark682c58d2018-05-16 07:07:07 -04003403<a name='SkPaint_setMaskFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003404
3405---
Cary Clark12799e12017-07-28 15:18:29 -04003406
Cary Clark682c58d2018-05-16 07:07:07 -04003407<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3408void <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 -04003409</pre>
3410
Cary Clark682c58d2018-05-16 07:07:07 -04003411Sets <a href='undocumented#Mask_Filter'>Mask Filter</a> to <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3412<a href='undocumented#Mask_Filter'>Mask Filter</a>. Pass nullptr to clear <a href='undocumented#Mask_Filter'>Mask Filter</a> and leave <a href='undocumented#Mask_Filter'>Mask Filter</a> effect on
3413<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003414
Cary Clark682c58d2018-05-16 07:07:07 -04003415Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003416
3417### Parameters
3418
Cary Clark682c58d2018-05-16 07:07:07 -04003419<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
3420 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04003421 </tr>
3422</table>
3423
3424### Example
3425
Cary Clark681287e2018-03-16 11:34:15 -04003426<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003427
Cary Clarka90ea222018-10-16 10:30:28 -04003428<a name='Typeface_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003429
Cary Clarka90ea222018-10-16 10:30:28 -04003430---
Cary Clark08895c42018-02-01 09:37:32 -05003431
Cary Clark682c58d2018-05-16 07:07:07 -04003432<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
3433<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
3434The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003435implementation.
3436
3437### Example
3438
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003439<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003440
Cary Clark682c58d2018-05-16 07:07:07 -04003441<a name='SkPaint_getTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003442
3443---
Cary Clark12799e12017-07-28 15:18:29 -04003444
Cary Clark682c58d2018-05-16 07:07:07 -04003445<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3446<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003447</pre>
3448
Cary Clark682c58d2018-05-16 07:07:07 -04003449Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
Cary Clark81abc432018-06-25 16:30:08 -04003450Does not alter <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003451
3452### Return Value
3453
Cary Clark682c58d2018-05-16 07:07:07 -04003454<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003455
3456### Example
3457
Cary Clarkf9603982018-07-17 08:20:27 -04003458<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003459
3460#### Example Output
3461
3462~~~~
3463nullptr == typeface
3464nullptr != typeface
3465~~~~
3466
3467</fiddle-embed></div>
3468
Cary Clark682c58d2018-05-16 07:07:07 -04003469<a name='SkPaint_refTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003470
3471---
Cary Clark12799e12017-07-28 15:18:29 -04003472
Cary Clark682c58d2018-05-16 07:07:07 -04003473<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3474<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 -04003475</pre>
3476
Cary Clark682c58d2018-05-16 07:07:07 -04003477Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003478
3479### Return Value
3480
Cary Clark682c58d2018-05-16 07:07:07 -04003481<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003482
3483### Example
3484
Cary Clark83647062018-07-18 16:21:51 -04003485<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04003486
3487#### Example Output
3488
3489~~~~
3490typeface1 != typeface2
3491typeface1 == typeface2
3492~~~~
3493
3494</fiddle-embed></div>
3495
Cary Clark682c58d2018-05-16 07:07:07 -04003496<a name='SkPaint_setTypeface'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003497
3498---
Cary Clark12799e12017-07-28 15:18:29 -04003499
Cary Clark682c58d2018-05-16 07:07:07 -04003500<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3501void <a href='#SkPaint_setTypeface'>setTypeface</a>(<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkTypeface'>SkTypeface</a>&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003502</pre>
3503
Cary Clark682c58d2018-05-16 07:07:07 -04003504Sets <a href='undocumented#Typeface'>Typeface</a> to <a href='#SkPaint_setTypeface_typeface'>typeface</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous <a href='undocumented#Typeface'>Typeface</a>.
3505Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
3506<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003507
3508### Parameters
3509
Cary Clark682c58d2018-05-16 07:07:07 -04003510<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
3511 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003512 </tr>
3513</table>
3514
3515### Example
3516
Cary Clark71961fb2018-01-05 14:21:59 -05003517<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003518
Cary Clarka90ea222018-10-16 10:30:28 -04003519<a name='Image_Filter_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003520
Cary Clarka90ea222018-10-16 10:30:28 -04003521---
Cary Clark08895c42018-02-01 09:37:32 -05003522
Cary Clark682c58d2018-05-16 07:07:07 -04003523<a href='undocumented#Image_Filter'>Image Filter</a> operates on the pixel representation of the shape, as modified by <a href='#Paint'>Paint</a>
Cary Clark224c7002018-06-27 11:00:21 -04003524with <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> set to <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>. <a href='undocumented#Image_Filter'>Image Filter</a> creates a new bitmap,
3525which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003526
Cary Clark682c58d2018-05-16 07:07:07 -04003527<a href='undocumented#Image_Filter'>Image Filter</a> is higher level than <a href='undocumented#Mask_Filter'>Mask Filter</a>; for instance, an <a href='undocumented#Image_Filter'>Image Filter</a>
3528can operate on all channels of <a href='SkColor_Reference#Color'>Color</a>, while <a href='undocumented#Mask_Filter'>Mask Filter</a> generates <a href='SkColor_Reference#Alpha'>Alpha</a> only.
3529<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
3530<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003531
3532### Example
3533
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003534<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003535
Cary Clark682c58d2018-05-16 07:07:07 -04003536<a name='SkPaint_getImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003537
3538---
Cary Clark12799e12017-07-28 15:18:29 -04003539
Cary Clark682c58d2018-05-16 07:07:07 -04003540<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3541<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003542</pre>
3543
Cary Clark682c58d2018-05-16 07:07:07 -04003544Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
3545Does not alter <a href='undocumented#Image_Filter'>Image Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003546
3547### Return Value
3548
Cary Clark682c58d2018-05-16 07:07:07 -04003549<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003550
3551### Example
3552
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003553<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04003554
3555#### Example Output
3556
3557~~~~
3558nullptr == image filter
3559nullptr != image filter
3560~~~~
3561
3562</fiddle-embed></div>
3563
Cary Clark682c58d2018-05-16 07:07:07 -04003564<a name='SkPaint_refImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003565
3566---
Cary Clark12799e12017-07-28 15:18:29 -04003567
Cary Clark682c58d2018-05-16 07:07:07 -04003568<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3569<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 -04003570</pre>
3571
Cary Clark682c58d2018-05-16 07:07:07 -04003572Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
3573Increases <a href='undocumented#Image_Filter'>Image Filter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003574
3575### Return Value
3576
Cary Clark682c58d2018-05-16 07:07:07 -04003577<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003578
3579### Example
3580
3581<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3582
3583#### Example Output
3584
3585~~~~
3586image filter unique: true
3587image filter unique: false
3588~~~~
3589
3590</fiddle-embed></div>
3591
Cary Clark682c58d2018-05-16 07:07:07 -04003592<a name='SkPaint_setImageFilter'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003593
3594---
Cary Clark12799e12017-07-28 15:18:29 -04003595
Cary Clark682c58d2018-05-16 07:07:07 -04003596<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3597void <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 -04003598</pre>
3599
Cary Clark682c58d2018-05-16 07:07:07 -04003600Sets <a href='undocumented#Image_Filter'>Image Filter</a> to <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3601<a href='undocumented#Image_Filter'>Image Filter</a>. Pass nullptr to clear <a href='undocumented#Image_Filter'>Image Filter</a>, and remove <a href='undocumented#Image_Filter'>Image Filter</a> effect
Cary Clark12799e12017-07-28 15:18:29 -04003602on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003603
Cary Clark682c58d2018-05-16 07:07:07 -04003604Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003605
3606### Parameters
3607
Cary Clark682c58d2018-05-16 07:07:07 -04003608<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
3609 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003610 </tr>
3611</table>
3612
3613### Example
3614
3615<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3616
Cary Clarka90ea222018-10-16 10:30:28 -04003617<a name='Draw_Looper_Methods'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003618
Cary Clarka90ea222018-10-16 10:30:28 -04003619---
Cary Clark08895c42018-02-01 09:37:32 -05003620
Cary Clark682c58d2018-05-16 07:07:07 -04003621<a href='undocumented#Draw_Looper'>Draw Looper</a> sets a modifier that communicates state from one <a href='undocumented#Draw_Layer'>Draw Layer</a>
Cary Clark12799e12017-07-28 15:18:29 -04003622to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003623
Cary Clark682c58d2018-05-16 07:07:07 -04003624<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3625<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3626Set <a href='undocumented#Draw_Looper'>Draw Looper</a> to nullptr to prevent <a href='undocumented#Draw_Looper'>Draw Looper</a> from modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003627
3628### Example
3629
3630<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3631
Cary Clark682c58d2018-05-16 07:07:07 -04003632<a name='SkPaint_getDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003633
3634---
Cary Clark12799e12017-07-28 15:18:29 -04003635
Cary Clark682c58d2018-05-16 07:07:07 -04003636<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3637<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003638</pre>
3639
Cary Clark682c58d2018-05-16 07:07:07 -04003640Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
3641Does not alter <a href='undocumented#Draw_Looper'>Draw Looper</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003642
3643### Return Value
3644
Cary Clark682c58d2018-05-16 07:07:07 -04003645<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003646
3647### Example
3648
3649<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3650
3651#### Example Output
3652
3653~~~~
3654nullptr == draw looper
3655nullptr != draw looper
3656~~~~
3657
3658</fiddle-embed></div>
3659
Cary Clark682c58d2018-05-16 07:07:07 -04003660<a name='SkPaint_refDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003661
3662---
Cary Clark12799e12017-07-28 15:18:29 -04003663
Cary Clark682c58d2018-05-16 07:07:07 -04003664<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3665<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 -04003666</pre>
3667
Cary Clark682c58d2018-05-16 07:07:07 -04003668Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
3669Increases <a href='undocumented#Draw_Looper'>Draw Looper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003670
3671### Return Value
3672
Cary Clark682c58d2018-05-16 07:07:07 -04003673<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003674
3675### Example
3676
3677<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3678
3679#### Example Output
3680
3681~~~~
3682draw looper unique: true
3683draw looper unique: false
3684~~~~
3685
3686</fiddle-embed></div>
3687
Cary Clark682c58d2018-05-16 07:07:07 -04003688<a name='SkPaint_getLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003689
3690---
Cary Clark12799e12017-07-28 15:18:29 -04003691
Cary Clark682c58d2018-05-16 07:07:07 -04003692<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3693<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003694</pre>
3695
Cary Clark682c58d2018-05-16 07:07:07 -04003696Deprecated.
3697
Cary Clark682c58d2018-05-16 07:07:07 -04003698<a name='SkPaint_setDrawLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003699
3700---
Cary Clark12799e12017-07-28 15:18:29 -04003701
Cary Clark682c58d2018-05-16 07:07:07 -04003702<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3703void <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 -04003704</pre>
3705
Cary Clark682c58d2018-05-16 07:07:07 -04003706Sets <a href='undocumented#Draw_Looper'>Draw Looper</a> to <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3707<a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a>. Pass nullptr to clear <a href='undocumented#Draw_Looper'>Draw Looper</a> and leave <a href='undocumented#Draw_Looper'>Draw Looper</a> effect on
Cary Clark6fc50412017-09-21 12:31:06 -04003708drawing unaltered.
3709
Cary Clark682c58d2018-05-16 07:07:07 -04003710Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003711
3712### Parameters
3713
Cary Clark682c58d2018-05-16 07:07:07 -04003714<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
3715 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003716 </tr>
3717</table>
3718
3719### Example
3720
3721<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3722
Cary Clark682c58d2018-05-16 07:07:07 -04003723<a name='SkPaint_setLooper'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003724
3725---
Cary Clark12799e12017-07-28 15:18:29 -04003726
Cary Clark682c58d2018-05-16 07:07:07 -04003727<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3728void <a href='#SkPaint_setLooper'>setLooper</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 -04003729</pre>
3730
Cary Clark682c58d2018-05-16 07:07:07 -04003731Deprecated.
3732
Cary Clarka90ea222018-10-16 10:30:28 -04003733<a name='Text_Align'></a>
3734
Cary Clark12799e12017-07-28 15:18:29 -04003735---
3736
Cary Clarka90ea222018-10-16 10:30:28 -04003737<a name='SkPaint_Align'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003738
Cary Clarka90ea222018-10-16 10:30:28 -04003739---
Cary Clark12799e12017-07-28 15:18:29 -04003740
Cary Clarka560c472017-11-27 10:44:06 -05003741<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003742 enum <a href='#SkPaint_Align'>Align</a> {
Cary Clark61313f32018-10-08 14:57:48 -04003743 <a href='#SkPaint_kLeft_Align'>kLeft_Align</a>,
3744 <a href='#SkPaint_kCenter_Align'>kCenter_Align</a>,
3745 <a href='#SkPaint_kRight_Align'>kRight_Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003746 };
Cary Clarka90ea222018-10-16 10:30:28 -04003747</pre>
Cary Clarkd98f78c2018-04-26 08:32:37 -04003748
Cary Clarka90ea222018-10-16 10:30:28 -04003749<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003750 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05003751</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003752
Cary Clark682c58d2018-05-16 07:07:07 -04003753<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
3754<a href='#SkPaint_Align'>Align</a> affects <a href='undocumented#Glyph'>Glyphs</a> drawn with: <a href='SkCanvas_Reference#SkCanvas_drawText'>SkCanvas::drawText</a>, <a href='SkCanvas_Reference#SkCanvas_drawPosText'>SkCanvas::drawPosText</a>,
Cary Clark153e76d2018-08-28 11:48:28 -04003755<a href='SkCanvas_Reference#SkCanvas_drawPosTextH'>SkCanvas::drawPosTextH</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextRSXform'>SkCanvas::drawTextRSXform</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextBlob'>SkCanvas::drawTextBlob</a>,
Cary Clark682c58d2018-05-16 07:07:07 -04003756and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
3757as well as calls that place text <a href='undocumented#Glyph'>Glyphs</a> like <a href='#SkPaint_getTextWidths'>getTextWidths</a> and <a href='#SkPaint_getTextPath'>getTextPath</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003758
3759The text position is set by the font for both horizontal and vertical text.
3760Typically, for horizontal text, the position is to the left side of the glyph on the
3761base line; and for vertical text, the position is the horizontal center of the glyph
3762at the caps height.
3763
Cary Clark682c58d2018-05-16 07:07:07 -04003764<a href='#SkPaint_Align'>Align</a> adjusts the glyph position to center it or move it to abut the position
Cary Clark12799e12017-07-28 15:18:29 -04003765using the metrics returned by the font.
3766
Cary Clark682c58d2018-05-16 07:07:07 -04003767<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003768
3769### Constants
3770
Cary Clark682c58d2018-05-16 07:07:07 -04003771<table style='border-collapse: collapse; width: 62.5em'>
3772 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3773<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3774<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3775 <tr style='background-color: #f0f0f0; '>
3776 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
3777 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3778 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3779Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05003780</td>
Cary Clark12799e12017-07-28 15:18:29 -04003781 </tr>
3782 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003783 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
3784 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3785 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3786Moves the glyph half its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear, and
3787half its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
3788</td>
3789 </tr>
3790 <tr style='background-color: #f0f0f0; '>
3791 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
3792 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3793 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3794Moves the glyph by its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear,
3795and by its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
Cary Clark1a8d7622018-03-05 13:26:16 -05003796</td>
Cary Clark12799e12017-07-28 15:18:29 -04003797 </tr>
3798 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003799 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
3800 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3801 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04003802May be used to verify that <a href='#SkPaint_Align'>Align</a> is a legal value.
3803</td>
Cary Clark12799e12017-07-28 15:18:29 -04003804 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003805</table>
Cary Clark12799e12017-07-28 15:18:29 -04003806
3807### Example
3808
Cary Clark1a8d7622018-03-05 13:26:16 -05003809<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
3810</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003811
3812### Example
3813
Cary Clark682c58d2018-05-16 07:07:07 -04003814<div><fiddle-embed name="f1cbbbafe6b3c52b81309cccbf96a308"><div><a href='#Vertical_Text'>Vertical Text</a> treats <a href='#SkPaint_kLeft_Align'>kLeft Align</a> as top align, and <a href='#SkPaint_kRight_Align'>kRight Align</a> as bottom align.
Cary Clark1a8d7622018-03-05 13:26:16 -05003815</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003816
Cary Clark682c58d2018-05-16 07:07:07 -04003817<a name='SkPaint_getTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003818
3819---
Cary Clark12799e12017-07-28 15:18:29 -04003820
Cary Clark682c58d2018-05-16 07:07:07 -04003821<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3822<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003823</pre>
3824
Cary Clark682c58d2018-05-16 07:07:07 -04003825Returns <a href='#Text_Align'>Text Align</a>.
3826Returns <a href='#SkPaint_kLeft_Align'>kLeft Align</a> if <a href='#Text_Align'>Text Align</a> has not been set.
Cary Clark12799e12017-07-28 15:18:29 -04003827
3828### Return Value
3829
3830text placement relative to position
3831
3832### Example
3833
3834<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3835
3836#### Example Output
3837
3838~~~~
3839kLeft_Align == default
3840~~~~
3841
3842</fiddle-embed></div>
3843
Cary Clark682c58d2018-05-16 07:07:07 -04003844<a name='SkPaint_setTextAlign'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003845
3846---
Cary Clark12799e12017-07-28 15:18:29 -04003847
Cary Clark682c58d2018-05-16 07:07:07 -04003848<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3849void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04003850</pre>
3851
Cary Clark682c58d2018-05-16 07:07:07 -04003852Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
3853Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003854
3855### Parameters
3856
Cary Clark682c58d2018-05-16 07:07:07 -04003857<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
3858 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04003859 </tr>
3860</table>
3861
3862### Example
3863
Cary Clark682c58d2018-05-16 07:07:07 -04003864<div><fiddle-embed name="d37540afd918506ac2594665ca63979b"><div><a href='undocumented#Text'>Text</a> is left-aligned by default, and then set to center. Setting the
Cary Clark1a8d7622018-03-05 13:26:16 -05003865alignment out of range has no effect.
3866</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003867
Cary Clarka90ea222018-10-16 10:30:28 -04003868<a name='Text_Size'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003869
Cary Clarka90ea222018-10-16 10:30:28 -04003870---
Cary Clark08895c42018-02-01 09:37:32 -05003871
Cary Clark682c58d2018-05-16 07:07:07 -04003872<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
3873<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
3874<a href='#Text_Size'>Text Size</a> defaults to 12.
3875Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003876
3877### Example
3878
3879<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3880
Cary Clark682c58d2018-05-16 07:07:07 -04003881<a name='SkPaint_getTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003882
3883---
Cary Clark12799e12017-07-28 15:18:29 -04003884
Cary Clark682c58d2018-05-16 07:07:07 -04003885<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3886<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003887</pre>
3888
Cary Clark682c58d2018-05-16 07:07:07 -04003889Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003890
3891### Return Value
3892
3893typographic height of text
3894
3895### Example
3896
skia-bookmaker233c6522018-07-04 05:33:26 +00003897<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003898
Cary Clark682c58d2018-05-16 07:07:07 -04003899<a name='SkPaint_setTextSize'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003900
3901---
Cary Clark12799e12017-07-28 15:18:29 -04003902
Cary Clark682c58d2018-05-16 07:07:07 -04003903<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3904void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04003905</pre>
3906
Cary Clark682c58d2018-05-16 07:07:07 -04003907Sets <a href='#Text_Size'>Text Size</a> in points.
3908Has 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 -04003909
3910### Parameters
3911
Cary Clark682c58d2018-05-16 07:07:07 -04003912<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
3913 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04003914 </tr>
3915</table>
3916
3917### Example
3918
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003919<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003920
Cary Clarka90ea222018-10-16 10:30:28 -04003921<a name='Text_Scale_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003922
Cary Clarka90ea222018-10-16 10:30:28 -04003923---
Cary Clark08895c42018-02-01 09:37:32 -05003924
Cary Clark682c58d2018-05-16 07:07:07 -04003925<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
3926<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003927is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003928<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
3929<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003930
3931### Example
3932
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003933<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003934
Cary Clark682c58d2018-05-16 07:07:07 -04003935<a name='SkPaint_getTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003936
3937---
Cary Clark12799e12017-07-28 15:18:29 -04003938
Cary Clark682c58d2018-05-16 07:07:07 -04003939<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3940<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003941</pre>
3942
Cary Clark682c58d2018-05-16 07:07:07 -04003943Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003944Default value is 1.
3945
3946### Return Value
3947
3948text horizontal scale
3949
3950### Example
3951
3952<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3953
Cary Clark682c58d2018-05-16 07:07:07 -04003954<a name='SkPaint_setTextScaleX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003955
3956---
Cary Clark12799e12017-07-28 15:18:29 -04003957
Cary Clark682c58d2018-05-16 07:07:07 -04003958<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3959void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04003960</pre>
3961
Cary Clark682c58d2018-05-16 07:07:07 -04003962Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003963Default value is 1.
3964
3965### Parameters
3966
Cary Clark682c58d2018-05-16 07:07:07 -04003967<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
3968 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04003969 </tr>
3970</table>
3971
3972### Example
3973
3974<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3975
Cary Clarka90ea222018-10-16 10:30:28 -04003976<a name='Text_Skew_X'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003977
Cary Clarka90ea222018-10-16 10:30:28 -04003978---
Cary Clark08895c42018-02-01 09:37:32 -05003979
Cary Clark682c58d2018-05-16 07:07:07 -04003980<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
3981<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003982is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04003983<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
3984<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003985
3986### Example
3987
3988<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3989
Cary Clark682c58d2018-05-16 07:07:07 -04003990<a name='SkPaint_getTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04003991
3992---
Cary Clark12799e12017-07-28 15:18:29 -04003993
Cary Clark682c58d2018-05-16 07:07:07 -04003994<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3995<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003996</pre>
3997
Cary Clark682c58d2018-05-16 07:07:07 -04003998Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003999Default value is zero.
4000
4001### Return Value
4002
4003additional shear in x-axis relative to y-axis
4004
4005### Example
4006
Cary Clark7f644ec2018-07-19 10:50:44 -04004007<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004008
Cary Clark682c58d2018-05-16 07:07:07 -04004009<a name='SkPaint_setTextSkewX'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004010
4011---
Cary Clark12799e12017-07-28 15:18:29 -04004012
Cary Clark682c58d2018-05-16 07:07:07 -04004013<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4014void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04004015</pre>
4016
Cary Clark682c58d2018-05-16 07:07:07 -04004017Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004018Default value is zero.
4019
4020### Parameters
4021
Cary Clark682c58d2018-05-16 07:07:07 -04004022<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
4023 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04004024 </tr>
4025</table>
4026
4027### Example
4028
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004029<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004030
Cary Clarka90ea222018-10-16 10:30:28 -04004031<a name='Text_Encoding'></a>
4032
Cary Clark12799e12017-07-28 15:18:29 -04004033---
4034
Cary Clarka90ea222018-10-16 10:30:28 -04004035<a name='SkPaint_TextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004036
Cary Clarka90ea222018-10-16 10:30:28 -04004037---
Cary Clark12799e12017-07-28 15:18:29 -04004038
Cary Clarka560c472017-11-27 10:44:06 -05004039<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004040 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004041 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8_TextEncoding</a>,
4042 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16_TextEncoding</a>,
4043 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32_TextEncoding</a>,
4044 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID_TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004045 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004046</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004047
Cary Clark682c58d2018-05-16 07:07:07 -04004048<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
4049size, or glyph indices. Characters are encoded as specified by the <a href='https://unicode.org/standard/standard.html'>Unicode standard</a></a> .
Cary Clark6fc50412017-09-21 12:31:06 -04004050
Cary Clarka560c472017-11-27 10:44:06 -05004051Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004052All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04004053in the total storage required.
4054
Cary Clark682c58d2018-05-16 07:07:07 -04004055<a href='https://tools.ietf.org/html/rfc3629'>UTF-8 (RFC 3629)</a></a> encodes each character as one or more 8-bit bytes.
Cary Clark6fc50412017-09-21 12:31:06 -04004056
Cary Clark682c58d2018-05-16 07:07:07 -04004057<a href='https://tools.ietf.org/html/rfc2781'>UTF-16 (RFC 2781)</a></a> encodes each character as one or two 16-bit words.
Cary Clark6fc50412017-09-21 12:31:06 -04004058
Cary Clark682c58d2018-05-16 07:07:07 -04004059<a href='https://www.unicode.org/versions/Unicode5.0.0/ch03.pdf'>UTF-32</a></a> encodes each character as one 32-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04004060
Cary Clark682c58d2018-05-16 07:07:07 -04004061<a href='undocumented#Font_Manager'>Font Manager</a> uses font data to convert character code points into glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004062A glyph index is a 16-bit word.
4063
Cary Clark682c58d2018-05-16 07:07:07 -04004064<a href='#SkPaint_TextEncoding'>TextEncoding</a> is set to <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04004065
4066### Constants
4067
Cary Clark682c58d2018-05-16 07:07:07 -04004068<table style='border-collapse: collapse; width: 62.5em'>
4069 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4070<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4071<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4072 <tr style='background-color: #f0f0f0; '>
4073 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
4074 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4075 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4076uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04004077 </tr>
4078 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004079 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
4080 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4081 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4082uses two byte words to represent most of Unicode</td>
4083 </tr>
4084 <tr style='background-color: #f0f0f0; '>
4085 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
4086 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4087 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4088uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04004089 </tr>
4090 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004091 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
4092 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4093 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4094uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04004095 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004096</table>
Cary Clark12799e12017-07-28 15:18:29 -04004097
4098### Example
4099
Cary Clarka560c472017-11-27 10:44:06 -05004100<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4101Second line is encoded in UTF-16.
4102Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04004103Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05004104</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004105
Cary Clark682c58d2018-05-16 07:07:07 -04004106<a name='SkPaint_getTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004107
4108---
Cary Clark12799e12017-07-28 15:18:29 -04004109
Cary Clark682c58d2018-05-16 07:07:07 -04004110<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4111<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004112</pre>
4113
Cary Clark682c58d2018-05-16 07:07:07 -04004114Returns <a href='#Text_Encoding'>Text Encoding</a>.
4115<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004116
4117### Return Value
4118
Cary Clark682c58d2018-05-16 07:07:07 -04004119one of: <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>, <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>, <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>, or
4120<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004121
4122### Example
4123
skia-bookmaker525f9a92018-05-03 06:27:39 +00004124<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004125
4126#### Example Output
4127
4128~~~~
4129kUTF8_TextEncoding == text encoding
4130kGlyphID_TextEncoding == text encoding
4131~~~~
4132
4133</fiddle-embed></div>
4134
Cary Clark682c58d2018-05-16 07:07:07 -04004135<a name='SkPaint_setTextEncoding'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004136
4137---
Cary Clark12799e12017-07-28 15:18:29 -04004138
Cary Clark682c58d2018-05-16 07:07:07 -04004139<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4140void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004141</pre>
4142
Cary Clark682c58d2018-05-16 07:07:07 -04004143Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4144<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4145Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004146
4147### Parameters
4148
Cary Clark682c58d2018-05-16 07:07:07 -04004149<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4150 <td>one of: <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>, <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>, <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>, or
4151<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004152 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004153#
4154
Cary Clark12799e12017-07-28 15:18:29 -04004155</table>
4156
4157### Example
4158
Cary Clark75fd4492018-06-20 12:45:16 -04004159<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004160
4161#### Example Output
4162
4163~~~~
41644 != text encoding
4165~~~~
4166
4167</fiddle-embed></div>
4168
Cary Clarka90ea222018-10-16 10:30:28 -04004169<a name='Font_Metrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004170
Cary Clarka90ea222018-10-16 10:30:28 -04004171---
Cary Clark08895c42018-02-01 09:37:32 -05004172
Cary Clark682c58d2018-05-16 07:07:07 -04004173<a href='#Font_Metrics'>Font Metrics</a> describe dimensions common to the <a href='undocumented#Glyph'>Glyphs</a> in <a href='undocumented#Typeface'>Typeface</a>.
4174The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4175<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004176
Cary Clark682c58d2018-05-16 07:07:07 -04004177<a href='undocumented#Font'>Font</a> dimensions specify the anchor to the left of the glyph at baseline as the origin.
Cary Clark12799e12017-07-28 15:18:29 -04004178X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4179are positive.
4180Y-axis values above the baseline are negative, and below the baseline are positive.
4181
4182### Example
4183
Ben Wagnere5806492017-11-09 12:08:31 -05004184<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004185
Cary Clark61313f32018-10-08 14:57:48 -04004186<a name='SkPaint_FontMetrics'></a>
Cary Clark682c58d2018-05-16 07:07:07 -04004187
Cary Clarka90ea222018-10-16 10:30:28 -04004188---
4189
Cary Clarka560c472017-11-27 10:44:06 -05004190<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004191 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4192 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004193 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4194 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4195 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4196 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004197 };
Cary Clark12799e12017-07-28 15:18:29 -04004198
Cary Clarka90ea222018-10-16 10:30:28 -04004199 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4200 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4201 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4202 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4203 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4204 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4205 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4206 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4207 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4208 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4209 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4210 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4211 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4212 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4213 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4214 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004215
Cary Clark61313f32018-10-08 14:57:48 -04004216 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4217 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
4218 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const;
4219 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const;
Cary Clark186d08f2018-04-03 08:43:27 -04004220 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004221</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004222
Cary Clark682c58d2018-05-16 07:07:07 -04004223<a href='#SkPaint_FontMetrics'>FontMetrics</a> is filled out by <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>. <a href='#SkPaint_FontMetrics'>FontMetrics</a> contents reflect the values
4224computed by <a href='undocumented#Font_Manager'>Font Manager</a> using <a href='undocumented#Typeface'>Typeface</a>. Values are set to zero if they are
Cary Clark154beea2017-10-26 07:58:48 -04004225not available.
4226
Cary Clark5538c132018-06-14 12:28:14 -04004227All vertical values are relative to the baseline, on a y-axis pointing down.
4228Zero is on the baseline, negative values are above the baseline, and positive
4229values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004230
Cary Clark682c58d2018-05-16 07:07:07 -04004231<a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> and <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> have a bit set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a> if their values
Cary Clark154beea2017-10-26 07:58:48 -04004232are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004233
Cary Clark682c58d2018-05-16 07:07:07 -04004234<a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> and <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> have a bit set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a> if their values
Cary Clark154beea2017-10-26 07:58:48 -04004235are valid, since their value may be zero.
4236
Cary Clarka90ea222018-10-16 10:30:28 -04004237<a name='SkPaint_FontMetrics_FontMetricsFlags'></a>
4238
4239---
Cary Clark12799e12017-07-28 15:18:29 -04004240
Cary Clarka560c472017-11-27 10:44:06 -05004241<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004242 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
Cary Clark61313f32018-10-08 14:57:48 -04004243 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid_Flag</a> = 1 << 0,
4244 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid_Flag</a> = 1 << 1,
4245 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid_Flag</a> = 1 << 2,
4246 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid_Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004247 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004248</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004249
Cary Clark682c58d2018-05-16 07:07:07 -04004250<a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> are set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a> when underline and strikeout metrics are valid;
Cary Clark154beea2017-10-26 07:58:48 -04004251the underline or strikeout metric may be valid and zero.
4252Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4253
Cary Clark12799e12017-07-28 15:18:29 -04004254### Constants
4255
Cary Clark682c58d2018-05-16 07:07:07 -04004256<table style='border-collapse: collapse; width: 62.5em'>
4257 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4258<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4259<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4260 <tr style='background-color: #f0f0f0; '>
4261 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'><code>SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag</code></a></td>
4262 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4263 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4264set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004265 </tr>
4266 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'><code>SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag</code></a></td>
4268 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4269 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4270set if fUnderlinePosition is valid</td>
4271 </tr>
4272 <tr style='background-color: #f0f0f0; '>
4273 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'><code>SkPaint::FontMetrics::kStrikeoutThicknessIsValid_Flag</code></a></td>
4274 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4275 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4276set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004277 </tr>
4278 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004279 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'><code>SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag</code></a></td>
4280 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4281 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4282set if fStrikeoutPosition is valid</td>
4283 </tr>
Cary Clark61313f32018-10-08 14:57:48 -04004284</table><table style='border-collapse: collapse; width: 62.5em'>
Cary Clark682c58d2018-05-16 07:07:07 -04004285
Cary Clark682c58d2018-05-16 07:07:07 -04004286 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
Cary Clark61313f32018-10-08 14:57:48 -04004287<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Member</th>
Cary Clark682c58d2018-05-16 07:07:07 -04004288<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4289 <tr style='background-color: #f0f0f0; '>
4290 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
4291 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
4292 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4293is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004294 </tr>
4295 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004296 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4297 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
4298 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004299Greatest extent above the baseline for any glyph.
4300Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004301</td>
4302 </tr>
4303 <tr style='background-color: #f0f0f0; '>
4304 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4305 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
4306 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004307Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004308Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004309</td>
4310 </tr>
4311 <tr>
4312 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4313 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
4314 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004315Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004316Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004317</td>
4318 </tr>
4319 <tr style='background-color: #f0f0f0; '>
4320 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4321 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
4322 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004323Greatest extent below the baseline for any glyph.
4324Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004325</td>
4326 </tr>
4327 <tr>
4328 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4329 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
4330 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004331Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004332Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004333</td>
4334 </tr>
4335 <tr style='background-color: #f0f0f0; '>
4336 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4337 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
4338 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004339Average character width, if it is available.
4340Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004341</td>
4342 </tr>
4343 <tr>
4344 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4345 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
4346 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4347maximum character width</td>
4348 </tr>
4349 <tr style='background-color: #f0f0f0; '>
4350 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4351 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
4352 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004353Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004354Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004355</td>
4356 </tr>
4357 <tr>
4358 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4359 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
4360 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04004361Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004362Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04004363</td>
4364 </tr>
4365 <tr style='background-color: #f0f0f0; '>
4366 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4367 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
4368 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004369May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004370</td>
4371 </tr>
4372 <tr>
4373 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4374 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
4375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04004376May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04004377</td>
4378 </tr>
4379 <tr style='background-color: #f0f0f0; '>
4380 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4381 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
4382 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4383If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4384If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
4385</td>
4386 </tr>
4387 <tr>
4388 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4389 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
4390 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004391Position of the top of the underline stroke relative to the baseline.
4392Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004393
Cary Clark682c58d2018-05-16 07:07:07 -04004394If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4395If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
4396</td>
4397 </tr>
4398 <tr style='background-color: #f0f0f0; '>
4399 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4400 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
4401 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4402If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4403If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
4404</td>
4405 </tr>
4406 <tr>
4407 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
4408 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
4409 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05004410Position of the bottom of the strikeout stroke relative to the baseline.
4411Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004412
Cary Clark682c58d2018-05-16 07:07:07 -04004413If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
4414If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
4415</td>
4416 </tr>
4417</table>
Cary Clark12799e12017-07-28 15:18:29 -04004418
Cary Clark682c58d2018-05-16 07:07:07 -04004419<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004420
4421---
Cary Clark12799e12017-07-28 15:18:29 -04004422
Cary Clark682c58d2018-05-16 07:07:07 -04004423<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4424bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004425</pre>
4426
Cary Clark80247e52018-07-11 16:18:41 -04004427Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004428<a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a> to that value. If the underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a> is not valid,
4429return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004430
4431### Parameters
4432
Cary Clark682c58d2018-05-16 07:07:07 -04004433<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
4434 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004435 </tr>
4436</table>
4437
4438### Return Value
4439
4440true if font specifies underline width
4441
Cary Clark682c58d2018-05-16 07:07:07 -04004442<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004443
4444---
Cary Clark12799e12017-07-28 15:18:29 -04004445
Cary Clark682c58d2018-05-16 07:07:07 -04004446<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4447bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004448</pre>
4449
Cary Clark80247e52018-07-11 16:18:41 -04004450Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004451<a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a> to that value. If the underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a> is not valid,
4452return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004453
4454### Parameters
4455
Cary Clark682c58d2018-05-16 07:07:07 -04004456<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
4457 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004458 </tr>
4459</table>
4460
4461### Return Value
4462
Cary Clark682c58d2018-05-16 07:07:07 -04004463true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004464
Cary Clark682c58d2018-05-16 07:07:07 -04004465<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004466
4467---
Cary Clark12799e12017-07-28 15:18:29 -04004468
Cary Clark682c58d2018-05-16 07:07:07 -04004469<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4470bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04004471</pre>
4472
Cary Clark80247e52018-07-11 16:18:41 -04004473Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004474<a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a> to that value. If the underline <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a> is not valid,
4475return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004476
4477### Parameters
4478
Cary Clark682c58d2018-05-16 07:07:07 -04004479<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
4480 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04004481 </tr>
4482</table>
4483
4484### Return Value
4485
4486true if font specifies strikeout width
4487
Cary Clark682c58d2018-05-16 07:07:07 -04004488<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004489
4490---
Cary Clark12799e12017-07-28 15:18:29 -04004491
Cary Clark682c58d2018-05-16 07:07:07 -04004492<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4493bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04004494</pre>
4495
Cary Clark80247e52018-07-11 16:18:41 -04004496Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04004497<a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a> to that value. If the underline <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a> is not valid,
4498return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004499
4500### Parameters
4501
Cary Clark682c58d2018-05-16 07:07:07 -04004502<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
4503 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004504 </tr>
4505</table>
4506
4507### Return Value
4508
Cary Clark682c58d2018-05-16 07:07:07 -04004509true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004510
Cary Clark682c58d2018-05-16 07:07:07 -04004511<a name='SkPaint_getFontMetrics'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004512
4513---
Cary Clark12799e12017-07-28 15:18:29 -04004514
Cary Clark682c58d2018-05-16 07:07:07 -04004515<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4516<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>(<a href='#SkPaint_FontMetrics'>FontMetrics</a>* metrics, <a href='undocumented#SkScalar'>SkScalar</a> scale = 0) const
Cary Clark12799e12017-07-28 15:18:29 -04004517</pre>
4518
Cary Clark682c58d2018-05-16 07:07:07 -04004519Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
4520The return value is the recommended spacing between lines: the sum of <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>
Cary Clark12799e12017-07-28 15:18:29 -04004521descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004522If <a href='#SkPaint_getFontMetrics_metrics'>metrics</a> is not nullptr, <a href='#Font_Metrics'>Font Metrics</a> is copied to <a href='#SkPaint_getFontMetrics_metrics'>metrics</a>.
4523Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4524dimensions 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>,
4525<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
4526Results can be additionally scaled by <a href='#SkPaint_getFontMetrics_scale'>scale</a>; a <a href='#SkPaint_getFontMetrics_scale'>scale</a> of zero
Cary Clark12799e12017-07-28 15:18:29 -04004527is ignored.
4528
4529### Parameters
4530
Cary Clark682c58d2018-05-16 07:07:07 -04004531<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
4532 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
4533 </tr>
4534 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
4535 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04004536 </tr>
4537</table>
4538
4539### Return Value
4540
4541recommended spacing between lines
4542
4543### Example
4544
4545<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4546
4547### See Also
4548
Cary Clark682c58d2018-05-16 07:07:07 -04004549<a href='#Text_Size'>Text Size</a> <a href='undocumented#Typeface'>Typeface</a> <a href='#Typeface_Methods'>Typeface Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04004550
Cary Clark682c58d2018-05-16 07:07:07 -04004551<a name='SkPaint_getFontSpacing'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004552
4553---
Cary Clark12799e12017-07-28 15:18:29 -04004554
Cary Clark682c58d2018-05-16 07:07:07 -04004555<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4556<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004557</pre>
4558
4559Returns the recommended spacing between lines: the sum of metrics
4560descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04004561Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
4562dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
4563Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004564
4565### Return Value
4566
4567recommended spacing between lines
4568
4569### Example
4570
4571<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4572
4573#### Example Output
4574
4575~~~~
4576textSize: 12 fontSpacing: 13.9688
4577textSize: 18 fontSpacing: 20.9531
4578textSize: 24 fontSpacing: 27.9375
4579textSize: 32 fontSpacing: 37.25
4580~~~~
4581
4582</fiddle-embed></div>
4583
Cary Clark682c58d2018-05-16 07:07:07 -04004584<a name='SkPaint_getFontBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004585
4586---
Cary Clark12799e12017-07-28 15:18:29 -04004587
Cary Clark682c58d2018-05-16 07:07:07 -04004588<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4589<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004590</pre>
4591
Cary Clark682c58d2018-05-16 07:07:07 -04004592Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
4593Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
4594ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
4595and <a href='#Text_Skew_X'>Text Skew X</a>, but not <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004596
Cary Clark682c58d2018-05-16 07:07:07 -04004597If <a href='#Text_Size'>Text Size</a> is large, <a href='#Text_Scale_X'>Text Scale X</a> is one, and <a href='#Text_Skew_X'>Text Skew X</a> is zero,
4598returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
4599<a href='#SkPaint_FontMetrics_fTop'>FontMetrics::fTop</a>, <a href='#SkPaint_FontMetrics_fXMax'>FontMetrics::fXMax</a>, <a href='#SkPaint_FontMetrics_fBottom'>FontMetrics::fBottom</a> }.
Cary Clark12799e12017-07-28 15:18:29 -04004600
4601### Return Value
4602
Cary Clark682c58d2018-05-16 07:07:07 -04004603union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004604
4605### Example
4606
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004607<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04004608
4609#### Example Output
4610
4611~~~~
4612metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4613font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4614~~~~
4615
4616</fiddle-embed></div>
4617
Cary Clark682c58d2018-05-16 07:07:07 -04004618<a name='SkPaint_textToGlyphs'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004619
4620---
Cary Clark12799e12017-07-28 15:18:29 -04004621
Cary Clark682c58d2018-05-16 07:07:07 -04004622<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4623int <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>(const void* text, size_t byteLength, <a href='undocumented#SkGlyphID'>SkGlyphID</a> glyphs[]) const
Cary Clark12799e12017-07-28 15:18:29 -04004624</pre>
4625
Cary Clark682c58d2018-05-16 07:07:07 -04004626Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
4627Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
4628<a href='#Text_Encoding'>Text Encoding</a> specifies how <a href='#SkPaint_textToGlyphs_text'>text</a> represents characters or <a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a>.
4629<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004630
Cary Clark682c58d2018-05-16 07:07:07 -04004631Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004632
Cary Clark682c58d2018-05-16 07:07:07 -04004633If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
4634If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004635
Cary Clark682c58d2018-05-16 07:07:07 -04004636If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
4637<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004638
4639### Parameters
4640
Cary Clark682c58d2018-05-16 07:07:07 -04004641<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
4642 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4643 </tr>
4644 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
4645 <td>length of character storage in bytes</td>
4646 </tr>
4647 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
4648 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004649 </tr>
4650</table>
4651
4652### Return Value
4653
Cary Clark682c58d2018-05-16 07:07:07 -04004654number 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 -04004655
4656### Example
4657
4658<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4659
Cary Clark682c58d2018-05-16 07:07:07 -04004660<a name='SkPaint_countText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004661
4662---
Cary Clark12799e12017-07-28 15:18:29 -04004663
Cary Clark682c58d2018-05-16 07:07:07 -04004664<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4665int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004666</pre>
4667
Cary Clark682c58d2018-05-16 07:07:07 -04004668Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
4669Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
4670Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004671
4672### Parameters
4673
Cary Clark682c58d2018-05-16 07:07:07 -04004674<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
4675 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
4676 </tr>
4677 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
4678 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04004679 </tr>
4680</table>
4681
4682### Return Value
4683
Cary Clark682c58d2018-05-16 07:07:07 -04004684number 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 -04004685
4686### Example
4687
Cary Clarkf9603982018-07-17 08:20:27 -04004688<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04004689
4690#### Example Output
4691
4692~~~~
4693count = 5
4694~~~~
4695
4696</fiddle-embed></div>
4697
Cary Clark682c58d2018-05-16 07:07:07 -04004698<a name='SkPaint_containsText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004699
4700---
Cary Clark12799e12017-07-28 15:18:29 -04004701
Cary Clark682c58d2018-05-16 07:07:07 -04004702<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4703bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04004704</pre>
4705
Cary Clark682c58d2018-05-16 07:07:07 -04004706Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
4707Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
4708<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004709
Cary Clark682c58d2018-05-16 07:07:07 -04004710If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
4711returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
4712does not check to see if <a href='#SkPaint_containsText_text'>text</a> contains valid glyph indices for <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004713
Cary Clark682c58d2018-05-16 07:07:07 -04004714Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004715
4716### Parameters
4717
Cary Clark682c58d2018-05-16 07:07:07 -04004718<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
4719 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
4720 </tr>
4721 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
4722 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004723 </tr>
4724</table>
4725
4726### Return Value
4727
Cary Clark682c58d2018-05-16 07:07:07 -04004728true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004729
Ruiqi Mao94d57c42018-07-02 15:20:10 -04004730<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05004731corresponding to the Unicode surrogate code point.
4732</div>
Cary Clark12799e12017-07-28 15:18:29 -04004733
4734#### Example Output
4735
4736~~~~
47370x00b0 == has char
47380xd800 != has char
4739~~~~
4740
Cary Clark12799e12017-07-28 15:18:29 -04004741### Example
4742
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004743<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href='#SkPaint_containsText'>containsText</a> returns true that glyph index is greater than zero, not
Cary Clark682c58d2018-05-16 07:07:07 -04004744that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004745</div>
Cary Clark12799e12017-07-28 15:18:29 -04004746
4747#### Example Output
4748
4749~~~~
47500x01ff == has glyph
47510x0000 != has glyph
47520xffff == has glyph
4753~~~~
4754
4755</fiddle-embed></div>
4756
4757### See Also
4758
Cary Clark682c58d2018-05-16 07:07:07 -04004759<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004760
Cary Clark682c58d2018-05-16 07:07:07 -04004761<a name='SkPaint_glyphsToUnichars'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004762
4763---
Cary Clark12799e12017-07-28 15:18:29 -04004764
Cary Clark682c58d2018-05-16 07:07:07 -04004765<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4766void <a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a>(const <a href='undocumented#SkGlyphID'>SkGlyphID</a> glyphs[], int count, <a href='undocumented#SkUnichar'>SkUnichar</a> text[]) const
Cary Clark12799e12017-07-28 15:18:29 -04004767</pre>
4768
Cary Clark682c58d2018-05-16 07:07:07 -04004769Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
4770<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
4771Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
4772by <a href='#Text_Encoding'>Text Encoding</a>; the <a href='#SkPaint_glyphsToUnichars_text'>text</a> values returned are equivalent to <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004773
Cary Clark682c58d2018-05-16 07:07:07 -04004774Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004775
4776### Parameters
4777
Cary Clark682c58d2018-05-16 07:07:07 -04004778<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
4779 <td>array of indices into font</td>
4780 </tr>
4781 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
4782 <td>length of glyph array</td>
4783 </tr>
4784 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
4785 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04004786 </tr>
4787</table>
4788
4789### Example
4790
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004791<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><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 points.
Cary Clark1a8d7622018-03-05 13:26:16 -05004792</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004793
Cary Clarka90ea222018-10-16 10:30:28 -04004794<a name='Measure_Text'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004795
Cary Clark682c58d2018-05-16 07:07:07 -04004796<a name='SkPaint_measureText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004797
4798---
Cary Clark12799e12017-07-28 15:18:29 -04004799
Cary Clark682c58d2018-05-16 07:07:07 -04004800<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4801<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* text, size_t length, <a href='SkRect_Reference#SkRect'>SkRect</a>* bounds) const
Cary Clark12799e12017-07-28 15:18:29 -04004802</pre>
4803
Cary Clark682c58d2018-05-16 07:07:07 -04004804Returns the advance width of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
4805and the height of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
4806The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
4807Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_measureText_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4808and <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
4809<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
4810Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
4811The 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 -04004812
4813### Parameters
4814
Cary Clark682c58d2018-05-16 07:07:07 -04004815<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
4816 <td>character codes or glyph indices to be measured</td>
4817 </tr>
4818 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
4819 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
4820 </tr>
4821 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
4822 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004823 </tr>
4824</table>
4825
4826### Return Value
4827
4828advance width or height
4829
4830### Example
4831
Cary Clark83647062018-07-18 16:21:51 -04004832<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004833
Cary Clark682c58d2018-05-16 07:07:07 -04004834<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05004835
Cary Clarka90ea222018-10-16 10:30:28 -04004836---
4837
Cary Clark682c58d2018-05-16 07:07:07 -04004838<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4839<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_measureText'>measureText</a>(const void* text, size_t length) const
Cary Clark12799e12017-07-28 15:18:29 -04004840</pre>
4841
Cary Clark682c58d2018-05-16 07:07:07 -04004842Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
4843and the height of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
4844The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
4845Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_measureText_2_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4846and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4847Does not scale the advance or bounds by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004848
4849### Parameters
4850
Cary Clark682c58d2018-05-16 07:07:07 -04004851<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
4852 <td>character codes or glyph indices to be measured</td>
4853 </tr>
4854 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
4855 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004856 </tr>
4857</table>
4858
4859### Return Value
4860
4861advance width or height
4862
4863### Example
4864
4865<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4866
4867#### Example Output
4868
4869~~~~
4870default width = 5
4871double width = 10
4872~~~~
4873
4874</fiddle-embed></div>
4875
Cary Clark682c58d2018-05-16 07:07:07 -04004876<a name='SkPaint_breakText'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004877
4878---
Cary Clark12799e12017-07-28 15:18:29 -04004879
Cary Clark682c58d2018-05-16 07:07:07 -04004880<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4881size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
4882 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004883</pre>
4884
Cary Clark682c58d2018-05-16 07:07:07 -04004885Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4886If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, the <a href='#SkPaint_breakText_text'>text</a> fragment fits if its advance width is less than or
4887equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4888If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, the <a href='#SkPaint_breakText_text'>text</a> fragment fits if its advance height is less than or
4889equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4890Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
4891Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
4892Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_breakText_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4893and <a href='#Text_Size'>Text Size</a> to scale the metrics.
4894Does not scale the advance or bounds by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004895
4896### Parameters
4897
Cary Clark682c58d2018-05-16 07:07:07 -04004898<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
4899 <td>character codes or glyph indices to be measured</td>
4900 </tr>
4901 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
4902 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
4903 </tr>
4904 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
4905 <td>advance limit; <a href='#SkPaint_breakText_text'>text</a> is measured while advance is less than <a href='#SkPaint_breakText_maxWidth'>maxWidth</a></td>
4906 </tr>
4907 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
4908 <td>returns the width of the <a href='#SkPaint_breakText_text'>text</a> less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004909 </tr>
4910</table>
4911
4912### Return Value
4913
Cary Clark682c58d2018-05-16 07:07:07 -04004914bytes of <a href='#SkPaint_breakText_text'>text</a> that fit, always less than or equal to <a href='#SkPaint_breakText_length'>length</a>
Cary Clark12799e12017-07-28 15:18:29 -04004915
4916### Example
4917
Cary Clark682c58d2018-05-16 07:07:07 -04004918<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
4919<a href='undocumented#Line'>Line</a> under "" shows measured width after breaking <a href='#SkPaint_breakText_text'>text</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05004920</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004921
Cary Clark682c58d2018-05-16 07:07:07 -04004922<a name='SkPaint_getTextWidths'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004923
4924---
Cary Clark12799e12017-07-28 15:18:29 -04004925
Cary Clark682c58d2018-05-16 07:07:07 -04004926<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4927int <a href='#SkPaint_getTextWidths'>getTextWidths</a>(const void* text, 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 -04004928</pre>
4929
Cary Clark682c58d2018-05-16 07:07:07 -04004930Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
4931the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
4932Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
4933If <a href='#SkPaint_getTextWidths_widths'>widths</a> is not nullptr, <a href='#SkPaint_getTextWidths_widths'>widths</a> must be an array of glyph count entries.
4934if <a href='#SkPaint_getTextWidths_bounds'>bounds</a> is not nullptr, <a href='#SkPaint_getTextWidths_bounds'>bounds</a> must be an array of glyph count entries.
4935If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the horizontal advance.
4936If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the vertical advance.
4937Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getTextWidths_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the font metrics,
4938and <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>.
4939Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
4940Does include <a href='#Fake_Bold'>Fake Bold</a> and <a href='undocumented#Path_Effect'>Path Effect</a> in the <a href='#SkPaint_getTextWidths_bounds'>bounds</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004941
4942### Parameters
4943
Cary Clark682c58d2018-05-16 07:07:07 -04004944<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
4945 <td>character codes or glyph indices to be measured</td>
4946 </tr>
4947 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
4948 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
4949 </tr>
4950 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
4951 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
4952 </tr>
4953 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
4954 <td>returns <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph relative to (0, 0); may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04004955 </tr>
4956</table>
4957
4958### Return Value
4959
Cary Clark682c58d2018-05-16 07:07:07 -04004960glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004961
4962### Example
4963
Cary Clarkf9603982018-07-17 08:20:27 -04004964<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.
Cary Clark682c58d2018-05-16 07:07:07 -04004965The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05004966</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004967
Cary Clarka90ea222018-10-16 10:30:28 -04004968<a name='Text_Path'></a>
Cary Clark08895c42018-02-01 09:37:32 -05004969
Cary Clark682c58d2018-05-16 07:07:07 -04004970<a href='#Text_Path'>Text Path</a> describes the geometry of <a href='undocumented#Glyph'>Glyphs</a> used to draw text.
Cary Clark12799e12017-07-28 15:18:29 -04004971
Cary Clark682c58d2018-05-16 07:07:07 -04004972<a name='SkPaint_getTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04004973
4974---
Cary Clark12799e12017-07-28 15:18:29 -04004975
Cary Clark682c58d2018-05-16 07:07:07 -04004976<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4977void <a href='#SkPaint_getTextPath'>getTextPath</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y, <a href='SkPath_Reference#SkPath'>SkPath</a>* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004978</pre>
4979
Cary Clark682c58d2018-05-16 07:07:07 -04004980Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
4981Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getTextPath_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
4982and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
4983All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
4984Uses <a href='#SkPaint_getTextPath_x'>x</a>, <a href='#SkPaint_getTextPath_y'>y</a>, and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getTextPath_path'>path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004985
4986### Parameters
4987
Cary Clark682c58d2018-05-16 07:07:07 -04004988<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
4989 <td>character codes or glyph indices</td>
4990 </tr>
4991 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
4992 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
4993 </tr>
4994 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004995 <td><a href='#SkPaint_getTextPath_x'>x</a>-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004996 </tr>
4997 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04004998 <td><a href='#SkPaint_getTextPath_y'>y</a>-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04004999 </tr>
5000 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
5001 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005002 </tr>
5003</table>
5004
5005### Example
5006
Cary Clark682c58d2018-05-16 07:07:07 -04005007<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
Cary Clark1a8d7622018-03-05 13:26:16 -05005008the offset location. The result is rendered with one draw call.
5009</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005010
Cary Clark682c58d2018-05-16 07:07:07 -04005011<a name='SkPaint_getPosTextPath'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005012
5013---
Cary Clark12799e12017-07-28 15:18:29 -04005014
Cary Clark682c58d2018-05-16 07:07:07 -04005015<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5016void <a href='#SkPaint_getPosTextPath'>getPosTextPath</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[], <a href='SkPath_Reference#SkPath'>SkPath</a>* path) const
Cary Clark12799e12017-07-28 15:18:29 -04005017</pre>
5018
Cary Clark682c58d2018-05-16 07:07:07 -04005019Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
5020Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getPosTextPath_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5021and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5022All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
5023Uses <a href='#SkPaint_getPosTextPath_pos'>pos</a> array and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getPosTextPath_path'>path</a>.
5024<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04005025
5026### Parameters
5027
Cary Clark682c58d2018-05-16 07:07:07 -04005028<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
5029 <td>character codes or glyph indices</td>
5030 </tr>
5031 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
5032 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
5033 </tr>
5034 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
5035 <td>positions of each glyph</td>
5036 </tr>
5037 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
5038 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005039 </tr>
5040</table>
5041
5042### Example
5043
Cary Clark682c58d2018-05-16 07:07:07 -04005044<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 -05005045</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005046
Cary Clarka90ea222018-10-16 10:30:28 -04005047<a name='Text_Intercepts'></a>
Cary Clark08895c42018-02-01 09:37:32 -05005048
Cary Clark682c58d2018-05-16 07:07:07 -04005049<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
5050of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04005051underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005052
Cary Clark682c58d2018-05-16 07:07:07 -04005053<a name='SkPaint_getTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005054
5055---
Cary Clark12799e12017-07-28 15:18:29 -04005056
Cary Clark682c58d2018-05-16 07:07:07 -04005057<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5058int <a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> x, <a href='undocumented#SkScalar'>SkScalar</a> y,
5059 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005060</pre>
5061
Cary Clark682c58d2018-05-16 07:07:07 -04005062Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
5063<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
5064The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005065the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005066Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getTextIntercepts_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5067and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5068Uses <a href='#SkPaint_getTextIntercepts_x'>x</a>, <a href='#SkPaint_getTextIntercepts_y'>y</a>, and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005069
Cary Clark682c58d2018-05-16 07:07:07 -04005070Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005071
Cary Clark682c58d2018-05-16 07:07:07 -04005072<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005073
5074### Parameters
5075
Cary Clark682c58d2018-05-16 07:07:07 -04005076<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
5077 <td>character codes or glyph indices</td>
5078 </tr>
5079 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
5080 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5081 </tr>
5082 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005083 <td><a href='#SkPaint_getTextIntercepts_x'>x</a>-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005084 </tr>
5085 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005086 <td><a href='#SkPaint_getTextIntercepts_y'>y</a>-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005087 </tr>
5088 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5089 <td>lower and upper line parallel to the advance</td>
5090 </tr>
5091 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5092 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005093 </tr>
5094</table>
5095
5096### Return Value
5097
5098number of intersections; may be zero
5099
5100### Example
5101
Cary Clark1a8d7622018-03-05 13:26:16 -05005102<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
5103</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005104
Cary Clark682c58d2018-05-16 07:07:07 -04005105<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005106
5107---
Cary Clark12799e12017-07-28 15:18:29 -04005108
Cary Clark682c58d2018-05-16 07:07:07 -04005109<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5110int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
5111 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005112</pre>
5113
Cary Clark682c58d2018-05-16 07:07:07 -04005114Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5115<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5116The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005117the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005118Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getPosTextIntercepts_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5119and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5120Uses <a href='#SkPaint_getPosTextIntercepts_pos'>pos</a> array and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005121
Cary Clark682c58d2018-05-16 07:07:07 -04005122Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005123
Cary Clark682c58d2018-05-16 07:07:07 -04005124<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005125
5126### Parameters
5127
Cary Clark682c58d2018-05-16 07:07:07 -04005128<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5129 <td>character codes or glyph indices</td>
5130 </tr>
5131 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5132 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5133 </tr>
5134 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5135 <td>positions of each glyph</td>
5136 </tr>
5137 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5138 <td>lower and upper line parallel to the advance</td>
5139 </tr>
5140 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5141 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005142 </tr>
5143</table>
5144
5145### Return Value
5146
Cary Clarka523d2d2017-08-30 08:58:10 -04005147number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005148
5149### Example
5150
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00005151<div><fiddle-embed name="98b2dfc552d0540a7c041fe7a2839bd7"><div><a href='undocumented#Text'>Text</a> intercepts draw on either side of, but not inside, <a href='undocumented#Glyph'>Glyphs</a> in a run.
Cary Clark1a8d7622018-03-05 13:26:16 -05005152</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005153
Cary Clark682c58d2018-05-16 07:07:07 -04005154<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005155
5156---
Cary Clark12799e12017-07-28 15:18:29 -04005157
Cary Clark682c58d2018-05-16 07:07:07 -04005158<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5159int <a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a>(const void* text, size_t length, const <a href='undocumented#SkScalar'>SkScalar</a> xpos[], <a href='undocumented#SkScalar'>SkScalar</a> constY,
5160 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005161</pre>
5162
Cary Clark682c58d2018-05-16 07:07:07 -04005163Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5164<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5165The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005166the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005167Uses <a href='#Text_Encoding'>Text Encoding</a> to decode <a href='#SkPaint_getPosTextHIntercepts_text'>text</a>, <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5168and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5169Uses <a href='#SkPaint_getPosTextHIntercepts_xpos'>xpos</a> array, <a href='#SkPaint_getPosTextHIntercepts_constY'>constY</a>, and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005170
Cary Clark682c58d2018-05-16 07:07:07 -04005171Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005172
Cary Clark682c58d2018-05-16 07:07:07 -04005173<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005174
5175### Parameters
5176
Cary Clark682c58d2018-05-16 07:07:07 -04005177<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5178 <td>character codes or glyph indices</td>
5179 </tr>
5180 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5181 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5182 </tr>
5183 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5184 <td>positions of each glyph in x</td>
5185 </tr>
5186 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5187 <td>position of each glyph in y</td>
5188 </tr>
5189 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5190 <td>lower and upper line parallel to the advance</td>
5191 </tr>
5192 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5193 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005194 </tr>
5195</table>
5196
5197### Return Value
5198
5199number of intersections; may be zero
5200
5201### Example
5202
Cary Clark80247e52018-07-11 16:18:41 -04005203<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href='undocumented#Text'>Text</a> intercepts do not take stroke thickness into consideration.
Cary Clark1a8d7622018-03-05 13:26:16 -05005204</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005205
Cary Clark682c58d2018-05-16 07:07:07 -04005206<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005207
5208---
Cary Clark12799e12017-07-28 15:18:29 -04005209
Cary Clark682c58d2018-05-16 07:07:07 -04005210<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkd2ca79c2018-08-10 13:09:13 -04005211int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='SkTextBlob_Reference#SkTextBlob'>SkTextBlob</a>* blob, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005212</pre>
5213
Cary Clark682c58d2018-05-16 07:07:07 -04005214Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5215<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
5216The return count is zero or a multiple of two, and is at most twice the number of <a href='undocumented#Glyph'>Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005217the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005218Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5219and <a href='#Text_Size'>Text Size</a>, <a href='#Fake_Bold'>Fake Bold</a>, and <a href='undocumented#Path_Effect'>Path Effect</a> to scale and modify the glyph paths.
5220Uses run array and <a href='#Text_Align'>Text Align</a> to position <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a>.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005221
Cary Clark682c58d2018-05-16 07:07:07 -04005222<a href='#Text_Encoding'>Text Encoding</a> must be set to <a href='#SkPaint_kGlyphID_TextEncoding'>SkPaint::kGlyphID TextEncoding</a>.
Cary Clark3cd22cc2017-12-01 11:49:58 -05005223
Cary Clark682c58d2018-05-16 07:07:07 -04005224Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005225
Cary Clark682c58d2018-05-16 07:07:07 -04005226<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005227
5228### Parameters
5229
Cary Clark682c58d2018-05-16 07:07:07 -04005230<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5231 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5232 </tr>
5233 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5234 <td>lower and upper line parallel to the advance</td>
5235 </tr>
5236 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5237 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005238 </tr>
5239</table>
5240
5241### Return Value
5242
5243number of intersections; may be zero
5244
5245### Example
5246
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005247<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005248
Cary Clark682c58d2018-05-16 07:07:07 -04005249<a name='SkPaint_nothingToDraw'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005250
5251---
Cary Clark12799e12017-07-28 15:18:29 -04005252
Cary Clark682c58d2018-05-16 07:07:07 -04005253<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5254bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005255</pre>
5256
Cary Clark682c58d2018-05-16 07:07:07 -04005257Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
5258otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005259
Cary Clark224c7002018-06-27 11:00:21 -04005260Returns true if, for example, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> combined with <a href='SkColor_Reference#Alpha'>Color Alpha</a> computes a
Cary Clark682c58d2018-05-16 07:07:07 -04005261new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005262
5263### Return Value
5264
Cary Clark682c58d2018-05-16 07:07:07 -04005265true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005266
5267### Example
5268
Cary Clark83647062018-07-18 16:21:51 -04005269<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04005270
5271#### Example Output
5272
5273~~~~
5274initial nothing to draw: false
5275blend dst nothing to draw: true
5276blend src over nothing to draw: false
5277alpha 0 nothing to draw: true
5278~~~~
5279
5280</fiddle-embed></div>
5281
Cary Clarka90ea222018-10-16 10:30:28 -04005282<a name='Fast_Bounds'></a>
Cary Clark08895c42018-02-01 09:37:32 -05005283
Cary Clark61313f32018-10-08 14:57:48 -04005284Private: To be made private.
5285
Cary Clark682c58d2018-05-16 07:07:07 -04005286<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
5287<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005288
Cary Clark682c58d2018-05-16 07:07:07 -04005289<a name='SkPaint_canComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005290
5291---
Cary Clark12799e12017-07-28 15:18:29 -04005292
Cary Clark682c58d2018-05-16 07:07:07 -04005293<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5294bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005295</pre>
5296
Cary Clark61313f32018-10-08 14:57:48 -04005297Private: (to be made private)
5298
Cary Clark682c58d2018-05-16 07:07:07 -04005299Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
5300to compute <a href='undocumented#Device'>Device</a> bounds of drawn geometry. For instance, <a href='#Paint'>Paint</a> with <a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04005301always returns false.
5302
5303### Return Value
5304
Cary Clark682c58d2018-05-16 07:07:07 -04005305true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005306
Cary Clark682c58d2018-05-16 07:07:07 -04005307<a name='SkPaint_computeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005308
5309---
Cary Clark12799e12017-07-28 15:18:29 -04005310
Cary Clark682c58d2018-05-16 07:07:07 -04005311<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5312const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastBounds'>computeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const
Cary Clark12799e12017-07-28 15:18:29 -04005313</pre>
5314
Cary Clark61313f32018-10-08 14:57:48 -04005315Private: (to be made private)
5316
Cary Clark682c58d2018-05-16 07:07:07 -04005317Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005318raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04005319effects in the paint (e.g. stroking). If needed, it uses the <a href='#SkPaint_computeFastBounds_storage'>storage</a>
Cary Clarkce101242017-09-01 15:51:02 -04005320parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04005321for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005322
Cary Clark682c58d2018-05-16 07:07:07 -04005323The returned <a href='SkRect_Reference#Rect'>Rect</a> will either be <a href='#SkPaint_computeFastBounds_orig'>orig</a> or <a href='#SkPaint_computeFastBounds_storage'>storage</a>, thus the caller
5324should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
5325use the returned value. It is legal for <a href='#SkPaint_computeFastBounds_orig'>orig</a> and <a href='#SkPaint_computeFastBounds_storage'>storage</a> to be the same
5326<a href='SkRect_Reference#Rect'>Rect</a>.
5327
Cary Clark61313f32018-10-08 14:57:48 -04005328Private: For example:
5329 if (!path.isInverseFillType() && paint.canComputeFastBounds()) {
5330 SkRect storage;
5331 if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &storage))) {
5332 return; // do not draw the path
5333 }
5334 }
5335 // draw the path
5336
Cary Clark12799e12017-07-28 15:18:29 -04005337### Parameters
5338
Cary Clark682c58d2018-05-16 07:07:07 -04005339<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5340 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5341 </tr>
5342 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5343 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005344 </tr>
5345</table>
5346
5347### Return Value
5348
5349fast computed bounds
5350
Cary Clark682c58d2018-05-16 07:07:07 -04005351<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005352
5353---
Cary Clark12799e12017-07-28 15:18:29 -04005354
Cary Clark682c58d2018-05-16 07:07:07 -04005355<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5356const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage) const
Cary Clark12799e12017-07-28 15:18:29 -04005357</pre>
5358
Cary Clark61313f32018-10-08 14:57:48 -04005359Private: (to be made private)
5360
Cary Clark12799e12017-07-28 15:18:29 -04005361### Parameters
5362
Cary Clark682c58d2018-05-16 07:07:07 -04005363<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
5364 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5365 </tr>
5366 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
5367 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04005368 </tr>
5369</table>
5370
5371### Return Value
5372
5373fast computed bounds
5374
Cary Clark682c58d2018-05-16 07:07:07 -04005375<a name='SkPaint_doComputeFastBounds'></a>
Cary Clarka90ea222018-10-16 10:30:28 -04005376
5377---
Cary Clark12799e12017-07-28 15:18:29 -04005378
Cary Clark682c58d2018-05-16 07:07:07 -04005379<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5380const <a href='SkRect_Reference#SkRect'>SkRect</a>& <a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a>(const <a href='SkRect_Reference#SkRect'>SkRect</a>& orig, <a href='SkRect_Reference#SkRect'>SkRect</a>* storage, <a href='#SkPaint_Style'>Style</a> style) const
Cary Clark12799e12017-07-28 15:18:29 -04005381</pre>
5382
Cary Clark61313f32018-10-08 14:57:48 -04005383Private: (to be made private)
5384
Cary Clark682c58d2018-05-16 07:07:07 -04005385Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
5386account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
5387altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005388
5389### Parameters
5390
Cary Clark682c58d2018-05-16 07:07:07 -04005391<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
5392 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
5393 </tr>
5394 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
5395 <td>computed bounds of geometry</td>
5396 </tr>
5397 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
5398 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005399 </tr>
5400</table>
5401
5402### Return Value
5403
5404fast computed bounds
5405
Cary Clarka90ea222018-10-16 10:30:28 -04005406<a name='Utility'></a>
Cary Clark78de7512018-02-07 07:27:09 -05005407