blob: a4c62dbc576463770bd7b3813e7b965eceacedc3 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
Cary Clark682c58d2018-05-16 07:07:07 -04004# <a name='Paint'>Paint</a>
Cary Clarke4aa3712017-09-15 02:56:12 -04005
Cary Clark682c58d2018-05-16 07:07:07 -04006# <a name='SkPaint'>Class SkPaint</a>
7<a href='#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='#Paint'>Paint</a> collects all
8options 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 -04009
Cary Clark7cfcbca2018-01-04 16:11:51 -050010Various options apply to text, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -040011
12Some options may not be implemented on all platforms; in these cases, setting
Cary Clark682c58d2018-05-16 07:07:07 -040013the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040014functionality; for instance, text size is identical to matrix scale.
15
Cary Clark682c58d2018-05-16 07:07:07 -040016<a href='#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
17pipeline and multiple pipeline stages may be affected by a single <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040018
Cary Clark682c58d2018-05-16 07:07:07 -040019<a href='#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040020algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark682c58d2018-05-16 07:07:07 -040021<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 -040022
Cary Clark682c58d2018-05-16 07:07:07 -040023The 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 -040024to affect it. The implementation is free to defer computations associated with the
Cary Clark682c58d2018-05-16 07:07:07 -040025<a href='#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
Cary Clarkffb3d682018-05-17 12:17:28 -040026<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 -040027is set in <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040028
Cary Clark682c58d2018-05-16 07:07:07 -040029<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 -040030Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark682c58d2018-05-16 07:07:07 -040031<a href='undocumented#Shader'>Shader</a> attached to <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040032
Cary Clark682c58d2018-05-16 07:07:07 -040033## Overview
Cary Clark5081eed2018-01-22 07:55:48 -050034
Cary Clark682c58d2018-05-16 07:07:07 -040035<table style='border-collapse: collapse; width: 62.5em'>
36 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
37<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
38 <tr style='background-color: #f0f0f0; '>
39 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constant'>Constants</a></td>
40 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>enum and enum class, and their const values</td>
41 </tr>
42 <tr>
43 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constructor'>Constructors</a></td>
44 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>functions that construct <a href='#SkPaint'>SkPaint</a></td>
45 </tr>
46 <tr style='background-color: #f0f0f0; '>
47 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Member_Function'>Functions</a></td>
48 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>global and class member functions</td>
49 </tr>
50 <tr>
51 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Operator'>Operators</a></td>
52 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>operator overloading methods</td>
53 </tr>
54 <tr style='background-color: #f0f0f0; '>
55 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Related_Function'>Related Functions</a></td>
56 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>similar member functions grouped together</td>
57 </tr>
58 <tr>
59 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Struct'>Struct Declarations</a></td>
60 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>embedded struct members</td>
61 </tr>
62</table>
Cary Clark12799e12017-07-28 15:18:29 -040063
Cary Clark12799e12017-07-28 15:18:29 -040064
Cary Clark682c58d2018-05-16 07:07:07 -040065## <a name='Related_Function'>Related Function</a>
Cary Clark12799e12017-07-28 15:18:29 -040066
Cary Clark12799e12017-07-28 15:18:29 -040067
Cary Clark682c58d2018-05-16 07:07:07 -040068SkPaint global, <code>struct</code>, and <code>class</code> related member functions share a topic.
69<table style='border-collapse: collapse; width: 62.5em'>
70 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
71<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
72 <tr style='background-color: #f0f0f0; '>
73 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Alpha_Methods'>Alpha Methods</a></td>
74 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkColor_Reference#Alpha'>Alpha</a></td>
75 </tr>
76 <tr>
Cary Clarkffb3d682018-05-17 12:17:28 -040077 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -040078 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximating coverage with transparency</td>
79 </tr>
80 <tr style='background-color: #f0f0f0; '>
81 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Automatic_Hinting'>Automatic Hinting</a></td>
82 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>always adjust glyph paths</td>
83 </tr>
84 <tr>
85 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Methods'>Blend Mode Methods</a></td>
86 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Blend_Mode'>Blend Mode</a></td>
87 </tr>
88 <tr style='background-color: #f0f0f0; '>
89 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Filter_Methods'>Color Filter Methods</a></td>
90 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Color_Filter'>Color Filter</a></td>
91 </tr>
92 <tr>
93 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Methods'>Color Methods</a></td>
94 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkColor_Reference#Color'>Color</a></td>
95 </tr>
96 <tr style='background-color: #f0f0f0; '>
97 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Device_Text'>Device Text</a></td>
98 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>increase precision of glyph position</td>
99 </tr>
100 <tr>
101 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Dither'>Dither</a></td>
102 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distributing color error</td>
103 </tr>
104 <tr style='background-color: #f0f0f0; '>
105 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Draw_Looper_Methods'>Draw Looper Methods</a></td>
106 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Draw_Looper'>Draw Looper</a></td>
107 </tr>
108 <tr>
109 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fake_Bold'>Fake Bold</a></td>
110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximate font styles</td>
111 </tr>
112 <tr style='background-color: #f0f0f0; '>
113 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fast_Bounds'>Fast Bounds</a></td>
114 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximate area required by <a href='#Paint'>Paint</a></td>
115 </tr>
116 <tr>
117 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fill_Path'>Fill Path</a></td>
118 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>make <a href='SkPath_Reference#Path'>Path</a> from <a href='undocumented#Path_Effect'>Path Effect</a>, stroking</td>
119 </tr>
120 <tr style='background-color: #f0f0f0; '>
121 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Filter_Quality_Methods'>Filter Quality Methods</a></td>
122 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Filter_Quality'>Filter Quality</a></td>
123 </tr>
124 <tr>
125 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>attributes represented by single bits</td>
127 </tr>
128 <tr style='background-color: #f0f0f0; '>
129 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
130 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a></td>
131 </tr>
132 <tr>
133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Font_Metrics'>Font Metrics</a></td>
134 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>common glyph dimensions</td>
135 </tr>
136 <tr style='background-color: #f0f0f0; '>
137 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a></td>
138 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph spacing affected by hinting</td>
139 </tr>
140 <tr>
141 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
142 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outline adjustment</td>
143 </tr>
144 <tr style='background-color: #f0f0f0; '>
145 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Image_Filter_Methods'>Image Filter Methods</a></td>
146 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Image_Filter'>Image Filter</a></td>
147 </tr>
148 <tr>
149 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Initializers'>Initializers</a></td>
150 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructors and initialization</td>
151 </tr>
152 <tr style='background-color: #f0f0f0; '>
153 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#LCD_Text'>LCD Text</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400154 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text relying on the order of RGB stripes</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400155 </tr>
156 <tr>
157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Linear_Text'>Linear Text</a></td>
158 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>selects text rendering as <a href='undocumented#Glyph'>Glyph</a> or <a href='SkPath_Reference#Path'>Path</a></td>
159 </tr>
160 <tr style='background-color: #f0f0f0; '>
161 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Management'>Management</a></td>
162 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>paint copying, moving, comparing</td>
163 </tr>
164 <tr>
165 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Mask_Filter_Methods'>Mask Filter Methods</a></td>
166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Mask_Filter'>Mask Filter</a></td>
167 </tr>
168 <tr style='background-color: #f0f0f0; '>
169 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Measure_Text'>Measure Text</a></td>
170 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>width, height, bounds of text</td>
171 </tr>
172 <tr>
173 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Miter_Limit'>Miter Limit</a></td>
174 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum length of stroked corners</td>
175 </tr>
176 <tr style='background-color: #f0f0f0; '>
177 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Path_Effect_Methods'>Path Effect Methods</a></td>
178 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Path_Effect'>Path Effect</a></td>
179 </tr>
180 <tr>
181 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Shader_Methods'>Shader Methods</a></td>
182 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Shader'>Shader</a></td>
183 </tr>
184 <tr style='background-color: #f0f0f0; '>
185 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Cap'>Stroke Cap</a></td>
186 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decorations at ends of open strokes</td>
187 </tr>
188 <tr>
189 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Join'>Stroke Join</a></td>
190 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decoration at corners of strokes</td>
191 </tr>
192 <tr style='background-color: #f0f0f0; '>
193 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Width'>Stroke Width</a></td>
194 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>thickness perpendicular to geometry</td>
195 </tr>
196 <tr>
197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
198 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>geometry filling, stroking</td>
199 </tr>
200 <tr style='background-color: #f0f0f0; '>
201 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Fill'>Style Fill</a></td>
202 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>fill and stroke</td>
203 </tr>
204 <tr>
205 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Hairline'>Style Hairline</a></td>
206 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lines and curves with minimal width</td>
207 </tr>
208 <tr style='background-color: #f0f0f0; '>
209 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Stroke'>Style Stroke</a></td>
210 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lines and curves with width</td>
211 </tr>
212 <tr>
213 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Subpixel_Text'>Subpixel Text</a></td>
214 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses pixel transparency to represent fractional offset</td>
215 </tr>
216 <tr style='background-color: #f0f0f0; '>
217 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Align'>Text Align</a></td>
218 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text placement relative to position</td>
219 </tr>
220 <tr>
221 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Encoding'>Text Encoding</a></td>
222 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text encoded as characters or <a href='undocumented#Glyph'>Glyphs</a></td>
223 </tr>
224 <tr style='background-color: #f0f0f0; '>
225 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Intercepts'>Text Intercepts</a></td>
226 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>advanced underline, strike through</td>
227 </tr>
228 <tr>
229 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Path'>Text Path</a></td>
230 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>geometry of <a href='undocumented#Glyph'>Glyphs</a></td>
231 </tr>
232 <tr style='background-color: #f0f0f0; '>
233 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Scale_X'>Text Scale X</a></td>
234 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text horizontal scale</td>
235 </tr>
236 <tr>
237 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Size'>Text Size</a></td>
238 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>overall height in points</td>
239 </tr>
240 <tr style='background-color: #f0f0f0; '>
241 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Skew_X'>Text Skew X</a></td>
242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text horizontal slant</td>
243 </tr>
244 <tr>
245 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Typeface_Methods'>Typeface Methods</a></td>
246 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Typeface'>Typeface</a></td>
247 </tr>
248 <tr style='background-color: #f0f0f0; '>
249 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Utility'>Utility</a></td>
250 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>rarely called management functions</td>
251 </tr>
252 <tr>
253 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Vertical_Text'>Vertical Text</a></td>
254 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>orient text from top to bottom</td>
255 </tr>
256</table>
Cary Clark12799e12017-07-28 15:18:29 -0400257
Cary Clark12799e12017-07-28 15:18:29 -0400258
Cary Clark682c58d2018-05-16 07:07:07 -0400259## <a name='Constant'>Constant</a>
Cary Clark12799e12017-07-28 15:18:29 -0400260
Cary Clark12799e12017-07-28 15:18:29 -0400261
Cary Clark682c58d2018-05-16 07:07:07 -0400262SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
263<table style='border-collapse: collapse; width: 62.5em'>
264 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
265<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
266 <tr style='background-color: #f0f0f0; '>
267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Align'>Align</a></td>
268 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph locations relative to text position</td>
269 </tr>
270 <tr>
271 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Cap'>Cap</a></td>
272 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>start and end geometry on stroked shapes</td>
273 </tr>
274 <tr style='background-color: #f0f0f0; '>
275 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
276 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values described by bits and masks</td>
277 </tr>
278 <tr>
279 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
280 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>level of glyph outline adjustment</td>
281 </tr>
282 <tr style='background-color: #f0f0f0; '>
283 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Join'>Join</a></td>
284 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>corner geometry on stroked shapes</td>
285 </tr>
286 <tr>
287 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
288 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>stroke, fill, or both</td>
289 </tr>
290 <tr style='background-color: #f0f0f0; '>
291 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_TextEncoding'>TextEncoding</a></td>
292 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>character or glyph encoded size</td>
293 </tr>
294 <tr>
295 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAlignCount'>kAlignCount</a></td>
296 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Text_Align'>Text Align</a> values defined</td>
297 </tr>
298 <tr style='background-color: #f0f0f0; '>
299 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAllFlags'>kAllFlags</a></td>
300 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask of all <a href='#SkPaint_Flags'>Flags</a></td>
301 </tr>
302 <tr>
303 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400304 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400305 </tr>
306 <tr style='background-color: #f0f0f0; '>
307 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
308 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Automatic_Hinting'>Automatic Hinting</a></td>
309 </tr>
310 <tr>
311 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kBevel_Join'>kBevel Join</a></td>
312 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>connects outside edges</td>
313 </tr>
314 <tr style='background-color: #f0f0f0; '>
315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
316 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>no stroke extension</td>
317 </tr>
318 <tr>
319 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCapCount'>kCapCount</a></td>
320 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Cap'>Stroke Cap</a> values defined</td>
321 </tr>
322 <tr style='background-color: #f0f0f0; '>
323 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCenter_Align'>kCenter Align</a></td>
324 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>centers line of glyphs by its width or height</td>
325 </tr>
326 <tr>
327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Cap'>kDefault Cap</a></td>
328 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
329 </tr>
330 <tr style='background-color: #f0f0f0; '>
331 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Join'>kDefault Join</a></td>
332 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
333 </tr>
334 <tr>
335 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
336 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Dither'>Dither</a></td>
337 </tr>
338 <tr style='background-color: #f0f0f0; '>
339 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
340 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
341 </tr>
342 <tr>
343 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
344 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Fake_Bold'>Fake Bold</a></td>
345 </tr>
346 <tr style='background-color: #f0f0f0; '>
347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFill_Style'>kFill Style</a></td>
348 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to fill geometry</td>
349 </tr>
350 <tr>
351 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFull_Hinting'>kFull Hinting</a></td>
Cary Clark137b8742018-05-30 09:21:49 -0400352 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>modifies glyph outlines for maximum constrast</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400353 </tr>
354 <tr style='background-color: #f0f0f0; '>
355 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
356 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent glyph indices</td>
357 </tr>
358 <tr>
359 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kJoinCount'>kJoinCount</a></td>
360 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Join'>Stroke Join</a> values defined</td>
361 </tr>
362 <tr style='background-color: #f0f0f0; '>
363 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
364 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#LCD_Text'>LCD Text</a></td>
365 </tr>
366 <tr>
367 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Cap'>kLast Cap</a></td>
368 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>largest <a href='#Stroke_Cap'>Stroke Cap</a> value</td>
369 </tr>
370 <tr style='background-color: #f0f0f0; '>
371 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Join'>kLast Join</a></td>
372 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to the largest value for <a href='#Stroke_Join'>Stroke Join</a></td>
373 </tr>
374 <tr>
375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLeft_Align'>kLeft Align</a></td>
376 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>positions glyph by computed font offset</td>
377 </tr>
378 <tr style='background-color: #f0f0f0; '>
379 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
380 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Linear_Text'>Linear Text</a></td>
381 </tr>
382 <tr>
383 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
384 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extends to <a href='#Miter_Limit'>Miter Limit</a></td>
385 </tr>
386 <tr style='background-color: #f0f0f0; '>
387 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNo_Hinting'>kNo Hinting</a></td>
388 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines unchanged</td>
389 </tr>
390 <tr>
391 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a></td>
392 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines modified to improve constrast</td>
393 </tr>
394 <tr style='background-color: #f0f0f0; '>
395 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRight_Align'>kRight Align</a></td>
396 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves lines of glyphs by its width or height</td>
397 </tr>
398 <tr>
399 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Cap'>kRound Cap</a></td>
400 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
401 </tr>
402 <tr style='background-color: #f0f0f0; '>
403 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Join'>kRound Join</a></td>
404 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
405 </tr>
406 <tr>
407 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a></td>
408 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimal modification to improve constrast</td>
409 </tr>
410 <tr style='background-color: #f0f0f0; '>
411 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSquare_Cap'>kSquare Cap</a></td>
412 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds square</td>
413 </tr>
414 <tr>
415 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a></td>
416 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to stroke and fill geometry</td>
417 </tr>
418 <tr style='background-color: #f0f0f0; '>
419 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStroke_Style'>kStroke Style</a></td>
420 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to stroke geometry</td>
421 </tr>
422 <tr>
423 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStyleCount'>kStyleCount</a></td>
424 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#SkPaint_Style'>Style</a> values defined</td>
425 </tr>
426 <tr style='background-color: #f0f0f0; '>
427 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
428 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Subpixel_Text'>Subpixel Text</a></td>
429 </tr>
430 <tr>
431 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a></td>
432 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent most of Unicode</td>
433 </tr>
434 <tr style='background-color: #f0f0f0; '>
435 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a></td>
436 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses four byte words to represent all of Unicode</td>
437 </tr>
438 <tr>
439 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a></td>
440 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses bytes to represent UTF-8 or ASCII</td>
441 </tr>
442 <tr style='background-color: #f0f0f0; '>
443 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
444 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Vertical_Text'>Vertical Text</a></td>
445 </tr>
446</table>
Cary Clark12799e12017-07-28 15:18:29 -0400447
Cary Clark12799e12017-07-28 15:18:29 -0400448
Cary Clark682c58d2018-05-16 07:07:07 -0400449## <a name='Struct'>Struct</a>
Cary Clark12799e12017-07-28 15:18:29 -0400450
Cary Clark12799e12017-07-28 15:18:29 -0400451
Cary Clark682c58d2018-05-16 07:07:07 -0400452SkPaint uses C++ structs to declare the public data structures and interfaces.
453<table style='border-collapse: collapse; width: 62.5em'>
454 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
455<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
456 <tr style='background-color: #f0f0f0; '>
457 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics'>FontMetrics</a></td>
458 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values computed by <a href='undocumented#Font_Manager'>Font Manager</a> using <a href='undocumented#Typeface'>Typeface</a></td>
459 </tr>
460</table>
461
462
463## <a name='Constructor'>Constructor</a>
464
465
466SkPaint can be constructed or initialized by these functions, including C++ class constructors.
467<table style='border-collapse: collapse; width: 62.5em'>
468 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
469<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
470 <tr style='background-color: #f0f0f0; '>
471 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_empty_constructor'>SkPaint()</a></td>
472 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructs with default values</td>
473 </tr>
474 <tr>
475 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_SkPaint'>SkPaint(SkPaint&& paint)</a></td>
476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
477 </tr>
478 <tr style='background-color: #f0f0f0; '>
479 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_const_SkPaint'>SkPaint(const SkPaint& paint)</a></td>
480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
481 </tr>
482 <tr>
483 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_destructor'>~SkPaint()</a></td>
484 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decreases <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects</td>
485 </tr>
486</table>
487
488
489## <a name='Operator'>Operator</a>
490
491
492SkPaint operators inline class member functions with arithmetic equivalents.
493<table style='border-collapse: collapse; width: 62.5em'>
494 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
495<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
496 <tr style='background-color: #f0f0f0; '>
497 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a></td>
498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for inequality</td>
499 </tr>
500 <tr>
501 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a></td>
502 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
503 </tr>
504 <tr style='background-color: #f0f0f0; '>
505 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a></td>
506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
507 </tr>
508 <tr>
509 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a></td>
510 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for equality</td>
511 </tr>
512</table>
513
514
515## <a name='Member_Function'>Member Function</a>
516
517
518SkPaint member functions read and modify the structure properties.
519<table style='border-collapse: collapse; width: 62.5em'>
520 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
521<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
522 <tr style='background-color: #f0f0f0; '>
523 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_breakText'>breakText</a></td>
524 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text that fits in a width</td>
525 </tr>
526 <tr>
527 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a></td>
528 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if settings allow for fast bounds computation</td>
529 </tr>
530 <tr style='background-color: #f0f0f0; '>
531 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastBounds'>computeFastBounds</a></td>
532 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill bounds for quick reject tests</td>
533 </tr>
534 <tr>
535 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a></td>
536 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns stroke bounds for quick reject tests</td>
537 </tr>
538 <tr style='background-color: #f0f0f0; '>
539 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
540 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
541 </tr>
542 <tr>
543 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
544 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
545 </tr>
546 <tr style='background-color: #f0f0f0; '>
547 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a></td>
548 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns bounds for quick reject tests</td>
549 </tr>
550 <tr>
551 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getAlpha'>getAlpha</a></td>
552 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
553 </tr>
554 <tr style='background-color: #f0f0f0; '>
555 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getBlendMode'>getBlendMode</a></td>
556 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Blend_Mode'>Blend Mode</a>, how colors combine with <a href='undocumented#Device'>Device</a></td>
557 </tr>
558 <tr>
559 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColor'>getColor</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400560 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400561 </tr>
562 <tr style='background-color: #f0f0f0; '>
563 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColorFilter'>getColorFilter</a></td>
564 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Color_Filter'>Color Filter</a>, how colors are altered</td>
565 </tr>
566 <tr>
567 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getDrawLooper'>getDrawLooper</a></td>
568 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
569 </tr>
570 <tr style='background-color: #f0f0f0; '>
571 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFillPath'>getFillPath</a></td>
572 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill path equivalent to stroke</td>
573 </tr>
574 <tr>
575 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFilterQuality'>getFilterQuality</a></td>
576 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, image filtering level</td>
577 </tr>
578 <tr style='background-color: #f0f0f0; '>
579 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFlags'>getFlags</a></td>
580 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Flags'>Flags</a> stored in a bit field</td>
581 </tr>
582 <tr>
583 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontBounds'>getFontBounds</a></td>
584 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns union all glyph bounds</td>
585 </tr>
586 <tr style='background-color: #f0f0f0; '>
587 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontMetrics'>getFontMetrics</a></td>
588 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a> metrics scaled by text size</td>
589 </tr>
590 <tr>
591 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontSpacing'>getFontSpacing</a></td>
592 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns recommended spacing between lines</td>
593 </tr>
594 <tr style='background-color: #f0f0f0; '>
595 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHash'>getHash</a></td>
596 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns a shallow hash for equality checks</td>
597 </tr>
598 <tr>
599 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHinting'>getHinting</a></td>
600 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
601 </tr>
602 <tr style='background-color: #f0f0f0; '>
603 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getImageFilter'>getImageFilter</a></td>
604 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
605 </tr>
606 <tr>
607 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getMaskFilter'>getMaskFilter</a></td>
608 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
609 </tr>
610 <tr style='background-color: #f0f0f0; '>
611 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPathEffect'>getPathEffect</a></td>
612 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
613 </tr>
614 <tr>
615 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a></td>
616 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect horizontally positioned text; underlines</td>
617 </tr>
618 <tr style='background-color: #f0f0f0; '>
619 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a></td>
620 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect positioned text; underlines</td>
621 </tr>
622 <tr>
623 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextPath'>getPosTextPath</a></td>
624 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to positioned text</td>
625 </tr>
626 <tr style='background-color: #f0f0f0; '>
627 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getShader'>getShader</a></td>
628 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
629 </tr>
630 <tr>
631 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeCap'>getStrokeCap</a></td>
632 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Cap'>Cap</a>, the area drawn at path ends</td>
633 </tr>
634 <tr style='background-color: #f0f0f0; '>
635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a></td>
636 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
637 </tr>
638 <tr>
639 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a></td>
640 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
641 </tr>
642 <tr style='background-color: #f0f0f0; '>
643 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a></td>
644 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns thickness of the stroke</td>
645 </tr>
646 <tr>
647 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStyle'>getStyle</a></td>
648 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
649 </tr>
650 <tr style='background-color: #f0f0f0; '>
651 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextAlign'>getTextAlign</a></td>
652 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
653 </tr>
654 <tr>
655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a></td>
656 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect <a href='undocumented#Text_Blob'>Text Blob</a>; underlines</td>
657 </tr>
658 <tr style='background-color: #f0f0f0; '>
659 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextEncoding'>getTextEncoding</a></td>
660 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns character or glyph encoded size</td>
661 </tr>
662 <tr>
663 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a></td>
664 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect text; underlines</td>
665 </tr>
666 <tr style='background-color: #f0f0f0; '>
667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextPath'>getTextPath</a></td>
668 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to text</td>
669 </tr>
670 <tr>
671 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextScaleX'>getTextScaleX</a></td>
672 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal scale; condensed text</td>
673 </tr>
674 <tr style='background-color: #f0f0f0; '>
675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSize'>getTextSize</a></td>
676 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text size in points</td>
677 </tr>
678 <tr>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSkewX'>getTextSkewX</a></td>
680 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal skew; oblique text</td>
681 </tr>
682 <tr style='background-color: #f0f0f0; '>
683 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextWidths'>getTextWidths</a></td>
684 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance and bounds for each glyph in text</td>
685 </tr>
686 <tr>
687 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTypeface'>getTypeface</a></td>
688 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a>, font description</td>
689 </tr>
690 <tr style='background-color: #f0f0f0; '>
691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
692 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
693 </tr>
694 <tr>
695 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAntiAlias'>isAntiAlias</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400696 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Anti_Alias'>Anti Alias</a> is set</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400697 </tr>
698 <tr style='background-color: #f0f0f0; '>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAutohinted'>isAutohinted</a></td>
700 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Glyph'>Glyphs</a> are always hinted</td>
701 </tr>
702 <tr>
703 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isDither'>isDither</a></td>
704 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Dither'>Dither</a> is set</td>
705 </tr>
706 <tr style='background-color: #f0f0f0; '>
707 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a></td>
708 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is set</td>
709 </tr>
710 <tr>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a></td>
712 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Fake_Bold'>Fake Bold</a> is set</td>
713 </tr>
714 <tr style='background-color: #f0f0f0; '>
715 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a></td>
716 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#LCD_Text'>LCD Text</a> is set</td>
717 </tr>
718 <tr>
719 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLinearText'>isLinearText</a></td>
720 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a></td>
721 </tr>
722 <tr style='background-color: #f0f0f0; '>
723 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSrcOver'>isSrcOver</a></td>
724 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a></td>
725 </tr>
726 <tr>
727 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSubpixelText'>isSubpixelText</a></td>
728 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Subpixel_Text'>Subpixel Text</a> is set</td>
729 </tr>
730 <tr style='background-color: #f0f0f0; '>
731 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isVerticalText'>isVerticalText</a></td>
732 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Vertical_Text'>Vertical Text</a> is set</td>
733 </tr>
734 <tr>
735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_measureText'>measureText</a></td>
736 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance width and bounds of text</td>
737 </tr>
738 <tr style='background-color: #f0f0f0; '>
739 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
740 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
741 </tr>
742 <tr>
743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refColorFilter'>refColorFilter</a></td>
744 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Color_Filter'>Color Filter</a>, how colors are altered</td>
745 </tr>
746 <tr style='background-color: #f0f0f0; '>
747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refDrawLooper'>refDrawLooper</a></td>
748 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
749 </tr>
750 <tr>
751 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refImageFilter'>refImageFilter</a></td>
752 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
753 </tr>
754 <tr style='background-color: #f0f0f0; '>
755 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refMaskFilter'>refMaskFilter</a></td>
756 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
757 </tr>
758 <tr>
759 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refPathEffect'>refPathEffect</a></td>
760 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
761 </tr>
762 <tr style='background-color: #f0f0f0; '>
763 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refShader'>refShader</a></td>
764 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
765 </tr>
766 <tr>
767 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refTypeface'>refTypeface</a></td>
768 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Typeface'>Typeface</a>, font description</td>
769 </tr>
770 <tr style='background-color: #f0f0f0; '>
771 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_reset'>reset</a></td>
772 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to default values</td>
773 </tr>
774 <tr>
775 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setARGB'>setARGB</a></td>
776 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets color by component</td>
777 </tr>
778 <tr style='background-color: #f0f0f0; '>
779 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAlpha'>setAlpha</a></td>
780 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
781 </tr>
782 <tr>
783 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAntiAlias'>setAntiAlias</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400784 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400785 </tr>
786 <tr style='background-color: #f0f0f0; '>
787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAutohinted'>setAutohinted</a></td>
788 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Glyph'>Glyphs</a> to always be hinted</td>
789 </tr>
790 <tr>
791 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setBlendMode'>setBlendMode</a></td>
792 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Blend_Mode'>Blend Mode</a>, how colors combine with destination</td>
793 </tr>
794 <tr style='background-color: #f0f0f0; '>
795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColor'>setColor</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400796 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400797 </tr>
798 <tr>
799 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColorFilter'>setColorFilter</a></td>
800 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Color_Filter'>Color Filter</a>, alters color</td>
801 </tr>
802 <tr style='background-color: #f0f0f0; '>
803 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDither'>setDither</a></td>
804 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Dither'>Dither</a></td>
805 </tr>
806 <tr>
807 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDrawLooper'>setDrawLooper</a></td>
808 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
809 </tr>
810 <tr style='background-color: #f0f0f0; '>
811 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a></td>
812 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
813 </tr>
814 <tr>
815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a></td>
816 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Fake_Bold'>Fake Bold</a></td>
817 </tr>
818 <tr style='background-color: #f0f0f0; '>
819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFilterQuality'>setFilterQuality</a></td>
820 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level</td>
821 </tr>
822 <tr>
823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFlags'>setFlags</a></td>
824 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets multiple <a href='#SkPaint_Flags'>Flags</a> in a bit field</td>
825 </tr>
826 <tr style='background-color: #f0f0f0; '>
827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setHinting'>setHinting</a></td>
828 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
829 </tr>
830 <tr>
831 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setImageFilter'>setImageFilter</a></td>
832 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
833 </tr>
834 <tr style='background-color: #f0f0f0; '>
835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a></td>
836 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#LCD_Text'>LCD Text</a></td>
837 </tr>
838 <tr>
839 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLinearText'>setLinearText</a></td>
840 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts to <a href='SkPath_Reference#Path'>Path</a> before draw or measure</td>
841 </tr>
842 <tr style='background-color: #f0f0f0; '>
843 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setMaskFilter'>setMaskFilter</a></td>
844 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
845 </tr>
846 <tr>
847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setPathEffect'>setPathEffect</a></td>
848 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
849 </tr>
850 <tr style='background-color: #f0f0f0; '>
851 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setShader'>setShader</a></td>
852 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
853 </tr>
854 <tr>
855 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeCap'>setStrokeCap</a></td>
856 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Cap'>Cap</a>, the area drawn at path ends</td>
857 </tr>
858 <tr style='background-color: #f0f0f0; '>
859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a></td>
860 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
861 </tr>
862 <tr>
863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a></td>
864 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
865 </tr>
866 <tr style='background-color: #f0f0f0; '>
867 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a></td>
868 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets thickness of the stroke</td>
869 </tr>
870 <tr>
871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStyle'>setStyle</a></td>
872 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
873 </tr>
874 <tr style='background-color: #f0f0f0; '>
875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setSubpixelText'>setSubpixelText</a></td>
876 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Subpixel_Text'>Subpixel Text</a></td>
877 </tr>
878 <tr>
879 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextAlign'>setTextAlign</a></td>
880 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
881 </tr>
882 <tr style='background-color: #f0f0f0; '>
883 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextEncoding'>setTextEncoding</a></td>
884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets character or glyph encoded size</td>
885 </tr>
886 <tr>
887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextScaleX'>setTextScaleX</a></td>
888 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal scale; condensed text</td>
889 </tr>
890 <tr style='background-color: #f0f0f0; '>
891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSize'>setTextSize</a></td>
892 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets text size in points</td>
893 </tr>
894 <tr>
895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSkewX'>setTextSkewX</a></td>
896 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal skew; oblique text</td>
897 </tr>
898 <tr style='background-color: #f0f0f0; '>
899 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTypeface'>setTypeface</a></td>
900 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Typeface'>Typeface</a>, font description</td>
901 </tr>
902 <tr>
903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setVerticalText'>setVerticalText</a></td>
904 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Vertical_Text'>Vertical Text</a></td>
905 </tr>
906 <tr style='background-color: #f0f0f0; '>
907 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
908 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
909 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400910</table>
911
912
913## <a name='Initializers'>Initializers</a>
914
915<a name='SkPaint_empty_constructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400916## SkPaint
917
Cary Clark682c58d2018-05-16 07:07:07 -0400918<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
919<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400920</pre>
921
Cary Clark682c58d2018-05-16 07:07:07 -0400922Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400923
924| attribute | default value |
925| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400926| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark682c58d2018-05-16 07:07:07 -0400927| <a href='undocumented#Blend_Mode'>Blend Mode</a> | <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
928| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
929| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
930| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
931| <a href='#Dither'>Dither</a> | false |
932| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
933| <a href='#Fake_Bold'>Fake Bold</a> | false |
934| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
935| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
936| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
937| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
938| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
939| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
940| <a href='#LCD_Text'>LCD Text</a> | false |
941| <a href='#Linear_Text'>Linear Text</a> | false |
942| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
943| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
944| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
945| <a href='undocumented#Shader'>Shader</a> | nullptr |
946| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
947| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
948| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
949| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
950| <a href='#Text_Size'>Text Size</a> | 12 |
951| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
952| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
953| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
954| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
955| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
956| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
957| <a href='#Vertical_Text'>Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400958
959The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500960paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400961build system.
962
963### Return Value
964
Cary Clark682c58d2018-05-16 07:07:07 -0400965default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400966
967### Example
968
969<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
970
971---
972
Cary Clark682c58d2018-05-16 07:07:07 -0400973<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400974## SkPaint
975
Cary Clark682c58d2018-05-16 07:07:07 -0400976<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
977<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400978</pre>
979
Cary Clark682c58d2018-05-16 07:07:07 -0400980Makes 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>,
981<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
982between 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 -0400983their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400984
Cary Clark682c58d2018-05-16 07:07:07 -0400985The 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>,
986<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
987This 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 -0400988
989### Parameters
990
Cary Clark682c58d2018-05-16 07:07:07 -0400991<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
992 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400993 </tr>
994</table>
995
996### Return Value
997
Cary Clark682c58d2018-05-16 07:07:07 -0400998shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400999
1000### Example
1001
1002<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
1003
1004#### Example Output
1005
1006~~~~
1007SK_ColorRED == paint1.getColor()
1008SK_ColorBLUE == paint2.getColor()
1009~~~~
1010
1011</fiddle-embed></div>
1012
1013---
1014
Cary Clark682c58d2018-05-16 07:07:07 -04001015<a name='SkPaint_move_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001016## SkPaint
1017
Cary Clark682c58d2018-05-16 07:07:07 -04001018<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1019<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -04001020</pre>
1021
Cary Clarkd0530ba2017-09-14 11:25:39 -04001022Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -04001023of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001024
Cary Clark682c58d2018-05-16 07:07:07 -04001025After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001026
1027### Parameters
1028
Cary Clark682c58d2018-05-16 07:07:07 -04001029<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
1030 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001031 </tr>
1032</table>
1033
1034### Return Value
1035
Cary Clark682c58d2018-05-16 07:07:07 -04001036content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001037
1038### Example
1039
1040<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
1041
1042#### Example Output
1043
1044~~~~
1045path effect unique: true
1046~~~~
1047
1048</fiddle-embed></div>
1049
1050---
1051
Cary Clark682c58d2018-05-16 07:07:07 -04001052<a name='SkPaint_reset'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001053## reset
1054
Cary Clark682c58d2018-05-16 07:07:07 -04001055<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1056void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001057</pre>
1058
Cary Clark682c58d2018-05-16 07:07:07 -04001059Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
1060<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001061
1062### Example
1063
1064<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
1065
1066#### Example Output
1067
1068~~~~
1069paint1 == paint2
1070~~~~
1071
1072</fiddle-embed></div>
1073
1074---
1075
Cary Clark682c58d2018-05-16 07:07:07 -04001076<a name='SkPaint_destructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001077## ~SkPaint
1078
Cary Clark682c58d2018-05-16 07:07:07 -04001079<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1080<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001081</pre>
1082
Cary Clark682c58d2018-05-16 07:07:07 -04001083Decreases <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>,
1084<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
1085objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -04001086
1087---
1088
Cary Clark682c58d2018-05-16 07:07:07 -04001089## <a name='Management'>Management</a>
Cary Clark12799e12017-07-28 15:18:29 -04001090
Cary Clark682c58d2018-05-16 07:07:07 -04001091<a name='SkPaint_copy_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001092## operator=
1093
Cary Clark682c58d2018-05-16 07:07:07 -04001094<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1095<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001096</pre>
1097
Cary Clark682c58d2018-05-16 07:07:07 -04001098Makes 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>,
1099<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
1100between 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 -04001101prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -04001102resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
1103are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -04001104
1105### Parameters
1106
Cary Clark682c58d2018-05-16 07:07:07 -04001107<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
1108 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -04001109 </tr>
1110</table>
1111
1112### Return Value
1113
Cary Clark682c58d2018-05-16 07:07:07 -04001114content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001115
1116### Example
1117
1118<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
1119
1120#### Example Output
1121
1122~~~~
1123SK_ColorRED == paint1.getColor()
1124SK_ColorRED == paint2.getColor()
1125~~~~
1126
1127</fiddle-embed></div>
1128
1129---
1130
Cary Clark682c58d2018-05-16 07:07:07 -04001131<a name='SkPaint_move_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001132## operator=
1133
Cary Clark682c58d2018-05-16 07:07:07 -04001134<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1135<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001136</pre>
1137
Cary Clark682c58d2018-05-16 07:07:07 -04001138Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
1139of 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 -04001140prior destination are decreased by one; those objects are deleted if the resulting count
1141is zero.
Cary Clark12799e12017-07-28 15:18:29 -04001142
Cary Clark682c58d2018-05-16 07:07:07 -04001143After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001144
1145### Parameters
1146
Cary Clark682c58d2018-05-16 07:07:07 -04001147<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
1148 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001149 </tr>
1150</table>
1151
1152### Return Value
1153
Cary Clark682c58d2018-05-16 07:07:07 -04001154content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001155
1156### Example
1157
1158<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
1159
1160#### Example Output
1161
1162~~~~
1163SK_ColorRED == paint2.getColor()
1164~~~~
1165
1166</fiddle-embed></div>
1167
1168---
1169
Cary Clark682c58d2018-05-16 07:07:07 -04001170<a name='SkPaint_equal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001171## operator==
1172
Cary Clark682c58d2018-05-16 07:07:07 -04001173<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1174bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001175</pre>
1176
Cary Clark682c58d2018-05-16 07:07:07 -04001177Compares <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
1178if <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>,
1179<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 -04001180
1181### Parameters
1182
Cary Clark682c58d2018-05-16 07:07:07 -04001183<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
1184 <td><a href='#Paint'>Paint</a> to compare</td>
1185 </tr>
1186 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
1187 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001188 </tr>
1189</table>
1190
1191### Return Value
1192
Cary Clark682c58d2018-05-16 07:07:07 -04001193true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001194
1195### Example
1196
1197<div><fiddle-embed name="7481a948e34672720337a631830586dd">
1198
1199#### Example Output
1200
1201~~~~
1202paint1 == paint2
1203paint1 != paint2
1204~~~~
1205
1206</fiddle-embed></div>
1207
Cary Clark06c20f32018-03-20 15:53:27 -04001208### See Also
1209
Cary Clark682c58d2018-05-16 07:07:07 -04001210<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001211
Cary Clark12799e12017-07-28 15:18:29 -04001212---
1213
Cary Clark682c58d2018-05-16 07:07:07 -04001214<a name='SkPaint_notequal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001215## operator!=
1216
Cary Clark682c58d2018-05-16 07:07:07 -04001217<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1218bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001219</pre>
1220
Cary Clark682c58d2018-05-16 07:07:07 -04001221Compares <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
1222if <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>,
1223<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 -04001224
1225### Parameters
1226
Cary Clark682c58d2018-05-16 07:07:07 -04001227<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
1228 <td><a href='#Paint'>Paint</a> to compare</td>
1229 </tr>
1230 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
1231 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001232 </tr>
1233</table>
1234
1235### Return Value
1236
Cary Clark682c58d2018-05-16 07:07:07 -04001237true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001238
1239### Example
1240
1241<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
1242
1243#### Example Output
1244
1245~~~~
1246paint1 == paint2
1247paint1 == paint2
1248~~~~
1249
1250</fiddle-embed></div>
1251
Cary Clark06c20f32018-03-20 15:53:27 -04001252### See Also
1253
Cary Clark682c58d2018-05-16 07:07:07 -04001254<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001255
Cary Clark12799e12017-07-28 15:18:29 -04001256---
1257
Cary Clark682c58d2018-05-16 07:07:07 -04001258<a name='SkPaint_getHash'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001259## getHash
1260
Cary Clark682c58d2018-05-16 07:07:07 -04001261<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1262uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001263</pre>
1264
Cary Clark682c58d2018-05-16 07:07:07 -04001265Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001266Identical hashes guarantee that the paints are
1267equivalent, but differing hashes do not guarantee that the paints have differing
1268contents.
1269
Cary Clark682c58d2018-05-16 07:07:07 -04001270If <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 -04001271their hashes are also equal.
1272
1273The hash returned is platform and implementation specific.
1274
1275### Return Value
1276
1277a shallow hash
1278
1279### Example
1280
1281<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
1282
1283#### Example Output
1284
1285~~~~
1286paint1 == paint2
1287paint1.getHash() == paint2.getHash()
1288~~~~
1289
1290</fiddle-embed></div>
1291
1292---
1293
Cary Clark682c58d2018-05-16 07:07:07 -04001294## <a name='Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001295
Cary Clark682c58d2018-05-16 07:07:07 -04001296## <a name='SkPaint_Hinting'>Enum SkPaint::Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001297
Cary Clarka560c472017-11-27 10:44:06 -05001298<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001299 enum <a href='#SkPaint_Hinting'>Hinting</a> {
1300 <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> = 0,
1301 <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> = 1,
1302 <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> = 2,
1303 <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -04001304 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001305</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001306
Cary Clark682c58d2018-05-16 07:07:07 -04001307<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
1308look 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 -04001309muted effect or no effect at all depending on the platform.
1310
Cary Clark7cfcbca2018-01-04 16:11:51 -05001311The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -04001312as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001313
1314### Constants
1315
Cary Clark682c58d2018-05-16 07:07:07 -04001316<table style='border-collapse: collapse; width: 62.5em'>
1317 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1318<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1319<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1320 <tr style='background-color: #f0f0f0; '>
1321 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
1322 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1323 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1324Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001325With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
1326bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -04001327outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -05001328to 26.6 fractional pixels.
1329</td>
Cary Clark12799e12017-07-28 15:18:29 -04001330 </tr>
1331 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001332 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
1333 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1334 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1335Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001336With FreeType, this is equivalent in spirit to the
1337FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -04001338lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -04001339Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05001340</td>
Cary Clark12799e12017-07-28 15:18:29 -04001341 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001342 <tr style='background-color: #f0f0f0; '>
1343 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
1344 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1345 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1346Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001347With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
1348choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -05001349gray-level rendering.
1350</td>
Cary Clark12799e12017-07-28 15:18:29 -04001351 </tr>
1352 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001353 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
1354 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1355 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04001356Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -04001357FT_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 -05001358FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
1359horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -05001360variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
1361</td>
Cary Clark12799e12017-07-28 15:18:29 -04001362 </tr>
1363</table>
1364
Cary Clark682c58d2018-05-16 07:07:07 -04001365On <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 -04001366to 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 -04001367Normal 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 -04001368the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -04001369
Cary Clark682c58d2018-05-16 07:07:07 -04001370On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -04001371
Cary Clark682c58d2018-05-16 07:07:07 -04001372<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1373Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04001374
Cary Clark682c58d2018-05-16 07:07:07 -04001375<a name='SkPaint_getHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001376## getHinting
1377
Cary Clark682c58d2018-05-16 07:07:07 -04001378<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1379<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001380</pre>
1381
1382Returns level of glyph outline adjustment.
1383
1384### Return Value
1385
Cary Clark682c58d2018-05-16 07:07:07 -04001386one 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 -04001387
1388### Example
1389
1390<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
1391
1392#### Example Output
1393
1394~~~~
1395SkPaint::kNormal_Hinting == paint.getHinting()
1396~~~~
1397
1398</fiddle-embed></div>
1399
1400---
1401
Cary Clark682c58d2018-05-16 07:07:07 -04001402<a name='SkPaint_setHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001403## setHinting
1404
Cary Clark682c58d2018-05-16 07:07:07 -04001405<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1406void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -04001407</pre>
1408
1409Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -04001410Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001411
Cary Clark682c58d2018-05-16 07:07:07 -04001412| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -04001413| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -04001414| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
1415| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
1416| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
1417| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -04001418
1419### Parameters
1420
Cary Clark682c58d2018-05-16 07:07:07 -04001421<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
1422 <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 -04001423 </tr>
1424</table>
1425
1426### Example
1427
1428<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
1429
1430#### Example Output
1431
1432~~~~
1433paint1 == paint2
1434~~~~
1435
1436</fiddle-embed></div>
1437
1438---
1439
Cary Clark682c58d2018-05-16 07:07:07 -04001440## <a name='Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001441
Cary Clark682c58d2018-05-16 07:07:07 -04001442## <a name='SkPaint_Flags'>Enum SkPaint::Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001443
Cary Clarka560c472017-11-27 10:44:06 -05001444<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001445 enum <a href='#SkPaint_Flags'>Flags</a> {
1446 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> = 0x01,
1447 <a href='#SkPaint_kDither_Flag'>kDither Flag</a> = 0x04,
1448 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> = 0x20,
1449 <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> = 0x40,
1450 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> = 0x80,
1451 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> = 0x200,
1452 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> = 0x400,
1453 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> = 0x800,
1454 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -04001455
Cary Clark682c58d2018-05-16 07:07:07 -04001456 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -04001457 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001458
Cary Clark12799e12017-07-28 15:18:29 -04001459</pre>
1460
Cary Clark682c58d2018-05-16 07:07:07 -04001461The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
1462The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
1463with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
1464All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -04001465multiple settings at once.
1466
1467### Constants
1468
Cary Clark682c58d2018-05-16 07:07:07 -04001469<table style='border-collapse: collapse; width: 62.5em'>
1470 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1471<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1472<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1473 <tr style='background-color: #f0f0f0; '>
1474 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
1475 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
1476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -04001477mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -04001478 </tr>
1479 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
1481 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
1482 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1483mask for setting Dither</td>
1484 </tr>
1485 <tr style='background-color: #f0f0f0; '>
1486 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
1487 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
1488 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1489mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -04001490 </tr>
1491 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001492 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
1493 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
1494 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1495mask for setting Linear_Text</td>
1496 </tr>
1497 <tr style='background-color: #f0f0f0; '>
1498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
1499 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
1500 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1501mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001502 </tr>
1503 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001504 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
1505 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
1506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1507mask for setting LCD_Text</td>
1508 </tr>
1509 <tr style='background-color: #f0f0f0; '>
1510 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
1511 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
1512 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1513mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -04001514 </tr>
1515 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001516 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
1517 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
1518 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1519mask for setting Automatic_Hinting</td>
1520 </tr>
1521 <tr style='background-color: #f0f0f0; '>
1522 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kVerticalText_Flag'><code>SkPaint::kVerticalText_Flag</code></a></td>
1523 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x1000</td>
1524 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1525mask for setting Vertical_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001526 </tr>
1527 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001528 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
1529 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
1530 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1531mask 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 -04001532 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001533<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
1534</table>
Cary Clark12799e12017-07-28 15:18:29 -04001535
Cary Clark682c58d2018-05-16 07:07:07 -04001536## <a name='SkPaint_ReserveFlags'>Enum SkPaint::ReserveFlags</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001537
Cary Clark682c58d2018-05-16 07:07:07 -04001538Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04001539
Cary Clark4855f782018-02-06 09:41:53 -05001540soonOnly valid for Android framework.
1541
Cary Clarka560c472017-11-27 10:44:06 -05001542<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001543 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
1544 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText ReserveFlag</a> = 0x08,
1545 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -04001546 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001547</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001548
1549### Constants
1550
Cary Clark682c58d2018-05-16 07:07:07 -04001551<table style='border-collapse: collapse; width: 62.5em'>
1552 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1553<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1554<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1555 <tr style='background-color: #f0f0f0; '>
1556 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
1557 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
1558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1559Deprecated.
1560
1561soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001562 </tr>
1563 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001564 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
1565 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
1566 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1567Deprecated.
1568
1569soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001570 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001571</table>
Cary Clark4855f782018-02-06 09:41:53 -05001572
Cary Clark682c58d2018-05-16 07:07:07 -04001573<a name='SkPaint_getFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001574## getFlags
1575
Cary Clark682c58d2018-05-16 07:07:07 -04001576<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1577uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001578</pre>
1579
Cary Clark682c58d2018-05-16 07:07:07 -04001580Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
1581bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -04001582
1583### Return Value
1584
Cary Clark682c58d2018-05-16 07:07:07 -04001585zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001586
1587### Example
1588
1589<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
1590
1591#### Example Output
1592
1593~~~~
1594(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
1595~~~~
1596
1597</fiddle-embed></div>
1598
1599---
1600
Cary Clark682c58d2018-05-16 07:07:07 -04001601<a name='SkPaint_setFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001602## setFlags
1603
Cary Clark682c58d2018-05-16 07:07:07 -04001604<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1605void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -04001606</pre>
1607
Cary Clark682c58d2018-05-16 07:07:07 -04001608Replaces <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.
1609All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -04001610
1611### Parameters
1612
Cary Clark682c58d2018-05-16 07:07:07 -04001613<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
1614 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001615 </tr>
1616</table>
1617
1618### Example
1619
1620<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
1621
1622#### Example Output
1623
1624~~~~
1625paint.isAntiAlias()
1626paint.isDither()
1627~~~~
1628
1629</fiddle-embed></div>
1630
1631---
1632
Cary Clarkffb3d682018-05-17 12:17:28 -04001633## <a name='Anti_Alias'>Anti Alias</a>
Cary Clark08895c42018-02-01 09:37:32 -05001634
Cary Clarkffb3d682018-05-17 12:17:28 -04001635<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -04001636If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
1637If <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 -04001638
Cary Clark682c58d2018-05-16 07:07:07 -04001639The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -04001640passing through the pixel center may, but is not required to, draw the pixel.
1641
Cary Clark682c58d2018-05-16 07:07:07 -04001642<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
1643active <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 -04001644
Cary Clarkffb3d682018-05-17 12:17:28 -04001645A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
1646<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 -04001647<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001648
Cary Clarkffb3d682018-05-17 12:17:28 -04001649The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -04001650
Cary Clarkffb3d682018-05-17 12:17:28 -04001651<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
1652<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 -04001653at compile time.
1654
1655### Example
1656
1657<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
1658A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -04001659The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
1660<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001661</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001662
Cary Clark682c58d2018-05-16 07:07:07 -04001663<a name='SkPaint_isAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001664## isAntiAlias
1665
Cary Clark682c58d2018-05-16 07:07:07 -04001666<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1667bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001668</pre>
1669
Cary Clark682c58d2018-05-16 07:07:07 -04001670If true, 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 -04001671
Cary Clark682c58d2018-05-16 07:07:07 -04001672Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001673
1674### Return Value
1675
Cary Clark682c58d2018-05-16 07:07:07 -04001676<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001677
1678### Example
1679
1680<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
1681
1682#### Example Output
1683
1684~~~~
1685paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1686paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1687~~~~
1688
1689</fiddle-embed></div>
1690
1691---
1692
Cary Clark682c58d2018-05-16 07:07:07 -04001693<a name='SkPaint_setAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001694## setAntiAlias
1695
Cary Clark682c58d2018-05-16 07:07:07 -04001696<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1697void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001698</pre>
1699
Cary Clark682c58d2018-05-16 07:07:07 -04001700Requests, 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 -04001701partial transparency.
1702
Cary Clark682c58d2018-05-16 07:07:07 -04001703Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1704Clears <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 -04001705
1706### Parameters
1707
Cary Clark682c58d2018-05-16 07:07:07 -04001708<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1709 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001710 </tr>
1711</table>
1712
1713### Example
1714
1715<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1716
1717#### Example Output
1718
1719~~~~
1720paint1 == paint2
1721~~~~
1722
1723</fiddle-embed></div>
1724
1725---
1726
Cary Clark682c58d2018-05-16 07:07:07 -04001727## <a name='Dither'>Dither</a>
Cary Clark08895c42018-02-01 09:37:32 -05001728
Cary Clark682c58d2018-05-16 07:07:07 -04001729<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001730This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001731Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1732and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1733and 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 -04001734
1735Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001736<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>.
1737<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
1738<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 -04001739
Cary Clark682c58d2018-05-16 07:07:07 -04001740<a href='#Dither'>Dither</a> is disabled by default.
1741<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 -04001742at compile time.
1743
Cary Clark682c58d2018-05-16 07:07:07 -04001744Some platform implementations may ignore dithering. SetSK_IGNORE_GPU_DITHERto ignore <a href='#Dither'>Dither</a> on <a href='undocumented#GPU_Surface'>GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001745
1746### Example
1747
1748<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 -05001749alternating nearby colors from pixel to pixel.
1750</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001751
1752### Example
1753
1754<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001755Drawing the gradient repeatedly with <a href='undocumented#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001756dither, making it easier to see.
1757</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001758
Cary Clark682c58d2018-05-16 07:07:07 -04001759<a name='SkPaint_isDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001760## isDither
1761
Cary Clark682c58d2018-05-16 07:07:07 -04001762<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1763bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001764</pre>
1765
1766If true, color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001767
Cary Clark682c58d2018-05-16 07:07:07 -04001768Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001769
1770### Return Value
1771
Cary Clark682c58d2018-05-16 07:07:07 -04001772<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001773
1774### Example
1775
1776<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1777
1778#### Example Output
1779
1780~~~~
1781paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1782paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1783~~~~
1784
1785</fiddle-embed></div>
1786
1787---
1788
Cary Clark682c58d2018-05-16 07:07:07 -04001789<a name='SkPaint_setDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001790## setDither
1791
Cary Clark682c58d2018-05-16 07:07:07 -04001792<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1793void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001794</pre>
1795
1796Requests, but does not require, to distribute color error.
1797
Cary Clark682c58d2018-05-16 07:07:07 -04001798Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1799Clears <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 -04001800
1801### Parameters
1802
Cary Clark682c58d2018-05-16 07:07:07 -04001803<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1804 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001805 </tr>
1806</table>
1807
1808### Example
1809
1810<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1811
1812#### Example Output
1813
1814~~~~
1815paint1 == paint2
1816~~~~
1817
1818</fiddle-embed></div>
1819
1820### See Also
1821
Cary Clark682c58d2018-05-16 07:07:07 -04001822<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001823
1824---
1825
1826### See Also
1827
Cary Clarkffb3d682018-05-17 12:17:28 -04001828Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001829
Cary Clark682c58d2018-05-16 07:07:07 -04001830## <a name='Device_Text'>Device Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05001831
Cary Clark682c58d2018-05-16 07:07:07 -04001832<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 -04001833
Cary Clarkffb3d682018-05-17 12:17:28 -04001834When 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 -04001835create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001836on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001837<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 -04001838the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001839
Cary Clark682c58d2018-05-16 07:07:07 -04001840<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 -04001841As the opaqueness
1842of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1843
1844Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001845<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1846<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
1847<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 -04001848
1849### Example
1850
Cary Clark682c58d2018-05-16 07:07:07 -04001851<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>.
1852When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1853When <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 -05001854</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001855
Cary Clark682c58d2018-05-16 07:07:07 -04001856## <a name='Linear_Text'>Linear Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001857
Cary Clark682c58d2018-05-16 07:07:07 -04001858<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>.
1859If <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>.
1860If <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 -04001861
Cary Clark682c58d2018-05-16 07:07:07 -04001862<a name='SkPaint_isLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001863## isLinearText
1864
Cary Clark682c58d2018-05-16 07:07:07 -04001865<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1866bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001867</pre>
1868
Cary Clark682c58d2018-05-16 07:07:07 -04001869If true, text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001870
Cary Clark682c58d2018-05-16 07:07:07 -04001871Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001872
1873### Return Value
1874
Cary Clark682c58d2018-05-16 07:07:07 -04001875<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001876
1877### Example
1878
1879<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1880
1881### See Also
1882
Cary Clark682c58d2018-05-16 07:07:07 -04001883<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001884
1885---
1886
Cary Clark682c58d2018-05-16 07:07:07 -04001887<a name='SkPaint_setLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001888## setLinearText
1889
Cary Clark682c58d2018-05-16 07:07:07 -04001890<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1891void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001892</pre>
1893
Cary Clark682c58d2018-05-16 07:07:07 -04001894If true, text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
1895By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001896
Cary Clark682c58d2018-05-16 07:07:07 -04001897Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1898Clears <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 -04001899
1900### Parameters
1901
Cary Clark682c58d2018-05-16 07:07:07 -04001902<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1903 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001904 </tr>
1905</table>
1906
1907### Example
1908
1909<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1910
1911### See Also
1912
Cary Clark682c58d2018-05-16 07:07:07 -04001913<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001914
1915---
1916
Cary Clark682c58d2018-05-16 07:07:07 -04001917## <a name='Subpixel_Text'>Subpixel Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001918
Cary Clark682c58d2018-05-16 07:07:07 -04001919<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 -04001920As the opaqueness
1921of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1922
Cary Clark682c58d2018-05-16 07:07:07 -04001923<a name='SkPaint_isSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001924## isSubpixelText
1925
Cary Clark682c58d2018-05-16 07:07:07 -04001926<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1927bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001928</pre>
1929
Cary Clark682c58d2018-05-16 07:07:07 -04001930If true, <a href='undocumented#Glyph'>Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001931
Cary Clark682c58d2018-05-16 07:07:07 -04001932Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001933
1934### Return Value
1935
Cary Clark682c58d2018-05-16 07:07:07 -04001936<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001937
1938### Example
1939
1940<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1941
1942#### Example Output
1943
1944~~~~
1945paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1946paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1947~~~~
1948
1949</fiddle-embed></div>
1950
1951---
1952
Cary Clark682c58d2018-05-16 07:07:07 -04001953<a name='SkPaint_setSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001954## setSubpixelText
1955
Cary Clark682c58d2018-05-16 07:07:07 -04001956<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1957void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001958</pre>
1959
Cary Clark682c58d2018-05-16 07:07:07 -04001960Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001961
Cary Clark682c58d2018-05-16 07:07:07 -04001962Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1963Clears <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 -04001964
1965### Parameters
1966
Cary Clark682c58d2018-05-16 07:07:07 -04001967<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1968 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001969 </tr>
1970</table>
1971
1972### Example
1973
1974<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1975
1976#### Example Output
1977
1978~~~~
1979paint1 == paint2
1980~~~~
1981
1982</fiddle-embed></div>
1983
1984---
1985
Cary Clark682c58d2018-05-16 07:07:07 -04001986## <a name='LCD_Text'>LCD Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001987
Cary Clarkffb3d682018-05-17 12:17:28 -04001988When 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 -04001989create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001990on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001991<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 -04001992the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001993
Cary Clark682c58d2018-05-16 07:07:07 -04001994<a name='SkPaint_isLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001995## isLCDRenderText
1996
Cary Clark682c58d2018-05-16 07:07:07 -04001997<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1998bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001999</pre>
2000
Cary Clark682c58d2018-05-16 07:07:07 -04002001If true, <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002002
Cary Clark682c58d2018-05-16 07:07:07 -04002003Returns 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 -04002004
2005### Return Value
2006
Cary Clark682c58d2018-05-16 07:07:07 -04002007<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002008
2009### Example
2010
2011<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
2012
2013#### Example Output
2014
2015~~~~
2016paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2017paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2018~~~~
2019
2020</fiddle-embed></div>
2021
2022---
2023
Cary Clark682c58d2018-05-16 07:07:07 -04002024<a name='SkPaint_setLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002025## setLCDRenderText
2026
Cary Clark682c58d2018-05-16 07:07:07 -04002027<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2028void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04002029</pre>
2030
Cary Clark682c58d2018-05-16 07:07:07 -04002031Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002032
Cary Clark682c58d2018-05-16 07:07:07 -04002033Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
2034Clears <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 -04002035
2036### Parameters
2037
Cary Clark682c58d2018-05-16 07:07:07 -04002038<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
2039 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002040 </tr>
2041</table>
2042
2043### Example
2044
2045<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
2046
2047#### Example Output
2048
2049~~~~
2050paint1 == paint2
2051~~~~
2052
2053</fiddle-embed></div>
2054
2055---
2056
Cary Clark682c58d2018-05-16 07:07:07 -04002057## <a name='Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a>
Cary Clark08895c42018-02-01 09:37:32 -05002058
Cary Clark682c58d2018-05-16 07:07:07 -04002059<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
2060<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 -05002061in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04002062
Cary Clark682c58d2018-05-16 07:07:07 -04002063FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
2064the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002065Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04002066<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04002067
Cary Clark682c58d2018-05-16 07:07:07 -04002068<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
2069<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
2070<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002071
2072### Example
2073
Cary Clarka560c472017-11-27 10:44:06 -05002074<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05002075<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05002076 includes an embedded bitmap Glyph at odd font sizes. This example works
2077 on platforms that use FreeType as their Font_Engine.
2078 Windows may, but is not required to, return a bitmap glyph if
2079 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
2080 bitmap.allocN32Pixels(30, 15);
2081 bitmap.eraseColor(0);
2082 SkCanvas offscreen(bitmap);
2083 SkPaint paint;
2084 paint.setAntiAlias(true);
2085 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05002086 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05002087 for (bool embedded : { false, true}) {
2088 paint.setEmbeddedBitmapText(embedded);
2089 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
2090 }
2091 canvas->drawBitmap(bitmap, 0, 0);
2092 canvas->scale(10, 10);
2093 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05002094
Cary Clarka560c472017-11-27 10:44:06 -05002095</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002096
Cary Clark682c58d2018-05-16 07:07:07 -04002097<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002098## isEmbeddedBitmapText
2099
Cary Clark682c58d2018-05-16 07:07:07 -04002100<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2101bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002102</pre>
2103
Cary Clark682c58d2018-05-16 07:07:07 -04002104If true, <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 -04002105
Cary Clark682c58d2018-05-16 07:07:07 -04002106Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002107
2108### Return Value
2109
Cary Clark682c58d2018-05-16 07:07:07 -04002110<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002111
2112### Example
2113
2114<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
2115
2116#### Example Output
2117
2118~~~~
2119paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2120paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2121~~~~
2122
2123</fiddle-embed></div>
2124
2125---
2126
Cary Clark682c58d2018-05-16 07:07:07 -04002127<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002128## setEmbeddedBitmapText
2129
Cary Clark682c58d2018-05-16 07:07:07 -04002130<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2131void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04002132</pre>
2133
2134Requests, but does not require, to use bitmaps in fonts instead of outlines.
2135
Cary Clark682c58d2018-05-16 07:07:07 -04002136Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
2137Clears <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 -04002138
2139### Parameters
2140
Cary Clark682c58d2018-05-16 07:07:07 -04002141<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
2142 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002143 </tr>
2144</table>
2145
2146### Example
2147
2148<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
2149
2150#### Example Output
2151
2152~~~~
2153paint1 == paint2
2154~~~~
2155
2156</fiddle-embed></div>
2157
2158---
2159
Cary Clark682c58d2018-05-16 07:07:07 -04002160## <a name='Automatic_Hinting'>Automatic Hinting</a>
Cary Clark08895c42018-02-01 09:37:32 -05002161
Cary Clark682c58d2018-05-16 07:07:07 -04002162If <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>
2163instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2164<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
2165<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002166
Cary Clark682c58d2018-05-16 07:07:07 -04002167<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 -04002168
Cary Clark682c58d2018-05-16 07:07:07 -04002169<a name='SkPaint_isAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002170## isAutohinted
2171
Cary Clark682c58d2018-05-16 07:07:07 -04002172<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2173bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002174</pre>
2175
Cary Clark682c58d2018-05-16 07:07:07 -04002176If true, and 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
2177platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>, instruct the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint
2178<a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002179
Cary Clark682c58d2018-05-16 07:07:07 -04002180Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002181
2182### Return Value
2183
Cary Clark682c58d2018-05-16 07:07:07 -04002184<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002185
2186### Example
2187
2188<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
2189
2190#### Example Output
2191
2192~~~~
2193paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2194paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2195~~~~
2196
2197</fiddle-embed></div>
2198
2199### See Also
2200
Cary Clark682c58d2018-05-16 07:07:07 -04002201<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002202
2203---
2204
Cary Clark682c58d2018-05-16 07:07:07 -04002205<a name='SkPaint_setAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002206## setAutohinted
2207
Cary Clark682c58d2018-05-16 07:07:07 -04002208<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2209void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04002210</pre>
2211
Cary Clark682c58d2018-05-16 07:07:07 -04002212If <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,
2213instruct the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2214<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
2215<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002216
Cary Clark682c58d2018-05-16 07:07:07 -04002217Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002218
Cary Clark682c58d2018-05-16 07:07:07 -04002219Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
2220Clears <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 -04002221
2222### Parameters
2223
Cary Clark682c58d2018-05-16 07:07:07 -04002224<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
2225 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002226 </tr>
2227</table>
2228
2229### Example
2230
2231<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
2232
2233### See Also
2234
Cary Clark682c58d2018-05-16 07:07:07 -04002235<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002236
2237---
2238
Cary Clark682c58d2018-05-16 07:07:07 -04002239## <a name='Vertical_Text'>Vertical Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05002240
Cary Clark682c58d2018-05-16 07:07:07 -04002241<a href='undocumented#Text'>Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
2242using <a href='undocumented#Advance'>Font Advance</a> to position subsequent <a href='undocumented#Glyph'>Glyphs</a>. By default, each successive glyph
2243is positioned to the right of the preceding glyph. <a href='#Vertical_Text'>Vertical Text</a> sets successive
2244<a href='undocumented#Glyph'>Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04002245
Cary Clark682c58d2018-05-16 07:07:07 -04002246Skia 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 -05002247font substitution,
Cary Clark137b8742018-05-30 09:21:49 -04002248textual substitution, line layout, or contextual spacing like <a href='undocumented#Kerning'>Kerning</a> pairs. Use
Cary Clark682c58d2018-05-16 07:07:07 -04002249a text shaping engine like <a href='https://harfbuzz.org/'>HarfBuzz</a></a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04002250into glyph series.
2251
Cary Clark682c58d2018-05-16 07:07:07 -04002252<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 -04002253
Cary Clark682c58d2018-05-16 07:07:07 -04002254<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if clear draws text left to right.
2255<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 -04002256
Cary Clark682c58d2018-05-16 07:07:07 -04002257<a href='#Vertical_Text'>Vertical Text</a> is clear by default.
2258<a href='#Vertical_Text'>Vertical Text</a> can be set by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
2259<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002260
2261### Example
2262
2263<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
2264
Cary Clark682c58d2018-05-16 07:07:07 -04002265<a name='SkPaint_isVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002266## isVerticalText
2267
Cary Clark682c58d2018-05-16 07:07:07 -04002268<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2269bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002270</pre>
2271
Cary Clark682c58d2018-05-16 07:07:07 -04002272If true, <a href='undocumented#Glyph'>Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04002273
Cary Clark682c58d2018-05-16 07:07:07 -04002274Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002275
2276### Return Value
2277
Cary Clark682c58d2018-05-16 07:07:07 -04002278<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002279
2280### Example
2281
2282<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
2283
2284#### Example Output
2285
2286~~~~
2287paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2288paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2289~~~~
2290
2291</fiddle-embed></div>
2292
2293---
2294
Cary Clark682c58d2018-05-16 07:07:07 -04002295<a name='SkPaint_setVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002296## setVerticalText
2297
Cary Clark682c58d2018-05-16 07:07:07 -04002298<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2299void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText)
Cary Clark12799e12017-07-28 15:18:29 -04002300</pre>
2301
2302If true, text advance positions the next glyph below the previous glyph instead of to the
2303right of previous glyph.
2304
Cary Clark682c58d2018-05-16 07:07:07 -04002305Sets <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is true.
2306Clears <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04002307
2308### Parameters
2309
Cary Clark682c58d2018-05-16 07:07:07 -04002310<table> <tr> <td><a name='SkPaint_setVerticalText_verticalText'><code><strong>verticalText</strong></code></a></td>
2311 <td>setting for <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002312 </tr>
2313</table>
2314
2315### Example
2316
2317<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
2318
2319#### Example Output
2320
2321~~~~
2322paint1 == paint2
2323~~~~
2324
2325</fiddle-embed></div>
2326
2327---
2328
Cary Clark682c58d2018-05-16 07:07:07 -04002329## <a name='Fake_Bold'>Fake Bold</a>
Cary Clark08895c42018-02-01 09:37:32 -05002330
Cary Clark682c58d2018-05-16 07:07:07 -04002331<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 -05002332is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04002333bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002334
Cary Clark682c58d2018-05-16 07:07:07 -04002335Use <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 -04002336is not available.
2337
Cary Clark7cfcbca2018-01-04 16:11:51 -05002338A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04002339the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
2340by 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 -04002341
Cary Clark682c58d2018-05-16 07:07:07 -04002342<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04002343
2344### Example
2345
2346<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
2347
Cary Clark682c58d2018-05-16 07:07:07 -04002348<a name='SkPaint_isFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002349## isFakeBoldText
2350
Cary Clark682c58d2018-05-16 07:07:07 -04002351<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2352bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002353</pre>
2354
2355If true, approximate bold by increasing the stroke width when creating glyph bitmaps
2356from outlines.
2357
Cary Clark682c58d2018-05-16 07:07:07 -04002358Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002359
2360### Return Value
2361
Cary Clark682c58d2018-05-16 07:07:07 -04002362<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002363
2364### Example
2365
2366<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
2367
2368#### Example Output
2369
2370~~~~
2371paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2372paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2373~~~~
2374
2375</fiddle-embed></div>
2376
2377---
2378
Cary Clark682c58d2018-05-16 07:07:07 -04002379<a name='SkPaint_setFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002380## setFakeBoldText
2381
Cary Clark682c58d2018-05-16 07:07:07 -04002382<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2383void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04002384</pre>
2385
Cary Clarkce101242017-09-01 15:51:02 -04002386Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04002387
Cary Clark682c58d2018-05-16 07:07:07 -04002388Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
2389Clears <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 -04002390
2391### Parameters
2392
Cary Clark682c58d2018-05-16 07:07:07 -04002393<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
2394 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002395 </tr>
2396</table>
2397
2398### Example
2399
2400<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
2401
2402#### Example Output
2403
2404~~~~
2405paint1 == paint2
2406~~~~
2407
2408</fiddle-embed></div>
2409
2410---
2411
Cary Clark682c58d2018-05-16 07:07:07 -04002412## <a name='Full_Hinting_Spacing'>Full Hinting Spacing</a>
Cary Clark08895c42018-02-01 09:37:32 -05002413
Cary Clark682c58d2018-05-16 07:07:07 -04002414if <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 -04002415spacing 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 -04002416<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
2417FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002418
Cary Clark137b8742018-05-30 09:21:49 -04002419<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
2420a 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 -04002421
Cary Clark682c58d2018-05-16 07:07:07 -04002422<a name='SkPaint_isDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002423## isDevKernText
2424
Cary Clark682c58d2018-05-16 07:07:07 -04002425<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2426bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002427</pre>
2428
Cary Clark682c58d2018-05-16 07:07:07 -04002429Deprecated.
2430
Cary Clark12799e12017-07-28 15:18:29 -04002431---
2432
Cary Clark682c58d2018-05-16 07:07:07 -04002433<a name='SkPaint_setDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002434## setDevKernText
2435
Cary Clark682c58d2018-05-16 07:07:07 -04002436<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2437void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04002438</pre>
2439
Cary Clark682c58d2018-05-16 07:07:07 -04002440Deprecated.
2441
Cary Clark12799e12017-07-28 15:18:29 -04002442---
2443
Cary Clark682c58d2018-05-16 07:07:07 -04002444## <a name='Filter_Quality_Methods'>Filter Quality Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05002445
Cary Clark682c58d2018-05-16 07:07:07 -04002446<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
2447A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
2448A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
2449If 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 -04002450in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04002451
Cary Clark682c58d2018-05-16 07:07:07 -04002452<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 -04002453
2454<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002455 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
2456 </tr> <tr>
2457 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
2458 </tr> <tr>
2459 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
2460 </tr> <tr>
2461 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
2462 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002463</table>
2464
Cary Clark682c58d2018-05-16 07:07:07 -04002465and 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 -04002466
Cary Clark682c58d2018-05-16 07:07:07 -04002467<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 -04002468
2469### Example
2470
skia-bookmaker525f9a92018-05-03 06:27:39 +00002471<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002472
Cary Clark682c58d2018-05-16 07:07:07 -04002473<a name='SkPaint_getFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002474## getFilterQuality
2475
Cary Clark682c58d2018-05-16 07:07:07 -04002476<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2477<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002478</pre>
2479
Cary Clark682c58d2018-05-16 07:07:07 -04002480Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002481draws faster; a higher setting looks better when the image is scaled.
2482
2483### Return Value
2484
Cary Clark682c58d2018-05-16 07:07:07 -04002485one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2486<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04002487
2488### Example
2489
2490<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
2491
2492#### Example Output
2493
2494~~~~
2495kNone_SkFilterQuality == paint.getFilterQuality()
2496~~~~
2497
2498</fiddle-embed></div>
2499
2500---
2501
Cary Clark682c58d2018-05-16 07:07:07 -04002502<a name='SkPaint_setFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002503## setFilterQuality
2504
Cary Clark682c58d2018-05-16 07:07:07 -04002505<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2506void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04002507</pre>
2508
Cary Clark682c58d2018-05-16 07:07:07 -04002509Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002510draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04002511Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04002512
2513### Parameters
2514
Cary Clark682c58d2018-05-16 07:07:07 -04002515<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
2516 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2517<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002518 </tr>
2519</table>
2520
2521### Example
2522
2523<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
2524
2525#### Example Output
2526
2527~~~~
2528kHigh_SkFilterQuality == paint.getFilterQuality()
2529~~~~
2530
2531</fiddle-embed></div>
2532
2533### See Also
2534
Cary Clark682c58d2018-05-16 07:07:07 -04002535<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04002536
2537---
2538
Cary Clark682c58d2018-05-16 07:07:07 -04002539## <a name='Color_Methods'>Color Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002540
Cary Clarkab2621d2018-01-30 10:08:57 -05002541| name | description |
2542| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04002543| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
2544| <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 -04002545
Cary Clarkffb3d682018-05-17 12:17:28 -04002546<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 -05002547values used to draw a filled or stroked shape in a 32-bit value. Each component
2548occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
2549All values in any combination are valid.
2550
Cary Clark682c58d2018-05-16 07:07:07 -04002551<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 -04002552RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05002553
Cary Clarkffb3d682018-05-17 12:17:28 -04002554The 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 -05002555positions on the output device, which may have more or fewer bits, and may have
2556a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04002557
Cary Clarkffb3d682018-05-17 12:17:28 -04002558| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04002559| --- | --- | --- | --- | --- |
2560| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
2561
2562### Example
2563
2564<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
2565
Cary Clark682c58d2018-05-16 07:07:07 -04002566<a name='SkPaint_getColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002567## getColor
2568
Cary Clark682c58d2018-05-16 07:07:07 -04002569<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2570<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002571</pre>
2572
Cary Clarkffb3d682018-05-17 12:17:28 -04002573Retrieves <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 -04002574Use 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 -04002575a color component.
2576
2577### Return Value
2578
Cary Clarkffb3d682018-05-17 12:17:28 -04002579<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04002580
2581### Example
2582
2583<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
2584
2585#### Example Output
2586
2587~~~~
2588Yellow is 100% red, 100% green, and 0% blue.
2589~~~~
2590
2591</fiddle-embed></div>
2592
2593### See Also
2594
Cary Clark682c58d2018-05-16 07:07:07 -04002595<a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04002596
2597---
2598
Cary Clark682c58d2018-05-16 07:07:07 -04002599<a name='SkPaint_setColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002600## setColor
2601
Cary Clark682c58d2018-05-16 07:07:07 -04002602<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2603void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04002604</pre>
2605
Cary Clarkffb3d682018-05-17 12:17:28 -04002606Sets <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,
2607<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 -04002608
2609### Parameters
2610
Cary Clark682c58d2018-05-16 07:07:07 -04002611<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002612 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04002613 </tr>
2614</table>
2615
2616### Example
2617
2618<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
2619
2620#### Example Output
2621
2622~~~~
2623green1 == green2
2624~~~~
2625
2626</fiddle-embed></div>
2627
2628### See Also
2629
Cary Clark682c58d2018-05-16 07:07:07 -04002630<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002631
2632---
2633
Cary Clark682c58d2018-05-16 07:07:07 -04002634## <a name='Alpha_Methods'>Alpha Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002635
Cary Clarkffb3d682018-05-17 12:17:28 -04002636<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 -04002637
Cary Clark682c58d2018-05-16 07:07:07 -04002638<a name='SkPaint_getAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002639## getAlpha
2640
Cary Clark682c58d2018-05-16 07:07:07 -04002641<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2642uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002643</pre>
2644
Cary Clark682c58d2018-05-16 07:07:07 -04002645Retrieves <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 -04002646
2647### Return Value
2648
Cary Clark682c58d2018-05-16 07:07:07 -04002649<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04002650
2651### Example
2652
2653<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
2654
2655#### Example Output
2656
2657~~~~
2658255 == paint.getAlpha()
2659~~~~
2660
2661</fiddle-embed></div>
2662
2663---
2664
Cary Clark682c58d2018-05-16 07:07:07 -04002665<a name='SkPaint_setAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002666## setAlpha
2667
Cary Clark682c58d2018-05-16 07:07:07 -04002668<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2669void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04002670</pre>
2671
Cary Clarkffb3d682018-05-17 12:17:28 -04002672Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04002673unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04002674build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
2675<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 -04002676fully opaque.
2677
2678### Parameters
2679
Cary Clark682c58d2018-05-16 07:07:07 -04002680<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
2681 <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 -04002682 </tr>
2683</table>
2684
2685### Example
2686
2687<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
2688
2689#### Example Output
2690
2691~~~~
26920x44112233 == paint.getColor()
2693~~~~
2694
2695</fiddle-embed></div>
2696
2697---
2698
Cary Clark682c58d2018-05-16 07:07:07 -04002699<a name='SkPaint_setARGB'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002700## setARGB
2701
Cary Clark682c58d2018-05-16 07:07:07 -04002702<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2703void <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 -04002704</pre>
2705
Cary Clark682c58d2018-05-16 07:07:07 -04002706Sets <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 -04002707The 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 -04002708
2709### Parameters
2710
Cary Clark682c58d2018-05-16 07:07:07 -04002711<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2712 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2713 </tr>
2714 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002715 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002716 </tr>
2717 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002718 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002719 </tr>
2720 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002721 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002722 </tr>
2723</table>
2724
2725### Example
2726
2727<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2728
2729#### Example Output
2730
2731~~~~
2732transRed1 == transRed2
2733~~~~
2734
2735</fiddle-embed></div>
2736
2737### See Also
2738
Cary Clark682c58d2018-05-16 07:07:07 -04002739<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002740
2741---
2742
Cary Clark682c58d2018-05-16 07:07:07 -04002743## <a name='Style'>Style</a>
Cary Clark08895c42018-02-01 09:37:32 -05002744
Cary Clark682c58d2018-05-16 07:07:07 -04002745<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2746Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002747
Cary Clark682c58d2018-05-16 07:07:07 -04002748Set <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 -04002749The fill covers the area inside the geometry for most shapes.
2750
Cary Clark682c58d2018-05-16 07:07:07 -04002751Set <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 -04002752
Cary Clark682c58d2018-05-16 07:07:07 -04002753## <a name='Style_Fill'>Style Fill</a>
Cary Clark12799e12017-07-28 15:18:29 -04002754
2755### See Also
2756
Cary Clark682c58d2018-05-16 07:07:07 -04002757<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002758
Cary Clark682c58d2018-05-16 07:07:07 -04002759## <a name='Style_Stroke'>Style Stroke</a>
Cary Clark12799e12017-07-28 15:18:29 -04002760
Cary Clarkbc5697d2017-10-04 14:31:33 -04002761The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002762<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>.
2763The area covered where the shape turns a corner is described by <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002764The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002765
Cary Clark682c58d2018-05-16 07:07:07 -04002766As <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
2767may 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 -04002768
Cary Clark682c58d2018-05-16 07:07:07 -04002769## <a name='Style_Hairline'>Style Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002770
Cary Clark682c58d2018-05-16 07:07:07 -04002771<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Style_Hairline'>Hairline</a>.
2772<a href='#Style_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 -05002773flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002774
Cary Clark682c58d2018-05-16 07:07:07 -04002775<a href='SkPath_Reference#Path'>Path</a> drawing with <a href='#Style_Hairline'>Hairline</a> may hit the same pixel more than once. For instance, <a href='SkPath_Reference#Path'>Path</a> containing
2776two lines in one <a href='SkPath_Reference#Contour'>Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2777pixel. 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 -05002778GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002779while stroking.
2780
Cary Clark682c58d2018-05-16 07:07:07 -04002781## <a name='SkPaint_Style'>Enum SkPaint::Style</a>
Cary Clark12799e12017-07-28 15:18:29 -04002782
Cary Clarka560c472017-11-27 10:44:06 -05002783<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002784 enum <a href='#SkPaint_Style'>Style</a> {
2785 <a href='#SkPaint_kFill_Style'>kFill Style</a>,
2786 <a href='#SkPaint_kStroke_Style'>kStroke Style</a>,
2787 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002788 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002789
Cary Clark682c58d2018-05-16 07:07:07 -04002790 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 -05002791</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002792
Cary Clark682c58d2018-05-16 07:07:07 -04002793Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002794The stroke and fill
2795share all paint attributes; for instance, they are drawn with the same color.
2796
Cary Clark682c58d2018-05-16 07:07:07 -04002797Use <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 -04002798a fill draw.
2799
2800### Constants
2801
Cary Clark682c58d2018-05-16 07:07:07 -04002802<table style='border-collapse: collapse; width: 62.5em'>
2803 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2804<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2805<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2806 <tr style='background-color: #f0f0f0; '>
2807 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2808 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2809 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2810Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Round_Rect'>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>.
2811<a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkImage_Reference#Image'>Image</a>, <a href='undocumented#Patch'>Patches</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Sprite'>Sprites</a>, and <a href='undocumented#Vertices'>Vertices</a> are painted as if
2812<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2813The <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 -04002814and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002815<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 -05002816</td>
Cary Clark12799e12017-07-28 15:18:29 -04002817 </tr>
2818 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2820 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2821 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2822Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Round_Rect'>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>.
2823<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,
2824and ignore the set <a href='#SkPaint_Style'>Style</a>.
2825The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2826</td>
2827 </tr>
2828 <tr style='background-color: #f0f0f0; '>
2829 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2830 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2831 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2832Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Round_Rect'>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>.
2833<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>,
2834and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002835</td>
Cary Clark12799e12017-07-28 15:18:29 -04002836 </tr>
2837 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002838 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2839 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2840 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2841May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002842</td>
Cary Clark12799e12017-07-28 15:18:29 -04002843 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002844</table>
Cary Clark12799e12017-07-28 15:18:29 -04002845
Cary Clark682c58d2018-05-16 07:07:07 -04002846<a name='SkPaint_getStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002847## getStyle
2848
Cary Clark682c58d2018-05-16 07:07:07 -04002849<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2850<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002851</pre>
2852
2853Whether the geometry is filled, stroked, or filled and stroked.
2854
2855### Return Value
2856
Cary Clark682c58d2018-05-16 07:07:07 -04002857one 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 -04002858
2859### Example
2860
2861<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2862
2863#### Example Output
2864
2865~~~~
2866SkPaint::kFill_Style == paint.getStyle()
2867~~~~
2868
2869</fiddle-embed></div>
2870
2871### See Also
2872
Cary Clark682c58d2018-05-16 07:07:07 -04002873<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002874
2875---
2876
Cary Clark682c58d2018-05-16 07:07:07 -04002877<a name='SkPaint_setStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002878## setStyle
2879
Cary Clark682c58d2018-05-16 07:07:07 -04002880<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2881void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002882</pre>
2883
2884Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002885Has 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 -04002886
2887### Parameters
2888
Cary Clark682c58d2018-05-16 07:07:07 -04002889<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2890 <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 -04002891 </tr>
2892</table>
2893
2894### Example
2895
2896<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2897
2898### See Also
2899
Cary Clark682c58d2018-05-16 07:07:07 -04002900<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002901
2902---
2903
2904### See Also
2905
Cary Clark682c58d2018-05-16 07:07:07 -04002906<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>
Cary Clark12799e12017-07-28 15:18:29 -04002907
Cary Clark682c58d2018-05-16 07:07:07 -04002908## <a name='Stroke_Width'>Stroke Width</a>
Cary Clark08895c42018-02-01 09:37:32 -05002909
Cary Clark682c58d2018-05-16 07:07:07 -04002910<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002911of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002912set 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 -04002913
2914When width is greater than zero, the stroke encompasses as many pixels partially
2915or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002916the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002917
Cary Clark682c58d2018-05-16 07:07:07 -04002918The stroke dimensions are scaled by the canvas matrix, but <a href='#Style_Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002919remains one pixel wide regardless of scaling.
2920
2921The default width for the paint is zero.
2922
2923### Example
2924
skia-bookmaker525f9a92018-05-03 06:27:39 +00002925<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 -05002926line and the platform implementation.
2927</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002928
Cary Clark682c58d2018-05-16 07:07:07 -04002929<a name='SkPaint_getStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002930## getStrokeWidth
2931
Cary Clark682c58d2018-05-16 07:07:07 -04002932<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2933<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002934</pre>
2935
Cary Clark682c58d2018-05-16 07:07:07 -04002936Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002937outline the shape.
2938
2939### Return Value
2940
Cary Clark682c58d2018-05-16 07:07:07 -04002941zero for <a href='#Style_Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002942
2943### Example
2944
2945<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2946
2947#### Example Output
2948
2949~~~~
29500 == paint.getStrokeWidth()
2951~~~~
2952
2953</fiddle-embed></div>
2954
2955---
2956
Cary Clark682c58d2018-05-16 07:07:07 -04002957<a name='SkPaint_setStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002958## setStrokeWidth
2959
Cary Clark682c58d2018-05-16 07:07:07 -04002960<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2961void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002962</pre>
2963
2964Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002965outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002966Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002967
2968### Parameters
2969
Cary Clark682c58d2018-05-16 07:07:07 -04002970<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
2971 <td>zero thickness for <a href='#Style_Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002972 </tr>
2973</table>
2974
2975### Example
2976
2977<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2978
2979#### Example Output
2980
2981~~~~
29825 == paint.getStrokeWidth()
2983~~~~
2984
2985</fiddle-embed></div>
2986
2987---
2988
Cary Clark682c58d2018-05-16 07:07:07 -04002989## <a name='Miter_Limit'>Miter Limit</a>
Cary Clark08895c42018-02-01 09:37:32 -05002990
Cary Clark682c58d2018-05-16 07:07:07 -04002991<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002992relative to the stroke width.
2993
Cary Clark682c58d2018-05-16 07:07:07 -04002994<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2995is 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>
2996or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002997
Cary Clark682c58d2018-05-16 07:07:07 -04002998If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
2999is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003000
Cary Clark682c58d2018-05-16 07:07:07 -04003001<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04003002
Cary Clark682c58d2018-05-16 07:07:07 -04003003miter limit = 1 / sin ( angle / 2 )<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
3004The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003005in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04003006
3007Here are some miter limits and the angles that triggers them.
3008
3009| miter limit | angle in degrees |
3010| --- | --- |
3011| 10 | 11.48 |
3012| 9 | 12.76 |
3013| 8 | 14.36 |
3014| 7 | 16.43 |
3015| 6 | 19.19 |
3016| 5 | 23.07 |
3017| 4 | 28.96 |
3018| 3 | 38.94 |
3019| 2 | 60 |
3020| 1 | 180 |
3021
3022### Example
3023
3024<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
3025When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05003026by a bevel join.
3027</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003028
Cary Clark682c58d2018-05-16 07:07:07 -04003029<a name='SkPaint_getStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003030## getStrokeMiter
3031
Cary Clark682c58d2018-05-16 07:07:07 -04003032<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3033<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003034</pre>
3035
3036The limit at which a sharp corner is drawn beveled.
3037
3038### Return Value
3039
Cary Clark682c58d2018-05-16 07:07:07 -04003040zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003041
3042### Example
3043
3044<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
3045
3046#### Example Output
3047
3048~~~~
3049default miter limit == 4
3050~~~~
3051
3052</fiddle-embed></div>
3053
3054### See Also
3055
Cary Clark682c58d2018-05-16 07:07:07 -04003056<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 -04003057
3058---
3059
Cary Clark682c58d2018-05-16 07:07:07 -04003060<a name='SkPaint_setStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003061## setStrokeMiter
3062
Cary Clark682c58d2018-05-16 07:07:07 -04003063<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3064void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04003065</pre>
3066
3067The limit at which a sharp corner is drawn beveled.
3068Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04003069Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04003070
3071### Parameters
3072
Cary Clark682c58d2018-05-16 07:07:07 -04003073<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
3074 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003075 </tr>
3076</table>
3077
3078### Example
3079
3080<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
3081
3082#### Example Output
3083
3084~~~~
3085default miter limit == 8
3086~~~~
3087
3088</fiddle-embed></div>
3089
3090### See Also
3091
Cary Clark682c58d2018-05-16 07:07:07 -04003092<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 -04003093
3094---
3095
Cary Clark682c58d2018-05-16 07:07:07 -04003096## <a name='Stroke_Cap'>Stroke Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003097
Cary Clark682c58d2018-05-16 07:07:07 -04003098## <a name='SkPaint_Cap'>Enum SkPaint::Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003099
Cary Clarka560c472017-11-27 10:44:06 -05003100<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003101 enum <a href='#SkPaint_Cap'>Cap</a> {
3102 <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
3103 <a href='#SkPaint_kRound_Cap'>kRound Cap</a>,
3104 <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003105
Cary Clark682c58d2018-05-16 07:07:07 -04003106 <a href='#SkPaint_kLast_Cap'>kLast Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
3107 <a href='#SkPaint_kDefault_Cap'>kDefault Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003108 };
Cary Clark6fc50412017-09-21 12:31:06 -04003109
Cary Clark682c58d2018-05-16 07:07:07 -04003110 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 -05003111</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003112
Cary Clark682c58d2018-05-16 07:07:07 -04003113<a href='#Stroke_Cap'>Stroke Cap</a> draws at the beginning and end of an open <a href='SkPath_Reference#Contour'>Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003114
3115### Constants
3116
Cary Clark682c58d2018-05-16 07:07:07 -04003117<table style='border-collapse: collapse; width: 62.5em'>
3118 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3119<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3120<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3121 <tr style='background-color: #f0f0f0; '>
3122 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
3123 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3124 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3125Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05003126</td>
Cary Clark12799e12017-07-28 15:18:29 -04003127 </tr>
3128 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003129 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
3130 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3131 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3132Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05003133and end.
3134</td>
Cary Clark12799e12017-07-28 15:18:29 -04003135 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003136 <tr style='background-color: #f0f0f0; '>
3137 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
3138 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3139 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3140Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04003141and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05003142of the stroke.
3143</td>
Cary Clark12799e12017-07-28 15:18:29 -04003144 </tr>
3145 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003146 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
3147 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3148 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3149Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
3150</td>
3151 </tr>
3152 <tr style='background-color: #f0f0f0; '>
3153 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
3154 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3155 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3156<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 -05003157</td>
Cary Clark12799e12017-07-28 15:18:29 -04003158 </tr>
3159 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003160 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
3161 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3162 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3163May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003164</td>
Cary Clark12799e12017-07-28 15:18:29 -04003165 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003166</table>
Cary Clark12799e12017-07-28 15:18:29 -04003167
Cary Clark682c58d2018-05-16 07:07:07 -04003168Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3169follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003170
Cary Clark682c58d2018-05-16 07:07:07 -04003171If the <a href='SkPath_Reference#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 -04003172visible beginning and end.
3173
Cary Clark682c58d2018-05-16 07:07:07 -04003174<a href='SkPath_Reference#Contour'>Path Contour</a> may start and end at the same point; defining <a href='SkPath_Reference#Contour_Zero_Length'>Zero Length Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003175
Cary Clark682c58d2018-05-16 07:07:07 -04003176<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Reference#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
3177<a href='#SkPaint_kRound_Cap'>kRound Cap</a> and <a href='SkPath_Reference#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 -04003178at the contour point.
Cary Clark682c58d2018-05-16 07:07:07 -04003179<a href='#SkPaint_kSquare_Cap'>kSquare Cap</a> and <a href='SkPath_Reference#Contour_Zero_Length'>Zero Length Contour</a> draws an upright square with a side of
3180<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04003181
Cary Clark682c58d2018-05-16 07:07:07 -04003182<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 -04003183
Cary Clark12799e12017-07-28 15:18:29 -04003184### Example
3185
Cary Clark2ade9972017-11-02 17:49:34 -04003186<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003187
Cary Clark682c58d2018-05-16 07:07:07 -04003188<a name='SkPaint_getStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003189## getStrokeCap
3190
Cary Clark682c58d2018-05-16 07:07:07 -04003191<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3192<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003193</pre>
3194
3195The geometry drawn at the beginning and end of strokes.
3196
3197### Return Value
3198
Cary Clark682c58d2018-05-16 07:07:07 -04003199one 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 -04003200
3201### Example
3202
3203<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
3204
3205#### Example Output
3206
3207~~~~
3208kButt_Cap == default stroke cap
3209~~~~
3210
3211</fiddle-embed></div>
3212
3213### See Also
3214
Cary Clark682c58d2018-05-16 07:07:07 -04003215<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003216
3217---
3218
Cary Clark682c58d2018-05-16 07:07:07 -04003219<a name='SkPaint_setStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003220## setStrokeCap
3221
Cary Clark682c58d2018-05-16 07:07:07 -04003222<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3223void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04003224</pre>
3225
3226The geometry drawn at the beginning and end of strokes.
3227
3228### Parameters
3229
Cary Clark682c58d2018-05-16 07:07:07 -04003230<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
3231 <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>;
3232has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04003233 </tr>
3234</table>
3235
3236### Example
3237
3238<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
3239
3240#### Example Output
3241
3242~~~~
3243kRound_Cap == paint.getStrokeCap()
3244~~~~
3245
3246</fiddle-embed></div>
3247
3248### See Also
3249
Cary Clark682c58d2018-05-16 07:07:07 -04003250<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003251
3252---
3253
Cary Clark682c58d2018-05-16 07:07:07 -04003254## <a name='Stroke_Join'>Stroke Join</a>
Cary Clark08895c42018-02-01 09:37:32 -05003255
Cary Clark682c58d2018-05-16 07:07:07 -04003256<a href='#Stroke_Join'>Stroke Join</a> draws at the sharp corners of an open or closed <a href='SkPath_Reference#Contour'>Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003257
Cary Clark682c58d2018-05-16 07:07:07 -04003258Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3259follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003260
3261If the contour direction changes abruptly, because the tangent direction leading
3262to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04003263the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003264
3265### Example
3266
Cary Clark2ade9972017-11-02 17:49:34 -04003267<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003268
Cary Clark682c58d2018-05-16 07:07:07 -04003269## <a name='SkPaint_Join'>Enum SkPaint::Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04003270
Cary Clarka560c472017-11-27 10:44:06 -05003271<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003272 enum <a href='#SkPaint_Join'>Join</a> {
3273 <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
3274 <a href='#SkPaint_kRound_Join'>kRound Join</a>,
3275 <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003276
Cary Clark682c58d2018-05-16 07:07:07 -04003277 <a href='#SkPaint_kLast_Join'>kLast Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
3278 <a href='#SkPaint_kDefault_Join'>kDefault Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003279 };
Cary Clark6fc50412017-09-21 12:31:06 -04003280
Cary Clark682c58d2018-05-16 07:07:07 -04003281 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 -05003282</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003283
Cary Clark682c58d2018-05-16 07:07:07 -04003284<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 -04003285affects the four corners of a stroked rectangle, and the connected segments in a
3286stroked path.
3287
3288Choose miter join to draw sharp corners. Choose round join to draw a circle with a
3289radius equal to the stroke width on top of the corner. Choose bevel join to minimally
3290connect the thick strokes.
3291
Cary Clark7cfcbca2018-01-04 16:11:51 -05003292The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04003293not contain the actual join. For instance, a fill path constructed with round joins does
3294not necessarily include circles at each connected segment.
3295
3296### Constants
3297
Cary Clark682c58d2018-05-16 07:07:07 -04003298<table style='border-collapse: collapse; width: 62.5em'>
3299 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3300<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3301<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3302 <tr style='background-color: #f0f0f0; '>
3303 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
3304 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3305 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3306Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
3307If 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 -05003308</td>
Cary Clark12799e12017-07-28 15:18:29 -04003309 </tr>
3310 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003311 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
3312 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3313 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3314Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
3315</td>
3316 </tr>
3317 <tr style='background-color: #f0f0f0; '>
3318 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
3319 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3320 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3321Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05003322</td>
Cary Clark12799e12017-07-28 15:18:29 -04003323 </tr>
3324 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003325 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
3326 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3328equivalent to the largest value for Stroke_Join</td>
3329 </tr>
3330 <tr style='background-color: #f0f0f0; '>
3331 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
3332 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3333 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3334<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 -05003335</td>
Cary Clark12799e12017-07-28 15:18:29 -04003336 </tr>
3337 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003338 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
3339 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3340 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3341May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003342</td>
Cary Clark12799e12017-07-28 15:18:29 -04003343 </tr>
3344</table>
3345
3346### Example
3347
3348<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
3349
3350### See Also
3351
Cary Clark682c58d2018-05-16 07:07:07 -04003352<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 -04003353
Cary Clark682c58d2018-05-16 07:07:07 -04003354<a name='SkPaint_getStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003355## getStrokeJoin
3356
Cary Clark682c58d2018-05-16 07:07:07 -04003357<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3358<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003359</pre>
3360
Cary Clark0c5f5462017-12-15 11:21:51 -05003361The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003362
3363### Return Value
3364
Cary Clark682c58d2018-05-16 07:07:07 -04003365one 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 -04003366
3367### Example
3368
3369<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
3370
3371#### Example Output
3372
3373~~~~
3374kMiter_Join == default stroke join
3375~~~~
3376
3377</fiddle-embed></div>
3378
3379### See Also
3380
Cary Clark682c58d2018-05-16 07:07:07 -04003381<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003382
3383---
3384
Cary Clark682c58d2018-05-16 07:07:07 -04003385<a name='SkPaint_setStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003386## setStrokeJoin
3387
Cary Clark682c58d2018-05-16 07:07:07 -04003388<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3389void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04003390</pre>
3391
Cary Clark0c5f5462017-12-15 11:21:51 -05003392The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003393
3394### Parameters
3395
Cary Clark682c58d2018-05-16 07:07:07 -04003396<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
3397 <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 -04003398otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04003399 </tr>
3400</table>
3401
3402### Example
3403
3404<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
3405
3406#### Example Output
3407
3408~~~~
3409kMiter_Join == paint.getStrokeJoin()
3410~~~~
3411
3412</fiddle-embed></div>
3413
3414### See Also
3415
Cary Clark682c58d2018-05-16 07:07:07 -04003416<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003417
3418---
3419
3420### See Also
3421
Cary Clark682c58d2018-05-16 07:07:07 -04003422<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003423
Cary Clark682c58d2018-05-16 07:07:07 -04003424## <a name='Fill_Path'>Fill Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05003425
Cary Clark682c58d2018-05-16 07:07:07 -04003426<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 -04003427
Cary Clark682c58d2018-05-16 07:07:07 -04003428If <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
3429replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
3430destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003431
Cary Clark682c58d2018-05-16 07:07:07 -04003432Fill <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
3433the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04003434
Cary Clark682c58d2018-05-16 07:07:07 -04003435If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
3436and <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>,
3437and <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 -04003438
Cary Clark682c58d2018-05-16 07:07:07 -04003439Fill <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 -04003440
Cary Clark682c58d2018-05-16 07:07:07 -04003441If 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>
3442returns false since <a href='#Style_Hairline'>Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04003443
Cary Clark682c58d2018-05-16 07:07:07 -04003444<a name='SkPaint_getFillPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003445## getFillPath
3446
Cary Clark682c58d2018-05-16 07:07:07 -04003447<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3448bool <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 -04003449</pre>
3450
3451The filled equivalent of the stroked path.
3452
3453### Parameters
3454
Cary Clark682c58d2018-05-16 07:07:07 -04003455<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
3456 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3457 </tr>
3458 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
3459 <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>
3460 </tr>
3461 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
3462 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
3463 </tr>
3464 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
3465 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04003466to favor speed and size</td>
3467 </tr>
3468</table>
3469
3470### Return Value
3471
Cary Clark682c58d2018-05-16 07:07:07 -04003472true if the path represents <a href='#Style_Fill'>Style Fill</a>, or false if it represents <a href='#Style_Hairline'>Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04003473
3474### Example
3475
Cary Clark682c58d2018-05-16 07:07:07 -04003476<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.
3477At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05003478At the highest precision, the filled path has high fidelity compared to the original stroke.
3479</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003480
3481---
3482
Cary Clark682c58d2018-05-16 07:07:07 -04003483<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05003484
Cary Clark682c58d2018-05-16 07:07:07 -04003485<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3486bool <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 -04003487</pre>
3488
3489The filled equivalent of the stroked path.
3490
Cary Clark682c58d2018-05-16 07:07:07 -04003491Replaces <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>.
3492<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 -04003493
3494### Parameters
3495
Cary Clark682c58d2018-05-16 07:07:07 -04003496<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
3497 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3498 </tr>
3499 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
3500 <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 -04003501 </tr>
3502</table>
3503
3504### Return Value
3505
Cary Clark682c58d2018-05-16 07:07:07 -04003506true if the path represents <a href='#Style_Fill'>Style Fill</a>, or false if it represents <a href='#Style_Hairline'>Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04003507
3508### Example
3509
3510<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
3511
3512---
3513
3514### See Also
3515
Cary Clark682c58d2018-05-16 07:07:07 -04003516<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 -04003517
Cary Clark682c58d2018-05-16 07:07:07 -04003518## <a name='Shader_Methods'>Shader Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003519
Cary Clark682c58d2018-05-16 07:07:07 -04003520<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
3521<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
3522If <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 -04003523
Cary Clark682c58d2018-05-16 07:07:07 -04003524<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>.
3525If <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 -04003526the fill.
3527
Cary Clark682c58d2018-05-16 07:07:07 -04003528The 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 -04003529
3530### Example
3531
3532<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
3533
Cary Clark682c58d2018-05-16 07:07:07 -04003534If <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 -04003535
3536### Example
3537
skia-bookmaker525f9a92018-05-03 06:27:39 +00003538<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003539
Cary Clark682c58d2018-05-16 07:07:07 -04003540<a name='SkPaint_getShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003541## getShader
3542
Cary Clark682c58d2018-05-16 07:07:07 -04003543<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3544<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003545</pre>
3546
3547Optional colors used when filling a path, such as a gradient.
3548
Cary Clark682c58d2018-05-16 07:07:07 -04003549Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003550
3551### Return Value
3552
Cary Clark682c58d2018-05-16 07:07:07 -04003553<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003554
3555### Example
3556
3557<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
3558
3559#### Example Output
3560
3561~~~~
3562nullptr == shader
3563nullptr != shader
3564~~~~
3565
3566</fiddle-embed></div>
3567
3568---
3569
Cary Clark682c58d2018-05-16 07:07:07 -04003570<a name='SkPaint_refShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003571## refShader
3572
Cary Clark682c58d2018-05-16 07:07:07 -04003573<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3574<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 -04003575</pre>
3576
3577Optional colors used when filling a path, such as a gradient.
3578
Cary Clark682c58d2018-05-16 07:07:07 -04003579Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003580
3581### Return Value
3582
Cary Clark682c58d2018-05-16 07:07:07 -04003583<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003584
3585### Example
3586
3587<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
3588
3589#### Example Output
3590
3591~~~~
3592shader unique: true
3593shader unique: false
3594~~~~
3595
3596</fiddle-embed></div>
3597
3598---
3599
Cary Clark682c58d2018-05-16 07:07:07 -04003600<a name='SkPaint_setShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003601## setShader
3602
Cary Clark682c58d2018-05-16 07:07:07 -04003603<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3604void <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 -04003605</pre>
3606
3607Optional colors used when filling a path, such as a gradient.
3608
Cary Clark682c58d2018-05-16 07:07:07 -04003609Sets <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>.
3610Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003611
3612### Parameters
3613
Cary Clark682c58d2018-05-16 07:07:07 -04003614<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
3615 <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 -04003616 </tr>
3617</table>
3618
3619### Example
3620
3621<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
3622
3623---
3624
Cary Clark682c58d2018-05-16 07:07:07 -04003625## <a name='Color_Filter_Methods'>Color Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003626
Cary Clark682c58d2018-05-16 07:07:07 -04003627<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
3628<a href='undocumented#Color_Filter'>Color Filter</a> may apply <a href='undocumented#Blend_Mode'>Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
3629If <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 -04003630
Cary Clark682c58d2018-05-16 07:07:07 -04003631The 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 -04003632
3633### Example
3634
3635<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
3636
Cary Clark682c58d2018-05-16 07:07:07 -04003637<a name='SkPaint_getColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003638## getColorFilter
3639
Cary Clark682c58d2018-05-16 07:07:07 -04003640<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3641<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003642</pre>
3643
Cary Clark682c58d2018-05-16 07:07:07 -04003644Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3645Does 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 -04003646
3647### Return Value
3648
Cary Clark682c58d2018-05-16 07:07:07 -04003649<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003650
3651### Example
3652
3653<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
3654
3655#### Example Output
3656
3657~~~~
3658nullptr == color filter
3659nullptr != color filter
3660~~~~
3661
3662</fiddle-embed></div>
3663
3664---
3665
Cary Clark682c58d2018-05-16 07:07:07 -04003666<a name='SkPaint_refColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003667## refColorFilter
3668
Cary Clark682c58d2018-05-16 07:07:07 -04003669<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3670<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 -04003671</pre>
3672
Cary Clark682c58d2018-05-16 07:07:07 -04003673Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3674Increases <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 -04003675
3676### Return Value
3677
Cary Clark682c58d2018-05-16 07:07:07 -04003678<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04003679
3680### Example
3681
3682<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3683
3684#### Example Output
3685
3686~~~~
3687color filter unique: true
3688color filter unique: false
3689~~~~
3690
3691</fiddle-embed></div>
3692
3693---
3694
Cary Clark682c58d2018-05-16 07:07:07 -04003695<a name='SkPaint_setColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003696## setColorFilter
3697
Cary Clark682c58d2018-05-16 07:07:07 -04003698<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3699void <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 -04003700</pre>
3701
Cary Clark682c58d2018-05-16 07:07:07 -04003702Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3703<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 -04003704
Cary Clark682c58d2018-05-16 07:07:07 -04003705Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003706
3707### Parameters
3708
Cary Clark682c58d2018-05-16 07:07:07 -04003709<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3710 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003711 </tr>
3712</table>
3713
3714### Example
3715
3716<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
3717
3718---
3719
Cary Clark682c58d2018-05-16 07:07:07 -04003720## <a name='Blend_Mode_Methods'>Blend Mode Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003721
Cary Clark682c58d2018-05-16 07:07:07 -04003722<a href='undocumented#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3723The default setting, <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003724over the destination color.
3725
3726### Example
3727
3728<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
3729
3730### See Also
3731
Cary Clark682c58d2018-05-16 07:07:07 -04003732<a href='undocumented#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003733
Cary Clark682c58d2018-05-16 07:07:07 -04003734<a name='SkPaint_getBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003735## getBlendMode
3736
Cary Clark682c58d2018-05-16 07:07:07 -04003737<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3738<a href='undocumented#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003739</pre>
3740
Cary Clark682c58d2018-05-16 07:07:07 -04003741Returns <a href='undocumented#Blend_Mode'>Blend Mode</a>.
3742By default, returns <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003743
3744### Return Value
3745
3746mode used to combine source color with destination color
3747
3748### Example
3749
skia-bookmaker525f9a92018-05-03 06:27:39 +00003750<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003751
3752#### Example Output
3753
3754~~~~
3755kSrcOver == getBlendMode
3756kSrcOver != getBlendMode
3757~~~~
3758
3759</fiddle-embed></div>
3760
3761---
3762
Cary Clark682c58d2018-05-16 07:07:07 -04003763<a name='SkPaint_isSrcOver'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003764## isSrcOver
3765
Cary Clark682c58d2018-05-16 07:07:07 -04003766<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3767bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003768</pre>
3769
Cary Clark682c58d2018-05-16 07:07:07 -04003770Returns true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003771
3772### Return Value
3773
Cary Clark682c58d2018-05-16 07:07:07 -04003774true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003775
3776### Example
3777
3778<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3779
3780#### Example Output
3781
3782~~~~
3783isSrcOver == true
3784isSrcOver != true
3785~~~~
3786
3787</fiddle-embed></div>
3788
3789---
3790
Cary Clark682c58d2018-05-16 07:07:07 -04003791<a name='SkPaint_setBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003792## setBlendMode
3793
Cary Clark682c58d2018-05-16 07:07:07 -04003794<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3795void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='undocumented#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003796</pre>
3797
Cary Clark682c58d2018-05-16 07:07:07 -04003798Sets <a href='undocumented#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003799Does not check for valid input.
3800
3801### Parameters
3802
Cary Clark682c58d2018-05-16 07:07:07 -04003803<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
3804 <td><a href='undocumented#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003805 </tr>
3806</table>
3807
3808### Example
3809
3810<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3811
3812#### Example Output
3813
3814~~~~
3815isSrcOver == true
3816isSrcOver != true
3817~~~~
3818
3819</fiddle-embed></div>
3820
3821---
3822
Cary Clark682c58d2018-05-16 07:07:07 -04003823## <a name='Path_Effect_Methods'>Path Effect Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003824
Cary Clark682c58d2018-05-16 07:07:07 -04003825<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3826<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3827If <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 -04003828
3829### Example
3830
3831<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3832
3833### See Also
3834
Cary Clark682c58d2018-05-16 07:07:07 -04003835<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003836
Cary Clark682c58d2018-05-16 07:07:07 -04003837<a name='SkPaint_getPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003838## getPathEffect
3839
Cary Clark682c58d2018-05-16 07:07:07 -04003840<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3841<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003842</pre>
3843
Cary Clark682c58d2018-05-16 07:07:07 -04003844Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3845Does 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 -04003846
3847### Return Value
3848
Cary Clark682c58d2018-05-16 07:07:07 -04003849<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003850
3851### Example
3852
3853<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3854
3855#### Example Output
3856
3857~~~~
3858nullptr == path effect
3859nullptr != path effect
3860~~~~
3861
3862</fiddle-embed></div>
3863
3864---
3865
Cary Clark682c58d2018-05-16 07:07:07 -04003866<a name='SkPaint_refPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003867## refPathEffect
3868
Cary Clark682c58d2018-05-16 07:07:07 -04003869<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3870<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 -04003871</pre>
3872
Cary Clark682c58d2018-05-16 07:07:07 -04003873Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3874Increases <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 -04003875
3876### Return Value
3877
Cary Clark682c58d2018-05-16 07:07:07 -04003878<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003879
3880### Example
3881
Cary Clarka560c472017-11-27 10:44:06 -05003882<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003883
3884#### Example Output
3885
3886~~~~
3887path effect unique: true
3888path effect unique: false
3889~~~~
3890
3891</fiddle-embed></div>
3892
3893---
3894
Cary Clark682c58d2018-05-16 07:07:07 -04003895<a name='SkPaint_setPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003896## setPathEffect
3897
Cary Clark682c58d2018-05-16 07:07:07 -04003898<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3899void <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 -04003900</pre>
3901
Cary Clark682c58d2018-05-16 07:07:07 -04003902Sets <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
3903<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003904
Cary Clark682c58d2018-05-16 07:07:07 -04003905Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003906
3907### Parameters
3908
Cary Clark682c58d2018-05-16 07:07:07 -04003909<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3910 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003911 </tr>
3912</table>
3913
3914### Example
3915
3916<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3917
3918---
3919
Cary Clark682c58d2018-05-16 07:07:07 -04003920## <a name='Mask_Filter_Methods'>Mask Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003921
Cary Clark682c58d2018-05-16 07:07:07 -04003922<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3923<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003924
Cary Clark682c58d2018-05-16 07:07:07 -04003925<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3926creating 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 -04003927modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003928
3929### Example
3930
Cary Clark681287e2018-03-16 11:34:15 -04003931<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003932
Cary Clark682c58d2018-05-16 07:07:07 -04003933<a name='SkPaint_getMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003934## getMaskFilter
3935
Cary Clark682c58d2018-05-16 07:07:07 -04003936<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3937<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003938</pre>
3939
Cary Clark682c58d2018-05-16 07:07:07 -04003940Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
3941Does 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 -04003942
3943### Return Value
3944
Cary Clark682c58d2018-05-16 07:07:07 -04003945<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003946
3947### Example
3948
Cary Clark681287e2018-03-16 11:34:15 -04003949<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003950
3951#### Example Output
3952
3953~~~~
3954nullptr == mask filter
3955nullptr != mask filter
3956~~~~
3957
3958</fiddle-embed></div>
3959
3960---
3961
Cary Clark682c58d2018-05-16 07:07:07 -04003962<a name='SkPaint_refMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003963## refMaskFilter
3964
Cary Clark682c58d2018-05-16 07:07:07 -04003965<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3966<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 -04003967</pre>
3968
Cary Clark682c58d2018-05-16 07:07:07 -04003969Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003970
Cary Clark682c58d2018-05-16 07:07:07 -04003971Increases <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 -04003972
3973### Return Value
3974
Cary Clark682c58d2018-05-16 07:07:07 -04003975<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003976
3977### Example
3978
Cary Clark681287e2018-03-16 11:34:15 -04003979<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003980
3981#### Example Output
3982
3983~~~~
3984mask filter unique: true
3985mask filter unique: false
3986~~~~
3987
3988</fiddle-embed></div>
3989
3990---
3991
Cary Clark682c58d2018-05-16 07:07:07 -04003992<a name='SkPaint_setMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003993## setMaskFilter
3994
Cary Clark682c58d2018-05-16 07:07:07 -04003995<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3996void <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 -04003997</pre>
3998
Cary Clark682c58d2018-05-16 07:07:07 -04003999Sets <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
4000<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
4001<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04004002
Cary Clark682c58d2018-05-16 07:07:07 -04004003Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004004
4005### Parameters
4006
Cary Clark682c58d2018-05-16 07:07:07 -04004007<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
4008 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04004009 </tr>
4010</table>
4011
4012### Example
4013
Cary Clark681287e2018-03-16 11:34:15 -04004014<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004015
4016---
4017
Cary Clark682c58d2018-05-16 07:07:07 -04004018## <a name='Typeface_Methods'>Typeface Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004019
Cary Clark682c58d2018-05-16 07:07:07 -04004020<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
4021<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
4022The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04004023implementation.
4024
4025### Example
4026
Ben Wagner700ff172017-11-08 15:37:22 -05004027<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004028
Cary Clark682c58d2018-05-16 07:07:07 -04004029<a name='SkPaint_getTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004030## getTypeface
4031
Cary Clark682c58d2018-05-16 07:07:07 -04004032<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4033<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004034</pre>
4035
Cary Clark682c58d2018-05-16 07:07:07 -04004036Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
4037Increments <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004038
4039### Return Value
4040
Cary Clark682c58d2018-05-16 07:07:07 -04004041<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004042
4043### Example
4044
Cary Clark71961fb2018-01-05 14:21:59 -05004045<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04004046
4047#### Example Output
4048
4049~~~~
4050nullptr == typeface
4051nullptr != typeface
4052~~~~
4053
4054</fiddle-embed></div>
4055
4056---
4057
Cary Clark682c58d2018-05-16 07:07:07 -04004058<a name='SkPaint_refTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004059## refTypeface
4060
Cary Clark682c58d2018-05-16 07:07:07 -04004061<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4062<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 -04004063</pre>
4064
Cary Clark682c58d2018-05-16 07:07:07 -04004065Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004066
4067### Return Value
4068
Cary Clark682c58d2018-05-16 07:07:07 -04004069<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004070
4071### Example
4072
skia-bookmaker525f9a92018-05-03 06:27:39 +00004073<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04004074
4075#### Example Output
4076
4077~~~~
4078typeface1 != typeface2
4079typeface1 == typeface2
4080~~~~
4081
4082</fiddle-embed></div>
4083
4084---
4085
Cary Clark682c58d2018-05-16 07:07:07 -04004086<a name='SkPaint_setTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004087## setTypeface
4088
Cary Clark682c58d2018-05-16 07:07:07 -04004089<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4090void <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 -04004091</pre>
4092
Cary Clark682c58d2018-05-16 07:07:07 -04004093Sets <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>.
4094Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
4095<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004096
4097### Parameters
4098
Cary Clark682c58d2018-05-16 07:07:07 -04004099<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
4100 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004101 </tr>
4102</table>
4103
4104### Example
4105
Cary Clark71961fb2018-01-05 14:21:59 -05004106<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004107
4108---
4109
Cary Clark682c58d2018-05-16 07:07:07 -04004110## <a name='Image_Filter_Methods'>Image Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004111
Cary Clark682c58d2018-05-16 07:07:07 -04004112<a href='undocumented#Image_Filter'>Image Filter</a> operates on the pixel representation of the shape, as modified by <a href='#Paint'>Paint</a>
4113with <a href='undocumented#Blend_Mode'>Blend Mode</a> set to <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>. <a href='undocumented#Image_Filter'>Image Filter</a> creates a new bitmap,
4114which is drawn to the device using the set <a href='undocumented#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04004115
Cary Clark682c58d2018-05-16 07:07:07 -04004116<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>
4117can 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.
4118<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
4119<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004120
4121### Example
4122
Update Docs4410d7f2018-03-19 06:05:52 +00004123<div><fiddle-embed name="250e45c5935d54eac6aca775d1fe3475"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004124
Cary Clark682c58d2018-05-16 07:07:07 -04004125<a name='SkPaint_getImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004126## getImageFilter
4127
Cary Clark682c58d2018-05-16 07:07:07 -04004128<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4129<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004130</pre>
4131
Cary Clark682c58d2018-05-16 07:07:07 -04004132Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4133Does 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 -04004134
4135### Return Value
4136
Cary Clark682c58d2018-05-16 07:07:07 -04004137<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004138
4139### Example
4140
Cary Clarka560c472017-11-27 10:44:06 -05004141<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04004142
4143#### Example Output
4144
4145~~~~
4146nullptr == image filter
4147nullptr != image filter
4148~~~~
4149
4150</fiddle-embed></div>
4151
4152---
4153
Cary Clark682c58d2018-05-16 07:07:07 -04004154<a name='SkPaint_refImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004155## refImageFilter
4156
Cary Clark682c58d2018-05-16 07:07:07 -04004157<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4158<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 -04004159</pre>
4160
Cary Clark682c58d2018-05-16 07:07:07 -04004161Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4162Increases <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 -04004163
4164### Return Value
4165
Cary Clark682c58d2018-05-16 07:07:07 -04004166<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004167
4168### Example
4169
4170<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
4171
4172#### Example Output
4173
4174~~~~
4175image filter unique: true
4176image filter unique: false
4177~~~~
4178
4179</fiddle-embed></div>
4180
4181---
4182
Cary Clark682c58d2018-05-16 07:07:07 -04004183<a name='SkPaint_setImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004184## setImageFilter
4185
Cary Clark682c58d2018-05-16 07:07:07 -04004186<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4187void <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 -04004188</pre>
4189
Cary Clark682c58d2018-05-16 07:07:07 -04004190Sets <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
4191<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 -04004192on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04004193
Cary Clark682c58d2018-05-16 07:07:07 -04004194Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004195
4196### Parameters
4197
Cary Clark682c58d2018-05-16 07:07:07 -04004198<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
4199 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04004200 </tr>
4201</table>
4202
4203### Example
4204
4205<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
4206
4207---
4208
Cary Clark682c58d2018-05-16 07:07:07 -04004209## <a name='Draw_Looper_Methods'>Draw Looper Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004210
Cary Clark682c58d2018-05-16 07:07:07 -04004211<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 -04004212to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04004213
Cary Clark682c58d2018-05-16 07:07:07 -04004214<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
4215<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
4216Set <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 -04004217
4218### Example
4219
4220<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
4221
Cary Clark682c58d2018-05-16 07:07:07 -04004222<a name='SkPaint_getDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004223## getDrawLooper
4224
Cary Clark682c58d2018-05-16 07:07:07 -04004225<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4226<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004227</pre>
4228
Cary Clark682c58d2018-05-16 07:07:07 -04004229Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4230Does 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 -04004231
4232### Return Value
4233
Cary Clark682c58d2018-05-16 07:07:07 -04004234<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004235
4236### Example
4237
4238<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
4239
4240#### Example Output
4241
4242~~~~
4243nullptr == draw looper
4244nullptr != draw looper
4245~~~~
4246
4247</fiddle-embed></div>
4248
4249---
4250
Cary Clark682c58d2018-05-16 07:07:07 -04004251<a name='SkPaint_refDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004252## refDrawLooper
4253
Cary Clark682c58d2018-05-16 07:07:07 -04004254<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4255<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 -04004256</pre>
4257
Cary Clark682c58d2018-05-16 07:07:07 -04004258Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4259Increases <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 -04004260
4261### Return Value
4262
Cary Clark682c58d2018-05-16 07:07:07 -04004263<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004264
4265### Example
4266
4267<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
4268
4269#### Example Output
4270
4271~~~~
4272draw looper unique: true
4273draw looper unique: false
4274~~~~
4275
4276</fiddle-embed></div>
4277
4278---
4279
Cary Clark682c58d2018-05-16 07:07:07 -04004280<a name='SkPaint_getLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004281## getLooper
4282
Cary Clark682c58d2018-05-16 07:07:07 -04004283<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4284<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004285</pre>
4286
Cary Clark682c58d2018-05-16 07:07:07 -04004287Deprecated.
4288
Cary Clark12799e12017-07-28 15:18:29 -04004289---
4290
Cary Clark682c58d2018-05-16 07:07:07 -04004291<a name='SkPaint_setDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004292## setDrawLooper
4293
Cary Clark682c58d2018-05-16 07:07:07 -04004294<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4295void <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 -04004296</pre>
4297
Cary Clark682c58d2018-05-16 07:07:07 -04004298Sets <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
4299<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 -04004300drawing unaltered.
4301
Cary Clark682c58d2018-05-16 07:07:07 -04004302Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004303
4304### Parameters
4305
Cary Clark682c58d2018-05-16 07:07:07 -04004306<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
4307 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004308 </tr>
4309</table>
4310
4311### Example
4312
4313<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
4314
4315---
4316
Cary Clark682c58d2018-05-16 07:07:07 -04004317<a name='SkPaint_setLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004318## setLooper
4319
Cary Clark682c58d2018-05-16 07:07:07 -04004320<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4321void <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 -04004322</pre>
4323
Cary Clark682c58d2018-05-16 07:07:07 -04004324Deprecated.
4325
Cary Clark12799e12017-07-28 15:18:29 -04004326---
4327
Cary Clark682c58d2018-05-16 07:07:07 -04004328## <a name='Text_Align'>Text Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004329
Cary Clark682c58d2018-05-16 07:07:07 -04004330## <a name='SkPaint_Align'>Enum SkPaint::Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004331
Cary Clarka560c472017-11-27 10:44:06 -05004332<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004333 enum <a href='#SkPaint_Align'>Align</a> {
4334 <a href='#SkPaint_kLeft_Align'>kLeft Align</a>,
4335 <a href='#SkPaint_kCenter_Align'>kCenter Align</a>,
4336 <a href='#SkPaint_kRight_Align'>kRight Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004337 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04004338
Cary Clark682c58d2018-05-16 07:07:07 -04004339 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05004340</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004341
Cary Clark682c58d2018-05-16 07:07:07 -04004342<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
4343<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>,
4344<a href='SkCanvas_Reference#SkCanvas_drawPosTextH'>SkCanvas::drawPosTextH</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextOnPath'>SkCanvas::drawTextOnPath</a>,
4345<a href='SkCanvas_Reference#SkCanvas_drawTextOnPathHV'>SkCanvas::drawTextOnPathHV</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextRSXform'>SkCanvas::drawTextRSXform</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextBlob'>SkCanvas::drawTextBlob</a>,
4346and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
4347as 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 -04004348
4349The text position is set by the font for both horizontal and vertical text.
4350Typically, for horizontal text, the position is to the left side of the glyph on the
4351base line; and for vertical text, the position is the horizontal center of the glyph
4352at the caps height.
4353
Cary Clark682c58d2018-05-16 07:07:07 -04004354<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 -04004355using the metrics returned by the font.
4356
Cary Clark682c58d2018-05-16 07:07:07 -04004357<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004358
4359### Constants
4360
Cary Clark682c58d2018-05-16 07:07:07 -04004361<table style='border-collapse: collapse; width: 62.5em'>
4362 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4363<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4364<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4365 <tr style='background-color: #f0f0f0; '>
4366 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
4367 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4368 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4369Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05004370</td>
Cary Clark12799e12017-07-28 15:18:29 -04004371 </tr>
4372 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004373 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
4374 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4376Moves the glyph half its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear, and
4377half its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
4378</td>
4379 </tr>
4380 <tr style='background-color: #f0f0f0; '>
4381 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
4382 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4383 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4384Moves the glyph by its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear,
4385and 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 -05004386</td>
Cary Clark12799e12017-07-28 15:18:29 -04004387 </tr>
4388 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004389 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
4390 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4391 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04004392May be used to verify that <a href='#SkPaint_Align'>Align</a> is a legal value.
4393</td>
Cary Clark12799e12017-07-28 15:18:29 -04004394 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004395</table>
Cary Clark12799e12017-07-28 15:18:29 -04004396
4397### Example
4398
Cary Clark1a8d7622018-03-05 13:26:16 -05004399<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
4400</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004401
4402### Example
4403
Cary Clark682c58d2018-05-16 07:07:07 -04004404<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 -05004405</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004406
Cary Clark682c58d2018-05-16 07:07:07 -04004407<a name='SkPaint_getTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004408## getTextAlign
4409
Cary Clark682c58d2018-05-16 07:07:07 -04004410<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4411<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004412</pre>
4413
Cary Clark682c58d2018-05-16 07:07:07 -04004414Returns <a href='#Text_Align'>Text Align</a>.
4415Returns <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 -04004416
4417### Return Value
4418
4419text placement relative to position
4420
4421### Example
4422
4423<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
4424
4425#### Example Output
4426
4427~~~~
4428kLeft_Align == default
4429~~~~
4430
4431</fiddle-embed></div>
4432
4433---
4434
Cary Clark682c58d2018-05-16 07:07:07 -04004435<a name='SkPaint_setTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004436## setTextAlign
4437
Cary Clark682c58d2018-05-16 07:07:07 -04004438<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4439void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04004440</pre>
4441
Cary Clark682c58d2018-05-16 07:07:07 -04004442Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
4443Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04004444
4445### Parameters
4446
Cary Clark682c58d2018-05-16 07:07:07 -04004447<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
4448 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04004449 </tr>
4450</table>
4451
4452### Example
4453
Cary Clark682c58d2018-05-16 07:07:07 -04004454<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 -05004455alignment out of range has no effect.
4456</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004457
4458---
4459
Cary Clark682c58d2018-05-16 07:07:07 -04004460## <a name='Text_Size'>Text Size</a>
Cary Clark08895c42018-02-01 09:37:32 -05004461
Cary Clark682c58d2018-05-16 07:07:07 -04004462<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
4463<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
4464<a href='#Text_Size'>Text Size</a> defaults to 12.
4465Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04004466
4467### Example
4468
4469<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
4470
Cary Clark682c58d2018-05-16 07:07:07 -04004471<a name='SkPaint_getTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004472## getTextSize
4473
Cary Clark682c58d2018-05-16 07:07:07 -04004474<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4475<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004476</pre>
4477
Cary Clark682c58d2018-05-16 07:07:07 -04004478Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04004479
4480### Return Value
4481
4482typographic height of text
4483
4484### Example
4485
4486<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
4487
4488---
4489
Cary Clark682c58d2018-05-16 07:07:07 -04004490<a name='SkPaint_setTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004491## setTextSize
4492
Cary Clark682c58d2018-05-16 07:07:07 -04004493<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4494void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04004495</pre>
4496
Cary Clark682c58d2018-05-16 07:07:07 -04004497Sets <a href='#Text_Size'>Text Size</a> in points.
4498Has 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 -04004499
4500### Parameters
4501
Cary Clark682c58d2018-05-16 07:07:07 -04004502<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
4503 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004504 </tr>
4505</table>
4506
4507### Example
4508
4509<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
4510
4511---
4512
Cary Clark682c58d2018-05-16 07:07:07 -04004513## <a name='Text_Scale_X'>Text Scale X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004514
Cary Clark682c58d2018-05-16 07:07:07 -04004515<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
4516<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004517is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004518<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
4519<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04004520
4521### Example
4522
4523<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
4524
Cary Clark682c58d2018-05-16 07:07:07 -04004525<a name='SkPaint_getTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004526## getTextScaleX
4527
Cary Clark682c58d2018-05-16 07:07:07 -04004528<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4529<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004530</pre>
4531
Cary Clark682c58d2018-05-16 07:07:07 -04004532Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004533Default value is 1.
4534
4535### Return Value
4536
4537text horizontal scale
4538
4539### Example
4540
4541<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
4542
4543---
4544
Cary Clark682c58d2018-05-16 07:07:07 -04004545<a name='SkPaint_setTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004546## setTextScaleX
4547
Cary Clark682c58d2018-05-16 07:07:07 -04004548<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4549void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04004550</pre>
4551
Cary Clark682c58d2018-05-16 07:07:07 -04004552Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004553Default value is 1.
4554
4555### Parameters
4556
Cary Clark682c58d2018-05-16 07:07:07 -04004557<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
4558 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04004559 </tr>
4560</table>
4561
4562### Example
4563
4564<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
4565
4566---
4567
Cary Clark682c58d2018-05-16 07:07:07 -04004568## <a name='Text_Skew_X'>Text Skew X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004569
Cary Clark682c58d2018-05-16 07:07:07 -04004570<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
4571<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004572is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004573<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
4574<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04004575
4576### Example
4577
4578<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
4579
Cary Clark682c58d2018-05-16 07:07:07 -04004580<a name='SkPaint_getTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004581## getTextSkewX
4582
Cary Clark682c58d2018-05-16 07:07:07 -04004583<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4584<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004585</pre>
4586
Cary Clark682c58d2018-05-16 07:07:07 -04004587Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004588Default value is zero.
4589
4590### Return Value
4591
4592additional shear in x-axis relative to y-axis
4593
4594### Example
4595
4596<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
4597
4598---
4599
Cary Clark682c58d2018-05-16 07:07:07 -04004600<a name='SkPaint_setTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004601## setTextSkewX
4602
Cary Clark682c58d2018-05-16 07:07:07 -04004603<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4604void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04004605</pre>
4606
Cary Clark682c58d2018-05-16 07:07:07 -04004607Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004608Default value is zero.
4609
4610### Parameters
4611
Cary Clark682c58d2018-05-16 07:07:07 -04004612<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
4613 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04004614 </tr>
4615</table>
4616
4617### Example
4618
4619<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
4620
4621---
4622
Cary Clark682c58d2018-05-16 07:07:07 -04004623## <a name='Text_Encoding'>Text Encoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004624
Cary Clark682c58d2018-05-16 07:07:07 -04004625## <a name='SkPaint_TextEncoding'>Enum SkPaint::TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004626
Cary Clarka560c472017-11-27 10:44:06 -05004627<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004628 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
4629 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>,
4630 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>,
4631 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>,
4632 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004633 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004634</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004635
Cary Clark682c58d2018-05-16 07:07:07 -04004636<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
4637size, 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 -04004638
Cary Clarka560c472017-11-27 10:44:06 -05004639Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004640All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04004641in the total storage required.
4642
Cary Clark682c58d2018-05-16 07:07:07 -04004643<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 -04004644
Cary Clark682c58d2018-05-16 07:07:07 -04004645<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 -04004646
Cary Clark682c58d2018-05-16 07:07:07 -04004647<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 -04004648
Cary Clark682c58d2018-05-16 07:07:07 -04004649<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 -04004650A glyph index is a 16-bit word.
4651
Cary Clark682c58d2018-05-16 07:07:07 -04004652<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 -04004653
4654### Constants
4655
Cary Clark682c58d2018-05-16 07:07:07 -04004656<table style='border-collapse: collapse; width: 62.5em'>
4657 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4658<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4659<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4660 <tr style='background-color: #f0f0f0; '>
4661 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
4662 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4663 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4664uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04004665 </tr>
4666 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
4668 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4669 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4670uses two byte words to represent most of Unicode</td>
4671 </tr>
4672 <tr style='background-color: #f0f0f0; '>
4673 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
4674 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4676uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04004677 </tr>
4678 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
4680 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4681 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4682uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04004683 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004684</table>
Cary Clark12799e12017-07-28 15:18:29 -04004685
4686### Example
4687
Cary Clarka560c472017-11-27 10:44:06 -05004688<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4689Second line is encoded in UTF-16.
4690Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04004691Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05004692</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004693
Cary Clark682c58d2018-05-16 07:07:07 -04004694<a name='SkPaint_getTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004695## getTextEncoding
4696
Cary Clark682c58d2018-05-16 07:07:07 -04004697<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4698<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004699</pre>
4700
Cary Clark682c58d2018-05-16 07:07:07 -04004701Returns <a href='#Text_Encoding'>Text Encoding</a>.
4702<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 -04004703
4704### Return Value
4705
Cary Clark682c58d2018-05-16 07:07:07 -04004706one 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
4707<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004708
4709### Example
4710
skia-bookmaker525f9a92018-05-03 06:27:39 +00004711<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004712
4713#### Example Output
4714
4715~~~~
4716kUTF8_TextEncoding == text encoding
4717kGlyphID_TextEncoding == text encoding
4718~~~~
4719
4720</fiddle-embed></div>
4721
4722---
4723
Cary Clark682c58d2018-05-16 07:07:07 -04004724<a name='SkPaint_setTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004725## setTextEncoding
4726
Cary Clark682c58d2018-05-16 07:07:07 -04004727<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4728void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004729</pre>
4730
Cary Clark682c58d2018-05-16 07:07:07 -04004731Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4732<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4733Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004734
4735### Parameters
4736
Cary Clark682c58d2018-05-16 07:07:07 -04004737<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4738 <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
4739<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004740 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004741#
4742
Cary Clark12799e12017-07-28 15:18:29 -04004743</table>
4744
4745### Example
4746
Cary Clark75fd4492018-06-20 12:45:16 -04004747<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004748
4749#### Example Output
4750
4751~~~~
47524 != text encoding
4753~~~~
4754
4755</fiddle-embed></div>
4756
4757---
4758
Cary Clark682c58d2018-05-16 07:07:07 -04004759## <a name='Font_Metrics'>Font Metrics</a>
Cary Clark08895c42018-02-01 09:37:32 -05004760
Cary Clark682c58d2018-05-16 07:07:07 -04004761<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>.
4762The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4763<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004764
Cary Clark682c58d2018-05-16 07:07:07 -04004765<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 -04004766X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4767are positive.
4768Y-axis values above the baseline are negative, and below the baseline are positive.
4769
4770### Example
4771
Ben Wagnere5806492017-11-09 12:08:31 -05004772<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004773
Cary Clark682c58d2018-05-16 07:07:07 -04004774# <a name='SkPaint_FontMetrics'>Struct SkPaint::FontMetrics</a>
4775
4776## <a name='Font_Metrics_Constant'>Constant</a>
4777
4778
4779SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
4780<table style='border-collapse: collapse; width: 62.5em'>
4781 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4782<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4783 <tr style='background-color: #f0f0f0; '>
4784 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a></td>
4785 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>valid <a href='#Font_Metrics'>Font Metrics</a></td>
4786 </tr>
4787 <tr>
4788 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a></td>
4789 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is valid</td>
4790 </tr>
4791 <tr style='background-color: #f0f0f0; '>
4792 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a></td>
4793 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is valid</td>
4794 </tr>
4795 <tr>
4796 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a></td>
4797 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is valid</td>
4798 </tr>
4799 <tr style='background-color: #f0f0f0; '>
4800 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a></td>
4801 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is valid</td>
4802 </tr>
4803</table>
4804
4805
4806## <a name='Font_Metrics_Member_Function'>Member_Function</a>
4807
4808
4809SkPaint member functions read and modify the structure properties.
4810<table style='border-collapse: collapse; width: 62.5em'>
4811 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4812<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4813 <tr style='background-color: #f0f0f0; '>
4814 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a></td>
4815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout position if set</td>
4816 </tr>
4817 <tr>
4818 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a></td>
4819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout thickness if set</td>
4820 </tr>
4821 <tr style='background-color: #f0f0f0; '>
4822 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a></td>
4823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline position if set</td>
4824 </tr>
4825 <tr>
4826 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a></td>
4827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline thickness if set</td>
4828 </tr>
4829</table>
4830
4831
4832## <a name='Font_Metrics_Member'>Member</a>
4833
4834
4835SkPaint members may be read and written directly without using a member function.
4836<table style='border-collapse: collapse; width: 62.5em'>
4837 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4838<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4839 <tr style='background-color: #f0f0f0; '>
4840 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAscent'>fAscent</a></td>
4841 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve above baseline</td>
4842 </tr>
4843 <tr>
4844 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a></td>
4845 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>average character width</td>
4846 </tr>
4847 <tr style='background-color: #f0f0f0; '>
4848 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fBottom'>fBottom</a></td>
4849 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent below baseline</td>
4850 </tr>
4851 <tr>
4852 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a></td>
4853 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of an upper-case letter</td>
4854 </tr>
4855 <tr style='background-color: #f0f0f0; '>
4856 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fDescent'>fDescent</a></td>
4857 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve below baseline</td>
4858 </tr>
4859 <tr>
4860 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fFlags'>fFlags</a></td>
4861 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>is set to <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> when metrics are valid</td>
4862 </tr>
4863 <tr style='background-color: #f0f0f0; '>
4864 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fLeading'>fLeading</a></td>
4865 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to add between lines</td>
4866 </tr>
4867 <tr>
4868 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a></td>
4869 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum character width</td>
4870 </tr>
4871 <tr style='background-color: #f0f0f0; '>
4872 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a></td>
4873 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout position relative to baseline</td>
4874 </tr>
4875 <tr>
4876 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a></td>
4877 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout thickness</td>
4878 </tr>
4879 <tr style='background-color: #f0f0f0; '>
4880 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fTop'>fTop</a></td>
4881 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent above baseline</td>
4882 </tr>
4883 <tr>
4884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a></td>
4885 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline position relative to baseline</td>
4886 </tr>
4887 <tr style='background-color: #f0f0f0; '>
4888 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a></td>
4889 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline thickness</td>
4890 </tr>
4891 <tr>
4892 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a></td>
4893 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of lower-case 'x'</td>
4894 </tr>
4895 <tr style='background-color: #f0f0f0; '>
4896 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMax'>fXMax</a></td>
4897 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum x</td>
4898 </tr>
4899 <tr>
4900 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMin'>fXMin</a></td>
4901 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimum x</td>
4902 </tr>
4903</table>
4904
Cary Clarke4aa3712017-09-15 02:56:12 -04004905
Cary Clarka560c472017-11-27 10:44:06 -05004906<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004907 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4908 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4909 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4910 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4911 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4912 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004913 };
Cary Clark12799e12017-07-28 15:18:29 -04004914
Cary Clark682c58d2018-05-16 07:07:07 -04004915 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4916 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4917 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4918 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4919 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4920 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4921 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4922 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4923 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4924 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4925 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4926 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4927 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4928 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4929 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4930 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004931
Cary Clark682c58d2018-05-16 07:07:07 -04004932 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness(SkScalar* thickness)</a> const;
4933 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition(SkScalar* position)</a> const;
4934 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness(SkScalar* thickness)</a> const;
4935 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark186d08f2018-04-03 08:43:27 -04004936 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004937</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004938
Cary Clark682c58d2018-05-16 07:07:07 -04004939<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
4940computed 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 -04004941not available.
4942
Cary Clark5538c132018-06-14 12:28:14 -04004943All vertical values are relative to the baseline, on a y-axis pointing down.
4944Zero is on the baseline, negative values are above the baseline, and positive
4945values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004946
Cary Clark682c58d2018-05-16 07:07:07 -04004947<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 -04004948are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004949
Cary Clark682c58d2018-05-16 07:07:07 -04004950<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 -04004951are valid, since their value may be zero.
4952
Cary Clark682c58d2018-05-16 07:07:07 -04004953## <a name='SkPaint_FontMetrics_FontMetricsFlags'>Enum SkPaint::FontMetrics::FontMetricsFlags</a>
Cary Clark12799e12017-07-28 15:18:29 -04004954
Cary Clarka560c472017-11-27 10:44:06 -05004955<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004956 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4957 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4958 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4959 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4960 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004961 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004962</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004963
Cary Clark682c58d2018-05-16 07:07:07 -04004964<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 -04004965the underline or strikeout metric may be valid and zero.
4966Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4967
Cary Clark12799e12017-07-28 15:18:29 -04004968### Constants
4969
Cary Clark682c58d2018-05-16 07:07:07 -04004970<table style='border-collapse: collapse; width: 62.5em'>
4971 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4972<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4973<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4974 <tr style='background-color: #f0f0f0; '>
4975 <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>
4976 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4977 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4978set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004979 </tr>
4980 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004981 <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>
4982 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4983 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4984set if fUnderlinePosition is valid</td>
4985 </tr>
4986 <tr style='background-color: #f0f0f0; '>
4987 <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>
4988 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4989 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4990set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004991 </tr>
4992 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004993 <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>
4994 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4995 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4996set if fStrikeoutPosition is valid</td>
4997 </tr>
4998</table>
4999
5000### Members
5001
5002<table style='border-collapse: collapse; width: 62.5em'>
5003 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
5004<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Name</th>
5005<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
5006 <tr style='background-color: #f0f0f0; '>
5007 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
5008 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
5009 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5010is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005011 </tr>
5012 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005013 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5014 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
5015 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005016Greatest extent above the baseline for any glyph.
5017Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005018</td>
5019 </tr>
5020 <tr style='background-color: #f0f0f0; '>
5021 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5022 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
5023 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005024Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005025Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005026</td>
5027 </tr>
5028 <tr>
5029 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5030 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
5031 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005032Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005033Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005034</td>
5035 </tr>
5036 <tr style='background-color: #f0f0f0; '>
5037 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5038 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
5039 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005040Greatest extent below the baseline for any glyph.
5041Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005042</td>
5043 </tr>
5044 <tr>
5045 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5046 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
5047 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005048Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005049Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005050</td>
5051 </tr>
5052 <tr style='background-color: #f0f0f0; '>
5053 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5054 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
5055 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005056Average character width, if it is available.
5057Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005058</td>
5059 </tr>
5060 <tr>
5061 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5062 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
5063 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5064maximum character width</td>
5065 </tr>
5066 <tr style='background-color: #f0f0f0; '>
5067 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5068 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
5069 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005070Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005071Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005072</td>
5073 </tr>
5074 <tr>
5075 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5076 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
5077 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005078Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005079Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005080</td>
5081 </tr>
5082 <tr style='background-color: #f0f0f0; '>
5083 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5084 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
5085 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005086May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005087</td>
5088 </tr>
5089 <tr>
5090 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5091 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
5092 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005093May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005094</td>
5095 </tr>
5096 <tr style='background-color: #f0f0f0; '>
5097 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5098 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
5099 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5100If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5101If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
5102</td>
5103 </tr>
5104 <tr>
5105 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5106 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
5107 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005108Position of the top of the underline stroke relative to the baseline.
5109Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005110
Cary Clark682c58d2018-05-16 07:07:07 -04005111If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5112If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
5113</td>
5114 </tr>
5115 <tr style='background-color: #f0f0f0; '>
5116 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5117 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
5118 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5119If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5120If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
5121</td>
5122 </tr>
5123 <tr>
5124 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5125 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
5126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005127Position of the bottom of the strikeout stroke relative to the baseline.
5128Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005129
Cary Clark682c58d2018-05-16 07:07:07 -04005130If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5131If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
5132</td>
5133 </tr>
5134</table>
Cary Clark12799e12017-07-28 15:18:29 -04005135
Cary Clark682c58d2018-05-16 07:07:07 -04005136<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005137## hasUnderlineThickness
5138
Cary Clark682c58d2018-05-16 07:07:07 -04005139<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5140bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005141</pre>
5142
Cary Clark682c58d2018-05-16 07:07:07 -04005143If <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>, return true, and set
5144<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,
5145return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005146
5147### Parameters
5148
Cary Clark682c58d2018-05-16 07:07:07 -04005149<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
5150 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005151 </tr>
5152</table>
5153
5154### Return Value
5155
5156true if font specifies underline width
5157
5158---
5159
Cary Clark682c58d2018-05-16 07:07:07 -04005160<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005161## hasUnderlinePosition
5162
Cary Clark682c58d2018-05-16 07:07:07 -04005163<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5164bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005165</pre>
5166
Cary Clark682c58d2018-05-16 07:07:07 -04005167If <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>, return true, and set
5168<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,
5169return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005170
5171### Parameters
5172
Cary Clark682c58d2018-05-16 07:07:07 -04005173<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
5174 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005175 </tr>
5176</table>
5177
5178### Return Value
5179
Cary Clark682c58d2018-05-16 07:07:07 -04005180true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005181
5182---
5183
Cary Clark682c58d2018-05-16 07:07:07 -04005184<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005185## hasStrikeoutThickness
5186
Cary Clark682c58d2018-05-16 07:07:07 -04005187<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5188bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005189</pre>
5190
Cary Clark682c58d2018-05-16 07:07:07 -04005191If <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>, return true, and set
5192<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,
5193return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005194
5195### Parameters
5196
Cary Clark682c58d2018-05-16 07:07:07 -04005197<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
5198 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005199 </tr>
5200</table>
5201
5202### Return Value
5203
5204true if font specifies strikeout width
5205
5206---
5207
Cary Clark682c58d2018-05-16 07:07:07 -04005208<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005209## hasStrikeoutPosition
5210
Cary Clark682c58d2018-05-16 07:07:07 -04005211<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5212bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005213</pre>
5214
Cary Clark682c58d2018-05-16 07:07:07 -04005215If <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>, return true, and set
5216<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,
5217return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005218
5219### Parameters
5220
Cary Clark682c58d2018-05-16 07:07:07 -04005221<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
5222 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005223 </tr>
5224</table>
5225
5226### Return Value
5227
Cary Clark682c58d2018-05-16 07:07:07 -04005228true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005229
5230---
5231
Cary Clark682c58d2018-05-16 07:07:07 -04005232<a name='SkPaint_getFontMetrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005233## getFontMetrics
5234
Cary Clark682c58d2018-05-16 07:07:07 -04005235<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5236<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 -04005237</pre>
5238
Cary Clark682c58d2018-05-16 07:07:07 -04005239Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
5240The 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 -04005241descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005242If <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>.
5243Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5244dimensions 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>,
5245<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
5246Results 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 -04005247is ignored.
5248
5249### Parameters
5250
Cary Clark682c58d2018-05-16 07:07:07 -04005251<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
5252 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
5253 </tr>
5254 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
5255 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04005256 </tr>
5257</table>
5258
5259### Return Value
5260
5261recommended spacing between lines
5262
5263### Example
5264
5265<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
5266
5267### See Also
5268
Cary Clark682c58d2018-05-16 07:07:07 -04005269<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 -04005270
5271---
5272
Cary Clark682c58d2018-05-16 07:07:07 -04005273<a name='SkPaint_getFontSpacing'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005274## getFontSpacing
5275
Cary Clark682c58d2018-05-16 07:07:07 -04005276<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5277<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005278</pre>
5279
5280Returns the recommended spacing between lines: the sum of metrics
5281descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005282Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5283dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
5284Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005285
5286### Return Value
5287
5288recommended spacing between lines
5289
5290### Example
5291
5292<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
5293
5294#### Example Output
5295
5296~~~~
5297textSize: 12 fontSpacing: 13.9688
5298textSize: 18 fontSpacing: 20.9531
5299textSize: 24 fontSpacing: 27.9375
5300textSize: 32 fontSpacing: 37.25
5301~~~~
5302
5303</fiddle-embed></div>
5304
5305---
5306
Cary Clark682c58d2018-05-16 07:07:07 -04005307<a name='SkPaint_getFontBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005308## getFontBounds
5309
Cary Clark682c58d2018-05-16 07:07:07 -04005310<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5311<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005312</pre>
5313
Cary Clark682c58d2018-05-16 07:07:07 -04005314Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
5315Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
5316ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
5317and <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 -04005318
Cary Clark682c58d2018-05-16 07:07:07 -04005319If <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,
5320returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
5321<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 -04005322
5323### Return Value
5324
Cary Clark682c58d2018-05-16 07:07:07 -04005325union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04005326
5327### Example
5328
5329<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
5330
5331#### Example Output
5332
5333~~~~
5334metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5335font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5336~~~~
5337
5338</fiddle-embed></div>
5339
5340---
5341
Cary Clark682c58d2018-05-16 07:07:07 -04005342<a name='SkPaint_textToGlyphs'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005343## textToGlyphs
5344
Cary Clark682c58d2018-05-16 07:07:07 -04005345<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5346int <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 -04005347</pre>
5348
Cary Clark682c58d2018-05-16 07:07:07 -04005349Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
5350Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
5351<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>.
5352<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04005353
Cary Clark682c58d2018-05-16 07:07:07 -04005354Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04005355
Cary Clark682c58d2018-05-16 07:07:07 -04005356If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
5357If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04005358
Cary Clark682c58d2018-05-16 07:07:07 -04005359If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
5360<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04005361
5362### Parameters
5363
Cary Clark682c58d2018-05-16 07:07:07 -04005364<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
5365 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5366 </tr>
5367 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
5368 <td>length of character storage in bytes</td>
5369 </tr>
5370 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
5371 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005372 </tr>
5373</table>
5374
5375### Return Value
5376
Cary Clark682c58d2018-05-16 07:07:07 -04005377number 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 -04005378
5379### Example
5380
5381<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
5382
5383---
5384
Cary Clark682c58d2018-05-16 07:07:07 -04005385<a name='SkPaint_countText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005386## countText
5387
Cary Clark682c58d2018-05-16 07:07:07 -04005388<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5389int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005390</pre>
5391
Cary Clark682c58d2018-05-16 07:07:07 -04005392Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
5393Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
5394Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005395
5396### Parameters
5397
Cary Clark682c58d2018-05-16 07:07:07 -04005398<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
5399 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5400 </tr>
5401 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
5402 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04005403 </tr>
5404</table>
5405
5406### Return Value
5407
Cary Clark682c58d2018-05-16 07:07:07 -04005408number 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 -04005409
5410### Example
5411
5412<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
5413
5414#### Example Output
5415
5416~~~~
5417count = 5
5418~~~~
5419
5420</fiddle-embed></div>
5421
5422---
5423
Cary Clark682c58d2018-05-16 07:07:07 -04005424<a name='SkPaint_containsText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005425## containsText
5426
Cary Clark682c58d2018-05-16 07:07:07 -04005427<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5428bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005429</pre>
5430
Cary Clark682c58d2018-05-16 07:07:07 -04005431Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
5432Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
5433<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005434
Cary Clark682c58d2018-05-16 07:07:07 -04005435If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
5436returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
5437does 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 -04005438
Cary Clark682c58d2018-05-16 07:07:07 -04005439Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04005440
5441### Parameters
5442
Cary Clark682c58d2018-05-16 07:07:07 -04005443<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
5444 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
5445 </tr>
5446 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
5447 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04005448 </tr>
5449</table>
5450
5451### Return Value
5452
Cary Clark682c58d2018-05-16 07:07:07 -04005453true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04005454
5455### Example
5456
Cary Clark682c58d2018-05-16 07:07:07 -04005457<div><fiddle-embed name="71b417d6651cbcecae1a05067c94ab3e"><div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05005458corresponding to the Unicode surrogate code point.
5459</div>
Cary Clark12799e12017-07-28 15:18:29 -04005460
5461#### Example Output
5462
5463~~~~
54640x00b0 == has char
54650xd800 != has char
5466~~~~
5467
5468</fiddle-embed></div>
5469
5470### Example
5471
Cary Clark682c58d2018-05-16 07:07:07 -04005472<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href='#SkPaint_containsText'>containsText</a> returns true that glyph index is greater than zero, not
5473that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05005474</div>
Cary Clark12799e12017-07-28 15:18:29 -04005475
5476#### Example Output
5477
5478~~~~
54790x01ff == has glyph
54800x0000 != has glyph
54810xffff == has glyph
5482~~~~
5483
5484</fiddle-embed></div>
5485
5486### See Also
5487
Cary Clark682c58d2018-05-16 07:07:07 -04005488<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04005489
5490---
5491
Cary Clark682c58d2018-05-16 07:07:07 -04005492<a name='SkPaint_glyphsToUnichars'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005493## glyphsToUnichars
5494
Cary Clark682c58d2018-05-16 07:07:07 -04005495<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5496void <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 -04005497</pre>
5498
Cary Clark682c58d2018-05-16 07:07:07 -04005499Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
5500<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
5501Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
5502by <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 -04005503
Cary Clark682c58d2018-05-16 07:07:07 -04005504Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005505
5506### Parameters
5507
Cary Clark682c58d2018-05-16 07:07:07 -04005508<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
5509 <td>array of indices into font</td>
5510 </tr>
5511 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
5512 <td>length of glyph array</td>
5513 </tr>
5514 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
5515 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04005516 </tr>
5517</table>
5518
5519### Example
5520
Cary Clark682c58d2018-05-16 07:07:07 -04005521<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 -05005522</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005523
5524---
5525
Cary Clark682c58d2018-05-16 07:07:07 -04005526## <a name='Measure_Text'>Measure Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005527
Cary Clark682c58d2018-05-16 07:07:07 -04005528<a name='SkPaint_measureText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005529## measureText
5530
Cary Clark682c58d2018-05-16 07:07:07 -04005531<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5532<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 -04005533</pre>
5534
Cary Clark682c58d2018-05-16 07:07:07 -04005535Returns the advance width of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5536and the height of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5537The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
5538Uses <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,
5539and <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
5540<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
5541Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
5542The 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 -04005543
5544### Parameters
5545
Cary Clark682c58d2018-05-16 07:07:07 -04005546<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
5547 <td>character codes or glyph indices to be measured</td>
5548 </tr>
5549 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
5550 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
5551 </tr>
5552 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
5553 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005554 </tr>
5555</table>
5556
5557### Return Value
5558
5559advance width or height
5560
5561### Example
5562
5563<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
5564
5565---
5566
Cary Clark682c58d2018-05-16 07:07:07 -04005567<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05005568
Cary Clark682c58d2018-05-16 07:07:07 -04005569<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5570<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 -04005571</pre>
5572
Cary Clark682c58d2018-05-16 07:07:07 -04005573Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5574and the height of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5575The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
5576Uses <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,
5577and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5578Does 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 -04005579
5580### Parameters
5581
Cary Clark682c58d2018-05-16 07:07:07 -04005582<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
5583 <td>character codes or glyph indices to be measured</td>
5584 </tr>
5585 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
5586 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04005587 </tr>
5588</table>
5589
5590### Return Value
5591
5592advance width or height
5593
5594### Example
5595
5596<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
5597
5598#### Example Output
5599
5600~~~~
5601default width = 5
5602double width = 10
5603~~~~
5604
5605</fiddle-embed></div>
5606
5607---
5608
Cary Clark682c58d2018-05-16 07:07:07 -04005609<a name='SkPaint_breakText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005610## breakText
5611
Cary Clark682c58d2018-05-16 07:07:07 -04005612<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5613size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
5614 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04005615</pre>
5616
Cary Clark682c58d2018-05-16 07:07:07 -04005617Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5618If <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
5619equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5620If <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
5621equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5622Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5623Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
5624Uses <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,
5625and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5626Does 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 -04005627
5628### Parameters
5629
Cary Clark682c58d2018-05-16 07:07:07 -04005630<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
5631 <td>character codes or glyph indices to be measured</td>
5632 </tr>
5633 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
5634 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
5635 </tr>
5636 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
5637 <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>
5638 </tr>
5639 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
5640 <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 -04005641 </tr>
5642</table>
5643
5644### Return Value
5645
Cary Clark682c58d2018-05-16 07:07:07 -04005646bytes 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 -04005647
5648### Example
5649
Cary Clark682c58d2018-05-16 07:07:07 -04005650<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
5651<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 -05005652</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005653
5654---
5655
Cary Clark682c58d2018-05-16 07:07:07 -04005656<a name='SkPaint_getTextWidths'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005657## getTextWidths
5658
Cary Clark682c58d2018-05-16 07:07:07 -04005659<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5660int <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 -04005661</pre>
5662
Cary Clark682c58d2018-05-16 07:07:07 -04005663Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
5664the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
5665Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
5666If <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.
5667if <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.
5668If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the horizontal advance.
5669If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the vertical advance.
5670Uses <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,
5671and <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>.
5672Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
5673Does 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 -04005674
5675### Parameters
5676
Cary Clark682c58d2018-05-16 07:07:07 -04005677<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
5678 <td>character codes or glyph indices to be measured</td>
5679 </tr>
5680 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
5681 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
5682 </tr>
5683 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
5684 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
5685 </tr>
5686 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
5687 <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 -04005688 </tr>
5689</table>
5690
5691### Return Value
5692
Cary Clark682c58d2018-05-16 07:07:07 -04005693glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005694
5695### Example
5696
Cary Clark682c58d2018-05-16 07:07:07 -04005697<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.
5698The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05005699</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005700
5701---
5702
Cary Clark682c58d2018-05-16 07:07:07 -04005703## <a name='Text_Path'>Text Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05005704
Cary Clark682c58d2018-05-16 07:07:07 -04005705<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 -04005706
Cary Clark682c58d2018-05-16 07:07:07 -04005707<a name='SkPaint_getTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005708## getTextPath
5709
Cary Clark682c58d2018-05-16 07:07:07 -04005710<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5711void <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 -04005712</pre>
5713
Cary Clark682c58d2018-05-16 07:07:07 -04005714Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
5715Uses <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,
5716and <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.
5717All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
5718Uses <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 -04005719
5720### Parameters
5721
Cary Clark682c58d2018-05-16 07:07:07 -04005722<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
5723 <td>character codes or glyph indices</td>
5724 </tr>
5725 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
5726 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
5727 </tr>
5728 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005729 <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 -04005730 </tr>
5731 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005732 <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 -04005733 </tr>
5734 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
5735 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005736 </tr>
5737</table>
5738
5739### Example
5740
Cary Clark682c58d2018-05-16 07:07:07 -04005741<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 -05005742the offset location. The result is rendered with one draw call.
5743</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005744
5745---
5746
Cary Clark682c58d2018-05-16 07:07:07 -04005747<a name='SkPaint_getPosTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005748## getPosTextPath
5749
Cary Clark682c58d2018-05-16 07:07:07 -04005750<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5751void <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 -04005752</pre>
5753
Cary Clark682c58d2018-05-16 07:07:07 -04005754Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
5755Uses <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,
5756and <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.
5757All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
5758Uses <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>.
5759<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04005760
5761### Parameters
5762
Cary Clark682c58d2018-05-16 07:07:07 -04005763<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
5764 <td>character codes or glyph indices</td>
5765 </tr>
5766 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
5767 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
5768 </tr>
5769 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
5770 <td>positions of each glyph</td>
5771 </tr>
5772 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
5773 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005774 </tr>
5775</table>
5776
5777### Example
5778
Cary Clark682c58d2018-05-16 07:07:07 -04005779<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 -05005780</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005781
5782---
5783
Cary Clark682c58d2018-05-16 07:07:07 -04005784## <a name='Text_Intercepts'>Text Intercepts</a>
Cary Clark08895c42018-02-01 09:37:32 -05005785
Cary Clark682c58d2018-05-16 07:07:07 -04005786<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
5787of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04005788underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005789
Cary Clark682c58d2018-05-16 07:07:07 -04005790<a name='SkPaint_getTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005791## getTextIntercepts
5792
Cary Clark682c58d2018-05-16 07:07:07 -04005793<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5794int <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,
5795 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005796</pre>
5797
Cary Clark682c58d2018-05-16 07:07:07 -04005798Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
5799<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
5800The 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 -05005801the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005802Uses <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,
5803and <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.
5804Uses <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 +00005805
Cary Clark682c58d2018-05-16 07:07:07 -04005806Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005807
Cary Clark682c58d2018-05-16 07:07:07 -04005808<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005809
5810### Parameters
5811
Cary Clark682c58d2018-05-16 07:07:07 -04005812<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
5813 <td>character codes or glyph indices</td>
5814 </tr>
5815 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
5816 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5817 </tr>
5818 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005819 <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 -04005820 </tr>
5821 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005822 <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 -04005823 </tr>
5824 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5825 <td>lower and upper line parallel to the advance</td>
5826 </tr>
5827 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5828 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005829 </tr>
5830</table>
5831
5832### Return Value
5833
5834number of intersections; may be zero
5835
5836### Example
5837
Cary Clark1a8d7622018-03-05 13:26:16 -05005838<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
5839</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005840
5841---
5842
Cary Clark682c58d2018-05-16 07:07:07 -04005843<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005844## getPosTextIntercepts
5845
Cary Clark682c58d2018-05-16 07:07:07 -04005846<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5847int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
5848 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005849</pre>
5850
Cary Clark682c58d2018-05-16 07:07:07 -04005851Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5852<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5853The 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 -05005854the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005855Uses <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,
5856and <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.
5857Uses <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 +00005858
Cary Clark682c58d2018-05-16 07:07:07 -04005859Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005860
Cary Clark682c58d2018-05-16 07:07:07 -04005861<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005862
5863### Parameters
5864
Cary Clark682c58d2018-05-16 07:07:07 -04005865<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5866 <td>character codes or glyph indices</td>
5867 </tr>
5868 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5869 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5870 </tr>
5871 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5872 <td>positions of each glyph</td>
5873 </tr>
5874 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5875 <td>lower and upper line parallel to the advance</td>
5876 </tr>
5877 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5878 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005879 </tr>
5880</table>
5881
5882### Return Value
5883
Cary Clarka523d2d2017-08-30 08:58:10 -04005884number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005885
5886### Example
5887
Cary Clark682c58d2018-05-16 07:07:07 -04005888<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 -05005889</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005890
5891---
5892
Cary Clark682c58d2018-05-16 07:07:07 -04005893<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005894## getPosTextHIntercepts
5895
Cary Clark682c58d2018-05-16 07:07:07 -04005896<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5897int <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,
5898 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005899</pre>
5900
Cary Clark682c58d2018-05-16 07:07:07 -04005901Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5902<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5903The 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 -05005904the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005905Uses <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,
5906and <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.
5907Uses <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 +00005908
Cary Clark682c58d2018-05-16 07:07:07 -04005909Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005910
Cary Clark682c58d2018-05-16 07:07:07 -04005911<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005912
5913### Parameters
5914
Cary Clark682c58d2018-05-16 07:07:07 -04005915<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5916 <td>character codes or glyph indices</td>
5917 </tr>
5918 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5919 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5920 </tr>
5921 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5922 <td>positions of each glyph in x</td>
5923 </tr>
5924 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5925 <td>position of each glyph in y</td>
5926 </tr>
5927 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5928 <td>lower and upper line parallel to the advance</td>
5929 </tr>
5930 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5931 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005932 </tr>
5933</table>
5934
5935### Return Value
5936
5937number of intersections; may be zero
5938
5939### Example
5940
Cary Clark682c58d2018-05-16 07:07:07 -04005941<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 -05005942</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005943
5944---
5945
Cary Clark682c58d2018-05-16 07:07:07 -04005946<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005947## getTextBlobIntercepts
5948
Cary Clark682c58d2018-05-16 07:07:07 -04005949<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5950int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='undocumented#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 -04005951</pre>
5952
Cary Clark682c58d2018-05-16 07:07:07 -04005953Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5954<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
5955The 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 -05005956the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005957Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5958and <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.
5959Uses 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 +00005960
Cary Clark682c58d2018-05-16 07:07:07 -04005961<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 -05005962
Cary Clark682c58d2018-05-16 07:07:07 -04005963Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005964
Cary Clark682c58d2018-05-16 07:07:07 -04005965<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005966
5967### Parameters
5968
Cary Clark682c58d2018-05-16 07:07:07 -04005969<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5970 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5971 </tr>
5972 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5973 <td>lower and upper line parallel to the advance</td>
5974 </tr>
5975 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5976 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005977 </tr>
5978</table>
5979
5980### Return Value
5981
5982number of intersections; may be zero
5983
5984### Example
5985
skia-bookmaker525f9a92018-05-03 06:27:39 +00005986<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005987
5988---
5989
Cary Clark682c58d2018-05-16 07:07:07 -04005990<a name='SkPaint_nothingToDraw'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005991## nothingToDraw
5992
Cary Clark682c58d2018-05-16 07:07:07 -04005993<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5994bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005995</pre>
5996
Cary Clark682c58d2018-05-16 07:07:07 -04005997Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
5998otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005999
Cary Clark682c58d2018-05-16 07:07:07 -04006000Returns true if, for example, <a href='undocumented#Blend_Mode'>Blend Mode</a> combined with <a href='SkColor_Reference#Alpha'>Color Alpha</a> computes a
6001new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04006002
6003### Return Value
6004
Cary Clark682c58d2018-05-16 07:07:07 -04006005true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04006006
6007### Example
6008
skia-bookmaker525f9a92018-05-03 06:27:39 +00006009<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04006010
6011#### Example Output
6012
6013~~~~
6014initial nothing to draw: false
6015blend dst nothing to draw: true
6016blend src over nothing to draw: false
6017alpha 0 nothing to draw: true
6018~~~~
6019
6020</fiddle-embed></div>
6021
6022---
6023
Cary Clark682c58d2018-05-16 07:07:07 -04006024## <a name='Fast_Bounds'>Fast Bounds</a>
Cary Clark08895c42018-02-01 09:37:32 -05006025
Cary Clark682c58d2018-05-16 07:07:07 -04006026To be made private.
6027<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
6028<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04006029
Cary Clark682c58d2018-05-16 07:07:07 -04006030<a name='SkPaint_canComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006031## canComputeFastBounds
6032
Cary Clark682c58d2018-05-16 07:07:07 -04006033<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6034bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04006035</pre>
6036
Cary Clark682c58d2018-05-16 07:07:07 -04006037( to be made private)
6038Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
6039to 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 -04006040always returns false.
6041
6042### Return Value
6043
Cary Clark682c58d2018-05-16 07:07:07 -04006044true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04006045
6046---
6047
Cary Clark682c58d2018-05-16 07:07:07 -04006048<a name='SkPaint_computeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006049## computeFastBounds
6050
Cary Clark682c58d2018-05-16 07:07:07 -04006051<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6052const <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 -04006053</pre>
6054
Cary Clark682c58d2018-05-16 07:07:07 -04006055( to be made private)
6056Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04006057raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04006058effects 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 -04006059parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04006060for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04006061
Cary Clark682c58d2018-05-16 07:07:07 -04006062The 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
6063should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
6064use 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
6065<a href='SkRect_Reference#Rect'>Rect</a>.
6066
6067For example:
6068if (!path.isInverseFillType() && paint.<a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>) {
6069<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_computeFastBounds_storage'>storage</a>;
6070if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &<a href='#SkPaint_computeFastBounds_storage'>storage</a>))) {
Cary Clark137b8742018-05-30 09:21:49 -04006071return; // do not draw the path
Cary Clark682c58d2018-05-16 07:07:07 -04006072}
6073}
6074// draw the path
Cary Clark12799e12017-07-28 15:18:29 -04006075
6076### Parameters
6077
Cary Clark682c58d2018-05-16 07:07:07 -04006078<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6079 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6080 </tr>
6081 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6082 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04006083 </tr>
6084</table>
6085
6086### Return Value
6087
6088fast computed bounds
6089
6090---
6091
Cary Clark682c58d2018-05-16 07:07:07 -04006092<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006093## computeFastStrokeBounds
6094
Cary Clark682c58d2018-05-16 07:07:07 -04006095<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6096const <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 -04006097</pre>
6098
Cary Clark682c58d2018-05-16 07:07:07 -04006099( to be made private)
6100
Cary Clark12799e12017-07-28 15:18:29 -04006101### Parameters
6102
Cary Clark682c58d2018-05-16 07:07:07 -04006103<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
6104 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6105 </tr>
6106 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
6107 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04006108 </tr>
6109</table>
6110
6111### Return Value
6112
6113fast computed bounds
6114
6115---
6116
Cary Clark682c58d2018-05-16 07:07:07 -04006117<a name='SkPaint_doComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006118## doComputeFastBounds
6119
Cary Clark682c58d2018-05-16 07:07:07 -04006120<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6121const <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 -04006122</pre>
6123
Cary Clark682c58d2018-05-16 07:07:07 -04006124( to be made private)
6125Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
6126account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
6127altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04006128
6129### Parameters
6130
Cary Clark682c58d2018-05-16 07:07:07 -04006131<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6132 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6133 </tr>
6134 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6135 <td>computed bounds of geometry</td>
6136 </tr>
6137 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
6138 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04006139 </tr>
6140</table>
6141
6142### Return Value
6143
6144fast computed bounds
6145
6146---
6147
Cary Clark682c58d2018-05-16 07:07:07 -04006148## <a name='Utility'>Utility</a>
Cary Clark78de7512018-02-07 07:27:09 -05006149
Cary Clark78de7512018-02-07 07:27:09 -05006150
Cary Clark682c58d2018-05-16 07:07:07 -04006151<table style='border-collapse: collapse; width: 62.5em'>
6152 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
6153<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
6154 <tr style='background-color: #f0f0f0; '>
6155 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
6156 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
6157 </tr>
6158 <tr>
6159 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
6160 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
6161 </tr>
6162 <tr style='background-color: #f0f0f0; '>
6163 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
6164 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
6165 </tr>
6166 <tr>
6167 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
6168 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
6169 </tr>
6170 <tr style='background-color: #f0f0f0; '>
6171 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
6172 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
6173 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04006174</table>