blob: 342579d23175fe6a2cde75c400b3bdf25a63943d [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>
Cary Clark224c7002018-06-27 11:00:21 -040086 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -040087 </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 Clark682c58d2018-05-16 07:07:07 -0400258## <a name='Constant'>Constant</a>
Cary Clark12799e12017-07-28 15:18:29 -0400259
Cary Clark12799e12017-07-28 15:18:29 -0400260
Cary Clark682c58d2018-05-16 07:07:07 -0400261SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
262<table style='border-collapse: collapse; width: 62.5em'>
263 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
264<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
265 <tr style='background-color: #f0f0f0; '>
266 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Align'>Align</a></td>
267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph locations relative to text position</td>
268 </tr>
269 <tr>
270 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Cap'>Cap</a></td>
271 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>start and end geometry on stroked shapes</td>
272 </tr>
273 <tr style='background-color: #f0f0f0; '>
274 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
275 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values described by bits and masks</td>
276 </tr>
277 <tr>
278 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
279 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>level of glyph outline adjustment</td>
280 </tr>
281 <tr style='background-color: #f0f0f0; '>
282 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Join'>Join</a></td>
283 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>corner geometry on stroked shapes</td>
284 </tr>
285 <tr>
286 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
287 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>stroke, fill, or both</td>
288 </tr>
289 <tr style='background-color: #f0f0f0; '>
290 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_TextEncoding'>TextEncoding</a></td>
291 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>character or glyph encoded size</td>
292 </tr>
293 <tr>
294 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAlignCount'>kAlignCount</a></td>
295 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Text_Align'>Text Align</a> values defined</td>
296 </tr>
297 <tr style='background-color: #f0f0f0; '>
298 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAllFlags'>kAllFlags</a></td>
299 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask of all <a href='#SkPaint_Flags'>Flags</a></td>
300 </tr>
301 <tr>
302 <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 -0400303 <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 -0400304 </tr>
305 <tr style='background-color: #f0f0f0; '>
306 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
307 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Automatic_Hinting'>Automatic Hinting</a></td>
308 </tr>
309 <tr>
310 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kBevel_Join'>kBevel Join</a></td>
311 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>connects outside edges</td>
312 </tr>
313 <tr style='background-color: #f0f0f0; '>
314 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>no stroke extension</td>
316 </tr>
317 <tr>
318 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCapCount'>kCapCount</a></td>
319 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Cap'>Stroke Cap</a> values defined</td>
320 </tr>
321 <tr style='background-color: #f0f0f0; '>
322 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCenter_Align'>kCenter Align</a></td>
323 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>centers line of glyphs by its width or height</td>
324 </tr>
325 <tr>
326 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Cap'>kDefault Cap</a></td>
327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
328 </tr>
329 <tr style='background-color: #f0f0f0; '>
330 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Join'>kDefault Join</a></td>
331 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
332 </tr>
333 <tr>
334 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
335 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Dither'>Dither</a></td>
336 </tr>
337 <tr style='background-color: #f0f0f0; '>
338 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
339 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
340 </tr>
341 <tr>
342 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
343 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Fake_Bold'>Fake Bold</a></td>
344 </tr>
345 <tr style='background-color: #f0f0f0; '>
346 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFill_Style'>kFill Style</a></td>
347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to fill geometry</td>
348 </tr>
349 <tr>
350 <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 -0400351 <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 -0400352 </tr>
353 <tr style='background-color: #f0f0f0; '>
354 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
355 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent glyph indices</td>
356 </tr>
357 <tr>
358 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kJoinCount'>kJoinCount</a></td>
359 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Join'>Stroke Join</a> values defined</td>
360 </tr>
361 <tr style='background-color: #f0f0f0; '>
362 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
363 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#LCD_Text'>LCD Text</a></td>
364 </tr>
365 <tr>
366 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Cap'>kLast Cap</a></td>
367 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>largest <a href='#Stroke_Cap'>Stroke Cap</a> value</td>
368 </tr>
369 <tr style='background-color: #f0f0f0; '>
370 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Join'>kLast Join</a></td>
371 <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>
372 </tr>
373 <tr>
374 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLeft_Align'>kLeft Align</a></td>
375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>positions glyph by computed font offset</td>
376 </tr>
377 <tr style='background-color: #f0f0f0; '>
378 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
379 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Linear_Text'>Linear Text</a></td>
380 </tr>
381 <tr>
382 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
383 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extends to <a href='#Miter_Limit'>Miter Limit</a></td>
384 </tr>
385 <tr style='background-color: #f0f0f0; '>
386 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNo_Hinting'>kNo Hinting</a></td>
387 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines unchanged</td>
388 </tr>
389 <tr>
390 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a></td>
391 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines modified to improve constrast</td>
392 </tr>
393 <tr style='background-color: #f0f0f0; '>
394 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRight_Align'>kRight Align</a></td>
395 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves lines of glyphs by its width or height</td>
396 </tr>
397 <tr>
398 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Cap'>kRound Cap</a></td>
399 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
400 </tr>
401 <tr style='background-color: #f0f0f0; '>
402 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Join'>kRound Join</a></td>
403 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
404 </tr>
405 <tr>
406 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a></td>
407 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimal modification to improve constrast</td>
408 </tr>
409 <tr style='background-color: #f0f0f0; '>
410 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSquare_Cap'>kSquare Cap</a></td>
411 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds square</td>
412 </tr>
413 <tr>
414 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a></td>
415 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to stroke and fill geometry</td>
416 </tr>
417 <tr style='background-color: #f0f0f0; '>
418 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStroke_Style'>kStroke Style</a></td>
419 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to stroke geometry</td>
420 </tr>
421 <tr>
422 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStyleCount'>kStyleCount</a></td>
423 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#SkPaint_Style'>Style</a> values defined</td>
424 </tr>
425 <tr style='background-color: #f0f0f0; '>
426 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
427 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Subpixel_Text'>Subpixel Text</a></td>
428 </tr>
429 <tr>
430 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a></td>
431 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent most of Unicode</td>
432 </tr>
433 <tr style='background-color: #f0f0f0; '>
434 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a></td>
435 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses four byte words to represent all of Unicode</td>
436 </tr>
437 <tr>
438 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a></td>
439 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses bytes to represent UTF-8 or ASCII</td>
440 </tr>
441 <tr style='background-color: #f0f0f0; '>
442 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
443 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Vertical_Text'>Vertical Text</a></td>
444 </tr>
445</table>
Cary Clark12799e12017-07-28 15:18:29 -0400446
Cary Clark682c58d2018-05-16 07:07:07 -0400447## <a name='Struct'>Struct</a>
Cary Clark12799e12017-07-28 15:18:29 -0400448
Cary Clark12799e12017-07-28 15:18:29 -0400449
Cary Clark682c58d2018-05-16 07:07:07 -0400450SkPaint uses C++ structs to declare the public data structures and interfaces.
451<table style='border-collapse: collapse; width: 62.5em'>
452 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
453<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
454 <tr style='background-color: #f0f0f0; '>
455 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics'>FontMetrics</a></td>
456 <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>
457 </tr>
458</table>
459
Cary Clark682c58d2018-05-16 07:07:07 -0400460## <a name='Constructor'>Constructor</a>
461
462
463SkPaint can be constructed or initialized by these functions, including C++ class constructors.
464<table style='border-collapse: collapse; width: 62.5em'>
465 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
466<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
467 <tr style='background-color: #f0f0f0; '>
468 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_empty_constructor'>SkPaint()</a></td>
469 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructs with default values</td>
470 </tr>
471 <tr>
472 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_SkPaint'>SkPaint(SkPaint&& paint)</a></td>
473 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
474 </tr>
475 <tr style='background-color: #f0f0f0; '>
476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_const_SkPaint'>SkPaint(const SkPaint& paint)</a></td>
477 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
478 </tr>
479 <tr>
480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_destructor'>~SkPaint()</a></td>
481 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decreases <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects</td>
482 </tr>
483</table>
484
Cary Clark682c58d2018-05-16 07:07:07 -0400485## <a name='Operator'>Operator</a>
486
487
488SkPaint operators inline class member functions with arithmetic equivalents.
489<table style='border-collapse: collapse; width: 62.5em'>
490 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
491<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
492 <tr style='background-color: #f0f0f0; '>
493 <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>
494 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for inequality</td>
495 </tr>
496 <tr>
497 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a></td>
498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
499 </tr>
500 <tr style='background-color: #f0f0f0; '>
501 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a></td>
502 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
503 </tr>
504 <tr>
505 <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>
506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for equality</td>
507 </tr>
508</table>
509
Cary Clark682c58d2018-05-16 07:07:07 -0400510## <a name='Member_Function'>Member Function</a>
511
512
513SkPaint member functions read and modify the structure properties.
514<table style='border-collapse: collapse; width: 62.5em'>
515 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
516<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
517 <tr style='background-color: #f0f0f0; '>
518 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_breakText'>breakText</a></td>
519 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text that fits in a width</td>
520 </tr>
521 <tr>
522 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a></td>
523 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if settings allow for fast bounds computation</td>
524 </tr>
525 <tr style='background-color: #f0f0f0; '>
526 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastBounds'>computeFastBounds</a></td>
527 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill bounds for quick reject tests</td>
528 </tr>
529 <tr>
530 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a></td>
531 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns stroke bounds for quick reject tests</td>
532 </tr>
533 <tr style='background-color: #f0f0f0; '>
534 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
535 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
536 </tr>
537 <tr>
538 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
539 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
540 </tr>
541 <tr style='background-color: #f0f0f0; '>
542 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a></td>
543 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns bounds for quick reject tests</td>
544 </tr>
545 <tr>
546 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getAlpha'>getAlpha</a></td>
547 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
548 </tr>
549 <tr style='background-color: #f0f0f0; '>
550 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getBlendMode'>getBlendMode</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400551 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, how colors combine with <a href='undocumented#Device'>Device</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400552 </tr>
553 <tr>
554 <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 -0400555 <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 -0400556 </tr>
557 <tr style='background-color: #f0f0f0; '>
558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColorFilter'>getColorFilter</a></td>
559 <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>
560 </tr>
561 <tr>
562 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getDrawLooper'>getDrawLooper</a></td>
563 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
564 </tr>
565 <tr style='background-color: #f0f0f0; '>
566 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFillPath'>getFillPath</a></td>
567 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill path equivalent to stroke</td>
568 </tr>
569 <tr>
570 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFilterQuality'>getFilterQuality</a></td>
571 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, image filtering level</td>
572 </tr>
573 <tr style='background-color: #f0f0f0; '>
574 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFlags'>getFlags</a></td>
575 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Flags'>Flags</a> stored in a bit field</td>
576 </tr>
577 <tr>
578 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontBounds'>getFontBounds</a></td>
579 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns union all glyph bounds</td>
580 </tr>
581 <tr style='background-color: #f0f0f0; '>
582 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontMetrics'>getFontMetrics</a></td>
583 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a> metrics scaled by text size</td>
584 </tr>
585 <tr>
586 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontSpacing'>getFontSpacing</a></td>
587 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns recommended spacing between lines</td>
588 </tr>
589 <tr style='background-color: #f0f0f0; '>
590 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHash'>getHash</a></td>
591 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns a shallow hash for equality checks</td>
592 </tr>
593 <tr>
594 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHinting'>getHinting</a></td>
595 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
596 </tr>
597 <tr style='background-color: #f0f0f0; '>
598 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getImageFilter'>getImageFilter</a></td>
599 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
600 </tr>
601 <tr>
602 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getMaskFilter'>getMaskFilter</a></td>
603 <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>
604 </tr>
605 <tr style='background-color: #f0f0f0; '>
606 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPathEffect'>getPathEffect</a></td>
607 <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>
608 </tr>
609 <tr>
610 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a></td>
611 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect horizontally positioned text; underlines</td>
612 </tr>
613 <tr style='background-color: #f0f0f0; '>
614 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a></td>
615 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect positioned text; underlines</td>
616 </tr>
617 <tr>
618 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextPath'>getPosTextPath</a></td>
619 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to positioned text</td>
620 </tr>
621 <tr style='background-color: #f0f0f0; '>
622 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getShader'>getShader</a></td>
623 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
624 </tr>
625 <tr>
626 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeCap'>getStrokeCap</a></td>
627 <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>
628 </tr>
629 <tr style='background-color: #f0f0f0; '>
630 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a></td>
631 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
632 </tr>
633 <tr>
634 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a></td>
635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
636 </tr>
637 <tr style='background-color: #f0f0f0; '>
638 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a></td>
639 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns thickness of the stroke</td>
640 </tr>
641 <tr>
642 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStyle'>getStyle</a></td>
643 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
644 </tr>
645 <tr style='background-color: #f0f0f0; '>
646 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextAlign'>getTextAlign</a></td>
647 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
648 </tr>
649 <tr>
650 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a></td>
651 <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>
652 </tr>
653 <tr style='background-color: #f0f0f0; '>
654 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextEncoding'>getTextEncoding</a></td>
655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns character or glyph encoded size</td>
656 </tr>
657 <tr>
658 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a></td>
659 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect text; underlines</td>
660 </tr>
661 <tr style='background-color: #f0f0f0; '>
662 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextPath'>getTextPath</a></td>
663 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to text</td>
664 </tr>
665 <tr>
666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextScaleX'>getTextScaleX</a></td>
667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal scale; condensed text</td>
668 </tr>
669 <tr style='background-color: #f0f0f0; '>
670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSize'>getTextSize</a></td>
671 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text size in points</td>
672 </tr>
673 <tr>
674 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSkewX'>getTextSkewX</a></td>
675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal skew; oblique text</td>
676 </tr>
677 <tr style='background-color: #f0f0f0; '>
678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextWidths'>getTextWidths</a></td>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance and bounds for each glyph in text</td>
680 </tr>
681 <tr>
682 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTypeface'>getTypeface</a></td>
683 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a>, font description</td>
684 </tr>
685 <tr style='background-color: #f0f0f0; '>
686 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
687 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
688 </tr>
689 <tr>
690 <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 -0400691 <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 -0400692 </tr>
693 <tr style='background-color: #f0f0f0; '>
694 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAutohinted'>isAutohinted</a></td>
695 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Glyph'>Glyphs</a> are always hinted</td>
696 </tr>
697 <tr>
698 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isDither'>isDither</a></td>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Dither'>Dither</a> is set</td>
700 </tr>
701 <tr style='background-color: #f0f0f0; '>
702 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a></td>
703 <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>
704 </tr>
705 <tr>
706 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a></td>
707 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Fake_Bold'>Fake Bold</a> is set</td>
708 </tr>
709 <tr style='background-color: #f0f0f0; '>
710 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a></td>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#LCD_Text'>LCD Text</a> is set</td>
712 </tr>
713 <tr>
714 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLinearText'>isLinearText</a></td>
715 <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>
716 </tr>
717 <tr style='background-color: #f0f0f0; '>
718 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSrcOver'>isSrcOver</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400719 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400720 </tr>
721 <tr>
722 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSubpixelText'>isSubpixelText</a></td>
723 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Subpixel_Text'>Subpixel Text</a> is set</td>
724 </tr>
725 <tr style='background-color: #f0f0f0; '>
726 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isVerticalText'>isVerticalText</a></td>
727 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Vertical_Text'>Vertical Text</a> is set</td>
728 </tr>
729 <tr>
730 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_measureText'>measureText</a></td>
731 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance width and bounds of text</td>
732 </tr>
733 <tr style='background-color: #f0f0f0; '>
734 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
736 </tr>
737 <tr>
738 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refColorFilter'>refColorFilter</a></td>
739 <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>
740 </tr>
741 <tr style='background-color: #f0f0f0; '>
742 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refDrawLooper'>refDrawLooper</a></td>
743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
744 </tr>
745 <tr>
746 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refImageFilter'>refImageFilter</a></td>
747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
748 </tr>
749 <tr style='background-color: #f0f0f0; '>
750 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refMaskFilter'>refMaskFilter</a></td>
751 <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>
752 </tr>
753 <tr>
754 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refPathEffect'>refPathEffect</a></td>
755 <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>
756 </tr>
757 <tr style='background-color: #f0f0f0; '>
758 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refShader'>refShader</a></td>
759 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
760 </tr>
761 <tr>
762 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refTypeface'>refTypeface</a></td>
763 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Typeface'>Typeface</a>, font description</td>
764 </tr>
765 <tr style='background-color: #f0f0f0; '>
766 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_reset'>reset</a></td>
767 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to default values</td>
768 </tr>
769 <tr>
770 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setARGB'>setARGB</a></td>
771 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets color by component</td>
772 </tr>
773 <tr style='background-color: #f0f0f0; '>
774 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAlpha'>setAlpha</a></td>
775 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
776 </tr>
777 <tr>
778 <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 -0400779 <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 -0400780 </tr>
781 <tr style='background-color: #f0f0f0; '>
782 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAutohinted'>setAutohinted</a></td>
783 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Glyph'>Glyphs</a> to always be hinted</td>
784 </tr>
785 <tr>
786 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setBlendMode'>setBlendMode</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, how colors combine with destination</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400788 </tr>
789 <tr style='background-color: #f0f0f0; '>
790 <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 -0400791 <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 -0400792 </tr>
793 <tr>
794 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColorFilter'>setColorFilter</a></td>
795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Color_Filter'>Color Filter</a>, alters color</td>
796 </tr>
797 <tr style='background-color: #f0f0f0; '>
798 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDither'>setDither</a></td>
799 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Dither'>Dither</a></td>
800 </tr>
801 <tr>
802 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDrawLooper'>setDrawLooper</a></td>
803 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
804 </tr>
805 <tr style='background-color: #f0f0f0; '>
806 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a></td>
807 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
808 </tr>
809 <tr>
810 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a></td>
811 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Fake_Bold'>Fake Bold</a></td>
812 </tr>
813 <tr style='background-color: #f0f0f0; '>
814 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFilterQuality'>setFilterQuality</a></td>
815 <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>
816 </tr>
817 <tr>
818 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFlags'>setFlags</a></td>
819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets multiple <a href='#SkPaint_Flags'>Flags</a> in a bit field</td>
820 </tr>
821 <tr style='background-color: #f0f0f0; '>
822 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setHinting'>setHinting</a></td>
823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
824 </tr>
825 <tr>
826 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setImageFilter'>setImageFilter</a></td>
827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
828 </tr>
829 <tr style='background-color: #f0f0f0; '>
830 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a></td>
831 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#LCD_Text'>LCD Text</a></td>
832 </tr>
833 <tr>
834 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLinearText'>setLinearText</a></td>
835 <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>
836 </tr>
837 <tr style='background-color: #f0f0f0; '>
838 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setMaskFilter'>setMaskFilter</a></td>
839 <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>
840 </tr>
841 <tr>
842 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setPathEffect'>setPathEffect</a></td>
843 <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>
844 </tr>
845 <tr style='background-color: #f0f0f0; '>
846 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setShader'>setShader</a></td>
847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
848 </tr>
849 <tr>
850 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeCap'>setStrokeCap</a></td>
851 <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>
852 </tr>
853 <tr style='background-color: #f0f0f0; '>
854 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a></td>
855 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
856 </tr>
857 <tr>
858 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a></td>
859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
860 </tr>
861 <tr style='background-color: #f0f0f0; '>
862 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a></td>
863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets thickness of the stroke</td>
864 </tr>
865 <tr>
866 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStyle'>setStyle</a></td>
867 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
868 </tr>
869 <tr style='background-color: #f0f0f0; '>
870 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setSubpixelText'>setSubpixelText</a></td>
871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Subpixel_Text'>Subpixel Text</a></td>
872 </tr>
873 <tr>
874 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextAlign'>setTextAlign</a></td>
875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
876 </tr>
877 <tr style='background-color: #f0f0f0; '>
878 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextEncoding'>setTextEncoding</a></td>
879 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets character or glyph encoded size</td>
880 </tr>
881 <tr>
882 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextScaleX'>setTextScaleX</a></td>
883 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal scale; condensed text</td>
884 </tr>
885 <tr style='background-color: #f0f0f0; '>
886 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSize'>setTextSize</a></td>
887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets text size in points</td>
888 </tr>
889 <tr>
890 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSkewX'>setTextSkewX</a></td>
891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal skew; oblique text</td>
892 </tr>
893 <tr style='background-color: #f0f0f0; '>
894 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTypeface'>setTypeface</a></td>
895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Typeface'>Typeface</a>, font description</td>
896 </tr>
897 <tr>
898 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setVerticalText'>setVerticalText</a></td>
899 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Vertical_Text'>Vertical Text</a></td>
900 </tr>
901 <tr style='background-color: #f0f0f0; '>
902 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
904 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400905</table>
906
Cary Clark682c58d2018-05-16 07:07:07 -0400907## <a name='Initializers'>Initializers</a>
908
909<a name='SkPaint_empty_constructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400910## SkPaint
911
Cary Clark682c58d2018-05-16 07:07:07 -0400912<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
913<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400914</pre>
915
Cary Clark682c58d2018-05-16 07:07:07 -0400916Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400917
918| attribute | default value |
919| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400920| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark224c7002018-06-27 11:00:21 -0400921| <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
Cary Clark682c58d2018-05-16 07:07:07 -0400922| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
923| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
924| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
925| <a href='#Dither'>Dither</a> | false |
926| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
927| <a href='#Fake_Bold'>Fake Bold</a> | false |
928| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
929| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
930| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
931| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
932| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
933| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
934| <a href='#LCD_Text'>LCD Text</a> | false |
935| <a href='#Linear_Text'>Linear Text</a> | false |
936| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
937| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
938| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
939| <a href='undocumented#Shader'>Shader</a> | nullptr |
940| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
941| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
942| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
943| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
944| <a href='#Text_Size'>Text Size</a> | 12 |
945| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
946| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
947| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
948| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
949| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
950| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
951| <a href='#Vertical_Text'>Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400952
953The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500954paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400955build system.
956
957### Return Value
958
Cary Clark682c58d2018-05-16 07:07:07 -0400959default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400960
961### Example
962
963<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
964
965---
966
Cary Clark682c58d2018-05-16 07:07:07 -0400967<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400968## SkPaint
969
Cary Clark682c58d2018-05-16 07:07:07 -0400970<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
971<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400972</pre>
973
Cary Clark682c58d2018-05-16 07:07:07 -0400974Makes 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>,
975<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
976between 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 -0400977their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400978
Cary Clark682c58d2018-05-16 07:07:07 -0400979The 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>,
980<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
981This 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 -0400982
983### Parameters
984
Cary Clark682c58d2018-05-16 07:07:07 -0400985<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
986 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400987 </tr>
988</table>
989
990### Return Value
991
Cary Clark682c58d2018-05-16 07:07:07 -0400992shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400993
994### Example
995
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000996<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400997
998#### Example Output
999
1000~~~~
1001SK_ColorRED == paint1.getColor()
1002SK_ColorBLUE == paint2.getColor()
1003~~~~
1004
1005</fiddle-embed></div>
1006
1007---
1008
Cary Clark682c58d2018-05-16 07:07:07 -04001009<a name='SkPaint_move_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001010## SkPaint
1011
Cary Clark682c58d2018-05-16 07:07:07 -04001012<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1013<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -04001014</pre>
1015
Cary Clarkd0530ba2017-09-14 11:25:39 -04001016Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -04001017of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001018
Cary Clark682c58d2018-05-16 07:07:07 -04001019After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001020
1021### Parameters
1022
Cary Clark682c58d2018-05-16 07:07:07 -04001023<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
1024 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001025 </tr>
1026</table>
1027
1028### Return Value
1029
Cary Clark682c58d2018-05-16 07:07:07 -04001030content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001031
1032### Example
1033
1034<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
1035
1036#### Example Output
1037
1038~~~~
1039path effect unique: true
1040~~~~
1041
1042</fiddle-embed></div>
1043
1044---
1045
Cary Clark682c58d2018-05-16 07:07:07 -04001046<a name='SkPaint_reset'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001047## reset
1048
Cary Clark682c58d2018-05-16 07:07:07 -04001049<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1050void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001051</pre>
1052
Cary Clark682c58d2018-05-16 07:07:07 -04001053Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
1054<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001055
1056### Example
1057
1058<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
1059
1060#### Example Output
1061
1062~~~~
1063paint1 == paint2
1064~~~~
1065
1066</fiddle-embed></div>
1067
1068---
1069
Cary Clark682c58d2018-05-16 07:07:07 -04001070<a name='SkPaint_destructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001071## ~SkPaint
1072
Cary Clark682c58d2018-05-16 07:07:07 -04001073<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1074<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001075</pre>
1076
Cary Clark682c58d2018-05-16 07:07:07 -04001077Decreases <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>,
1078<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
1079objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -04001080
1081---
1082
Cary Clark682c58d2018-05-16 07:07:07 -04001083## <a name='Management'>Management</a>
Cary Clark12799e12017-07-28 15:18:29 -04001084
Cary Clark682c58d2018-05-16 07:07:07 -04001085<a name='SkPaint_copy_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001086## operator=
1087
Cary Clark682c58d2018-05-16 07:07:07 -04001088<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1089<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001090</pre>
1091
Cary Clark682c58d2018-05-16 07:07:07 -04001092Makes 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>,
1093<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
1094between 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 -04001095prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -04001096resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
1097are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -04001098
1099### Parameters
1100
Cary Clark682c58d2018-05-16 07:07:07 -04001101<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
1102 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -04001103 </tr>
1104</table>
1105
1106### Return Value
1107
Cary Clark682c58d2018-05-16 07:07:07 -04001108content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001109
1110### Example
1111
1112<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
1113
1114#### Example Output
1115
1116~~~~
1117SK_ColorRED == paint1.getColor()
1118SK_ColorRED == paint2.getColor()
1119~~~~
1120
1121</fiddle-embed></div>
1122
1123---
1124
Cary Clark682c58d2018-05-16 07:07:07 -04001125<a name='SkPaint_move_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001126## operator=
1127
Cary Clark682c58d2018-05-16 07:07:07 -04001128<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1129<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001130</pre>
1131
Cary Clark682c58d2018-05-16 07:07:07 -04001132Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
1133of 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 -04001134prior destination are decreased by one; those objects are deleted if the resulting count
1135is zero.
Cary Clark12799e12017-07-28 15:18:29 -04001136
Cary Clark682c58d2018-05-16 07:07:07 -04001137After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001138
1139### Parameters
1140
Cary Clark682c58d2018-05-16 07:07:07 -04001141<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
1142 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001143 </tr>
1144</table>
1145
1146### Return Value
1147
Cary Clark682c58d2018-05-16 07:07:07 -04001148content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001149
1150### Example
1151
1152<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
1153
1154#### Example Output
1155
1156~~~~
1157SK_ColorRED == paint2.getColor()
1158~~~~
1159
1160</fiddle-embed></div>
1161
1162---
1163
Cary Clark682c58d2018-05-16 07:07:07 -04001164<a name='SkPaint_equal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001165## operator==
1166
Cary Clark682c58d2018-05-16 07:07:07 -04001167<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1168bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001169</pre>
1170
Cary Clark682c58d2018-05-16 07:07:07 -04001171Compares <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
1172if <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>,
1173<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 -04001174
1175### Parameters
1176
Cary Clark682c58d2018-05-16 07:07:07 -04001177<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
1178 <td><a href='#Paint'>Paint</a> to compare</td>
1179 </tr>
1180 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
1181 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001182 </tr>
1183</table>
1184
1185### Return Value
1186
Cary Clark682c58d2018-05-16 07:07:07 -04001187true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001188
1189### Example
1190
1191<div><fiddle-embed name="7481a948e34672720337a631830586dd">
1192
1193#### Example Output
1194
1195~~~~
1196paint1 == paint2
1197paint1 != paint2
1198~~~~
1199
1200</fiddle-embed></div>
1201
Cary Clark06c20f32018-03-20 15:53:27 -04001202### See Also
1203
Cary Clark682c58d2018-05-16 07:07:07 -04001204<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001205
Cary Clark12799e12017-07-28 15:18:29 -04001206---
1207
Cary Clark682c58d2018-05-16 07:07:07 -04001208<a name='SkPaint_notequal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001209## operator!=
1210
Cary Clark682c58d2018-05-16 07:07:07 -04001211<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1212bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001213</pre>
1214
Cary Clark682c58d2018-05-16 07:07:07 -04001215Compares <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
1216if <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>,
1217<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 -04001218
1219### Parameters
1220
Cary Clark682c58d2018-05-16 07:07:07 -04001221<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
1222 <td><a href='#Paint'>Paint</a> to compare</td>
1223 </tr>
1224 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
1225 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001226 </tr>
1227</table>
1228
1229### Return Value
1230
Cary Clark682c58d2018-05-16 07:07:07 -04001231true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001232
1233### Example
1234
skia-bookmakera717ca92018-07-08 05:32:09 +00001235<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -04001236
1237#### Example Output
1238
1239~~~~
1240paint1 == paint2
1241paint1 == paint2
1242~~~~
1243
1244</fiddle-embed></div>
1245
Cary Clark06c20f32018-03-20 15:53:27 -04001246### See Also
1247
Cary Clark682c58d2018-05-16 07:07:07 -04001248<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001249
Cary Clark12799e12017-07-28 15:18:29 -04001250---
1251
Cary Clark682c58d2018-05-16 07:07:07 -04001252<a name='SkPaint_getHash'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001253## getHash
1254
Cary Clark682c58d2018-05-16 07:07:07 -04001255<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1256uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001257</pre>
1258
Cary Clark682c58d2018-05-16 07:07:07 -04001259Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001260Identical hashes guarantee that the paints are
1261equivalent, but differing hashes do not guarantee that the paints have differing
1262contents.
1263
Cary Clark682c58d2018-05-16 07:07:07 -04001264If <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 -04001265their hashes are also equal.
1266
1267The hash returned is platform and implementation specific.
1268
1269### Return Value
1270
1271a shallow hash
1272
1273### Example
1274
1275<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
1276
1277#### Example Output
1278
1279~~~~
1280paint1 == paint2
1281paint1.getHash() == paint2.getHash()
1282~~~~
1283
1284</fiddle-embed></div>
1285
1286---
1287
Cary Clark682c58d2018-05-16 07:07:07 -04001288## <a name='Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001289
Cary Clark682c58d2018-05-16 07:07:07 -04001290## <a name='SkPaint_Hinting'>Enum SkPaint::Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001291
Cary Clarka560c472017-11-27 10:44:06 -05001292<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001293 enum <a href='#SkPaint_Hinting'>Hinting</a> {
1294 <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> = 0,
1295 <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> = 1,
1296 <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> = 2,
1297 <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -04001298 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001299</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001300
Cary Clark682c58d2018-05-16 07:07:07 -04001301<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
1302look 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 -04001303muted effect or no effect at all depending on the platform.
1304
Cary Clark7cfcbca2018-01-04 16:11:51 -05001305The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -04001306as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001307
1308### Constants
1309
Cary Clark682c58d2018-05-16 07:07:07 -04001310<table style='border-collapse: collapse; width: 62.5em'>
1311 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1312<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1313<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1314 <tr style='background-color: #f0f0f0; '>
1315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
1316 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1317 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1318Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001319With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
1320bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -04001321outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -05001322to 26.6 fractional pixels.
1323</td>
Cary Clark12799e12017-07-28 15:18:29 -04001324 </tr>
1325 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001326 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
1327 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1328 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1329Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001330With FreeType, this is equivalent in spirit to the
1331FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -04001332lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -04001333Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05001334</td>
Cary Clark12799e12017-07-28 15:18:29 -04001335 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001336 <tr style='background-color: #f0f0f0; '>
1337 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
1338 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1339 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1340Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001341With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
1342choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -05001343gray-level rendering.
1344</td>
Cary Clark12799e12017-07-28 15:18:29 -04001345 </tr>
1346 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
1348 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1349 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04001350Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -04001351FT_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 -05001352FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
1353horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -05001354variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
1355</td>
Cary Clark12799e12017-07-28 15:18:29 -04001356 </tr>
1357</table>
1358
Cary Clark682c58d2018-05-16 07:07:07 -04001359On <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 -04001360to 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 -04001361Normal 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 -04001362the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -04001363
Cary Clark682c58d2018-05-16 07:07:07 -04001364On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -04001365
Cary Clark682c58d2018-05-16 07:07:07 -04001366<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1367Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04001368
Cary Clark682c58d2018-05-16 07:07:07 -04001369<a name='SkPaint_getHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001370## getHinting
1371
Cary Clark682c58d2018-05-16 07:07:07 -04001372<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1373<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001374</pre>
1375
1376Returns level of glyph outline adjustment.
1377
1378### Return Value
1379
Cary Clark682c58d2018-05-16 07:07:07 -04001380one 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 -04001381
1382### Example
1383
1384<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
1385
1386#### Example Output
1387
1388~~~~
1389SkPaint::kNormal_Hinting == paint.getHinting()
1390~~~~
1391
1392</fiddle-embed></div>
1393
1394---
1395
Cary Clark682c58d2018-05-16 07:07:07 -04001396<a name='SkPaint_setHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001397## setHinting
1398
Cary Clark682c58d2018-05-16 07:07:07 -04001399<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1400void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -04001401</pre>
1402
1403Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -04001404Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001405
Cary Clark682c58d2018-05-16 07:07:07 -04001406| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -04001407| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -04001408| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
1409| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
1410| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
1411| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -04001412
1413### Parameters
1414
Cary Clark682c58d2018-05-16 07:07:07 -04001415<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
1416 <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 -04001417 </tr>
1418</table>
1419
1420### Example
1421
1422<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
1423
1424#### Example Output
1425
1426~~~~
1427paint1 == paint2
1428~~~~
1429
1430</fiddle-embed></div>
1431
1432---
1433
Cary Clark682c58d2018-05-16 07:07:07 -04001434## <a name='Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001435
Cary Clark682c58d2018-05-16 07:07:07 -04001436## <a name='SkPaint_Flags'>Enum SkPaint::Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001437
Cary Clarka560c472017-11-27 10:44:06 -05001438<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001439 enum <a href='#SkPaint_Flags'>Flags</a> {
1440 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> = 0x01,
1441 <a href='#SkPaint_kDither_Flag'>kDither Flag</a> = 0x04,
1442 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> = 0x20,
1443 <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> = 0x40,
1444 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> = 0x80,
1445 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> = 0x200,
1446 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> = 0x400,
1447 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> = 0x800,
1448 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -04001449
Cary Clark682c58d2018-05-16 07:07:07 -04001450 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -04001451 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001452
Cary Clark12799e12017-07-28 15:18:29 -04001453</pre>
1454
Cary Clark682c58d2018-05-16 07:07:07 -04001455The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
1456The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
1457with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
1458All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -04001459multiple settings at once.
1460
1461### Constants
1462
Cary Clark682c58d2018-05-16 07:07:07 -04001463<table style='border-collapse: collapse; width: 62.5em'>
1464 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1465<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1466<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1467 <tr style='background-color: #f0f0f0; '>
1468 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
1469 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
1470 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -04001471mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -04001472 </tr>
1473 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001474 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
1475 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
1476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1477mask for setting Dither</td>
1478 </tr>
1479 <tr style='background-color: #f0f0f0; '>
1480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
1481 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
1482 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1483mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -04001484 </tr>
1485 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001486 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
1487 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
1488 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1489mask for setting Linear_Text</td>
1490 </tr>
1491 <tr style='background-color: #f0f0f0; '>
1492 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
1493 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
1494 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1495mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001496 </tr>
1497 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
1499 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
1500 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1501mask for setting LCD_Text</td>
1502 </tr>
1503 <tr style='background-color: #f0f0f0; '>
1504 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
1505 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
1506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1507mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -04001508 </tr>
1509 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001510 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
1511 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
1512 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1513mask for setting Automatic_Hinting</td>
1514 </tr>
1515 <tr style='background-color: #f0f0f0; '>
1516 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kVerticalText_Flag'><code>SkPaint::kVerticalText_Flag</code></a></td>
1517 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x1000</td>
1518 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1519mask for setting Vertical_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001520 </tr>
1521 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001522 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
1523 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
1524 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1525mask 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 -04001526 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001527<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
1528</table>
Cary Clark12799e12017-07-28 15:18:29 -04001529
Cary Clark682c58d2018-05-16 07:07:07 -04001530## <a name='SkPaint_ReserveFlags'>Enum SkPaint::ReserveFlags</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001531
Cary Clark682c58d2018-05-16 07:07:07 -04001532Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04001533
Cary Clark4855f782018-02-06 09:41:53 -05001534soonOnly valid for Android framework.
1535
Cary Clarka560c472017-11-27 10:44:06 -05001536<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001537 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
1538 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText ReserveFlag</a> = 0x08,
1539 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -04001540 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001541</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001542
1543### Constants
1544
Cary Clark682c58d2018-05-16 07:07:07 -04001545<table style='border-collapse: collapse; width: 62.5em'>
1546 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1547<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1548<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1549 <tr style='background-color: #f0f0f0; '>
1550 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
1551 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
1552 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1553Deprecated.
1554
1555soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001556 </tr>
1557 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
1559 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
1560 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1561Deprecated.
1562
1563soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001564 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001565</table>
Cary Clark4855f782018-02-06 09:41:53 -05001566
Cary Clark682c58d2018-05-16 07:07:07 -04001567<a name='SkPaint_getFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001568## getFlags
1569
Cary Clark682c58d2018-05-16 07:07:07 -04001570<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1571uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001572</pre>
1573
Cary Clark682c58d2018-05-16 07:07:07 -04001574Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
1575bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -04001576
1577### Return Value
1578
Cary Clark682c58d2018-05-16 07:07:07 -04001579zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001580
1581### Example
1582
1583<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
1584
1585#### Example Output
1586
1587~~~~
1588(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
1589~~~~
1590
1591</fiddle-embed></div>
1592
1593---
1594
Cary Clark682c58d2018-05-16 07:07:07 -04001595<a name='SkPaint_setFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001596## setFlags
1597
Cary Clark682c58d2018-05-16 07:07:07 -04001598<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1599void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -04001600</pre>
1601
Cary Clark682c58d2018-05-16 07:07:07 -04001602Replaces <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.
1603All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -04001604
1605### Parameters
1606
Cary Clark682c58d2018-05-16 07:07:07 -04001607<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
1608 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001609 </tr>
1610</table>
1611
1612### Example
1613
1614<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
1615
1616#### Example Output
1617
1618~~~~
1619paint.isAntiAlias()
1620paint.isDither()
1621~~~~
1622
1623</fiddle-embed></div>
1624
1625---
1626
Cary Clarkffb3d682018-05-17 12:17:28 -04001627## <a name='Anti_Alias'>Anti Alias</a>
Cary Clark08895c42018-02-01 09:37:32 -05001628
Cary Clarkffb3d682018-05-17 12:17:28 -04001629<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -04001630If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
1631If <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 -04001632
Cary Clark682c58d2018-05-16 07:07:07 -04001633The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -04001634passing through the pixel center may, but is not required to, draw the pixel.
1635
Cary Clark682c58d2018-05-16 07:07:07 -04001636<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
1637active <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 -04001638
Cary Clarkffb3d682018-05-17 12:17:28 -04001639A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
1640<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 -04001641<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001642
Cary Clarkffb3d682018-05-17 12:17:28 -04001643The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -04001644
Cary Clarkffb3d682018-05-17 12:17:28 -04001645<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
1646<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 -04001647at compile time.
1648
1649### Example
1650
1651<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
1652A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -04001653The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
1654<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001655</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001656
Cary Clark682c58d2018-05-16 07:07:07 -04001657<a name='SkPaint_isAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001658## isAntiAlias
1659
Cary Clark682c58d2018-05-16 07:07:07 -04001660<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1661bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001662</pre>
1663
Cary Clark80247e52018-07-11 16:18:41 -04001664Returns true if pixels on the active edges of <a href='SkPath_Reference#Path'>Path</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -04001665
Cary Clark682c58d2018-05-16 07:07:07 -04001666Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001667
1668### Return Value
1669
Cary Clark682c58d2018-05-16 07:07:07 -04001670<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001671
1672### Example
1673
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001674<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -04001675
1676#### Example Output
1677
1678~~~~
1679paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1680paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1681~~~~
1682
1683</fiddle-embed></div>
1684
1685---
1686
Cary Clark682c58d2018-05-16 07:07:07 -04001687<a name='SkPaint_setAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001688## setAntiAlias
1689
Cary Clark682c58d2018-05-16 07:07:07 -04001690<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1691void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001692</pre>
1693
Cary Clark682c58d2018-05-16 07:07:07 -04001694Requests, 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 -04001695partial transparency.
1696
Cary Clark682c58d2018-05-16 07:07:07 -04001697Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1698Clears <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 -04001699
1700### Parameters
1701
Cary Clark682c58d2018-05-16 07:07:07 -04001702<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1703 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001704 </tr>
1705</table>
1706
1707### Example
1708
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001709<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -04001710
1711#### Example Output
1712
1713~~~~
1714paint1 == paint2
1715~~~~
1716
1717</fiddle-embed></div>
1718
1719---
1720
Cary Clark682c58d2018-05-16 07:07:07 -04001721## <a name='Dither'>Dither</a>
Cary Clark08895c42018-02-01 09:37:32 -05001722
Cary Clark682c58d2018-05-16 07:07:07 -04001723<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001724This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001725Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1726and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1727and 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 -04001728
1729Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001730<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>.
1731<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
1732<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 -04001733
Cary Clark682c58d2018-05-16 07:07:07 -04001734<a href='#Dither'>Dither</a> is disabled by default.
1735<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 -04001736at compile time.
1737
Cary Clark682c58d2018-05-16 07:07:07 -04001738Some 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 -04001739
1740### Example
1741
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001742<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 -05001743alternating nearby colors from pixel to pixel.
1744</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001745
1746### Example
1747
Cary Clarka619d452018-07-16 08:12:01 -04001748<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark224c7002018-06-27 11:00:21 -04001749Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001750dither, making it easier to see.
1751</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001752
Cary Clark682c58d2018-05-16 07:07:07 -04001753<a name='SkPaint_isDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001754## isDither
1755
Cary Clark682c58d2018-05-16 07:07:07 -04001756<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1757bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001758</pre>
1759
Cary Clark80247e52018-07-11 16:18:41 -04001760Returns true if color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001761
Cary Clark682c58d2018-05-16 07:07:07 -04001762Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001763
1764### Return Value
1765
Cary Clark682c58d2018-05-16 07:07:07 -04001766<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001767
1768### Example
1769
1770<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1771
1772#### Example Output
1773
1774~~~~
1775paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1776paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1777~~~~
1778
1779</fiddle-embed></div>
1780
1781---
1782
Cary Clark682c58d2018-05-16 07:07:07 -04001783<a name='SkPaint_setDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001784## setDither
1785
Cary Clark682c58d2018-05-16 07:07:07 -04001786<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1787void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001788</pre>
1789
1790Requests, but does not require, to distribute color error.
1791
Cary Clark682c58d2018-05-16 07:07:07 -04001792Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1793Clears <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 -04001794
1795### Parameters
1796
Cary Clark682c58d2018-05-16 07:07:07 -04001797<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1798 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001799 </tr>
1800</table>
1801
1802### Example
1803
1804<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1805
1806#### Example Output
1807
1808~~~~
1809paint1 == paint2
1810~~~~
1811
1812</fiddle-embed></div>
1813
1814### See Also
1815
Cary Clark682c58d2018-05-16 07:07:07 -04001816<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001817
1818---
1819
1820### See Also
1821
Cary Clarkffb3d682018-05-17 12:17:28 -04001822Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001823
Cary Clark682c58d2018-05-16 07:07:07 -04001824## <a name='Device_Text'>Device Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05001825
Cary Clark682c58d2018-05-16 07:07:07 -04001826<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 -04001827
Cary Clarkffb3d682018-05-17 12:17:28 -04001828When 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 -04001829create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001830on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001831<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 -04001832the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001833
Cary Clark682c58d2018-05-16 07:07:07 -04001834<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 -04001835As the opaqueness
1836of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1837
1838Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001839<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1840<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
1841<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 -04001842
1843### Example
1844
Cary Clark682c58d2018-05-16 07:07:07 -04001845<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>.
1846When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1847When <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 -05001848</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001849
Cary Clark682c58d2018-05-16 07:07:07 -04001850## <a name='Linear_Text'>Linear Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001851
Cary Clark682c58d2018-05-16 07:07:07 -04001852<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>.
1853If <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>.
1854If <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 -04001855
Cary Clark682c58d2018-05-16 07:07:07 -04001856<a name='SkPaint_isLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001857## isLinearText
1858
Cary Clark682c58d2018-05-16 07:07:07 -04001859<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1860bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001861</pre>
1862
Cary Clark80247e52018-07-11 16:18:41 -04001863Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001864
Cary Clark682c58d2018-05-16 07:07:07 -04001865Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001866
1867### Return Value
1868
Cary Clark682c58d2018-05-16 07:07:07 -04001869<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001870
1871### Example
1872
1873<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1874
1875### See Also
1876
Cary Clark682c58d2018-05-16 07:07:07 -04001877<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001878
1879---
1880
Cary Clark682c58d2018-05-16 07:07:07 -04001881<a name='SkPaint_setLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001882## setLinearText
1883
Cary Clark682c58d2018-05-16 07:07:07 -04001884<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1885void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001886</pre>
1887
Cary Clark80247e52018-07-11 16:18:41 -04001888Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark682c58d2018-05-16 07:07:07 -04001889By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001890
Cary Clark682c58d2018-05-16 07:07:07 -04001891Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1892Clears <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 -04001893
1894### Parameters
1895
Cary Clark682c58d2018-05-16 07:07:07 -04001896<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1897 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001898 </tr>
1899</table>
1900
1901### Example
1902
1903<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1904
1905### See Also
1906
Cary Clark682c58d2018-05-16 07:07:07 -04001907<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001908
1909---
1910
Cary Clark682c58d2018-05-16 07:07:07 -04001911## <a name='Subpixel_Text'>Subpixel Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001912
Cary Clark682c58d2018-05-16 07:07:07 -04001913<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 -04001914As the opaqueness
1915of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1916
Cary Clark682c58d2018-05-16 07:07:07 -04001917<a name='SkPaint_isSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001918## isSubpixelText
1919
Cary Clark682c58d2018-05-16 07:07:07 -04001920<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1921bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001922</pre>
1923
Cary Clark80247e52018-07-11 16:18:41 -04001924Returns true if <a href='undocumented#Glyph'>Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001925
Cary Clark682c58d2018-05-16 07:07:07 -04001926Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001927
1928### Return Value
1929
Cary Clark682c58d2018-05-16 07:07:07 -04001930<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001931
1932### Example
1933
1934<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1935
1936#### Example Output
1937
1938~~~~
1939paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1940paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1941~~~~
1942
1943</fiddle-embed></div>
1944
1945---
1946
Cary Clark682c58d2018-05-16 07:07:07 -04001947<a name='SkPaint_setSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001948## setSubpixelText
1949
Cary Clark682c58d2018-05-16 07:07:07 -04001950<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1951void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001952</pre>
1953
Cary Clark682c58d2018-05-16 07:07:07 -04001954Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001955
Cary Clark682c58d2018-05-16 07:07:07 -04001956Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1957Clears <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 -04001958
1959### Parameters
1960
Cary Clark682c58d2018-05-16 07:07:07 -04001961<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1962 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001963 </tr>
1964</table>
1965
1966### Example
1967
1968<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1969
1970#### Example Output
1971
1972~~~~
1973paint1 == paint2
1974~~~~
1975
1976</fiddle-embed></div>
1977
1978---
1979
Cary Clark682c58d2018-05-16 07:07:07 -04001980## <a name='LCD_Text'>LCD Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001981
Cary Clarkffb3d682018-05-17 12:17:28 -04001982When 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 -04001983create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001984on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001985<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 -04001986the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001987
Cary Clark682c58d2018-05-16 07:07:07 -04001988<a name='SkPaint_isLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001989## isLCDRenderText
1990
Cary Clark682c58d2018-05-16 07:07:07 -04001991<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1992bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001993</pre>
1994
Cary Clark80247e52018-07-11 16:18:41 -04001995Returns true if <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001996
Cary Clark682c58d2018-05-16 07:07:07 -04001997Returns 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 -04001998
1999### Return Value
2000
Cary Clark682c58d2018-05-16 07:07:07 -04002001<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002002
2003### Example
2004
skia-bookmakera391c722018-07-09 05:28:19 +00002005<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04002006
2007#### Example Output
2008
2009~~~~
2010paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2011paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2012~~~~
2013
2014</fiddle-embed></div>
2015
2016---
2017
Cary Clark682c58d2018-05-16 07:07:07 -04002018<a name='SkPaint_setLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002019## setLCDRenderText
2020
Cary Clark682c58d2018-05-16 07:07:07 -04002021<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2022void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04002023</pre>
2024
Cary Clark682c58d2018-05-16 07:07:07 -04002025Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002026
Cary Clark682c58d2018-05-16 07:07:07 -04002027Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
2028Clears <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 -04002029
2030### Parameters
2031
Cary Clark682c58d2018-05-16 07:07:07 -04002032<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
2033 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002034 </tr>
2035</table>
2036
2037### Example
2038
skia-bookmakere0a458f2018-07-16 05:29:00 +00002039<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04002040
2041#### Example Output
2042
2043~~~~
2044paint1 == paint2
2045~~~~
2046
2047</fiddle-embed></div>
2048
2049---
2050
Cary Clark682c58d2018-05-16 07:07:07 -04002051## <a name='Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a>
Cary Clark08895c42018-02-01 09:37:32 -05002052
Cary Clark682c58d2018-05-16 07:07:07 -04002053<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
2054<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 -05002055in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04002056
Cary Clark682c58d2018-05-16 07:07:07 -04002057FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
2058the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002059Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04002060<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04002061
Cary Clark682c58d2018-05-16 07:07:07 -04002062<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
2063<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
2064<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002065
2066### Example
2067
Cary Clarka560c472017-11-27 10:44:06 -05002068<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05002069<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05002070 includes an embedded bitmap Glyph at odd font sizes. This example works
2071 on platforms that use FreeType as their Font_Engine.
2072 Windows may, but is not required to, return a bitmap glyph if
2073 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
2074 bitmap.allocN32Pixels(30, 15);
2075 bitmap.eraseColor(0);
2076 SkCanvas offscreen(bitmap);
2077 SkPaint paint;
2078 paint.setAntiAlias(true);
2079 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05002080 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05002081 for (bool embedded : { false, true}) {
2082 paint.setEmbeddedBitmapText(embedded);
2083 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
2084 }
2085 canvas->drawBitmap(bitmap, 0, 0);
2086 canvas->scale(10, 10);
2087 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05002088
Cary Clarka560c472017-11-27 10:44:06 -05002089</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002090
Cary Clark682c58d2018-05-16 07:07:07 -04002091<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002092## isEmbeddedBitmapText
2093
Cary Clark682c58d2018-05-16 07:07:07 -04002094<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2095bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002096</pre>
2097
Cary Clark80247e52018-07-11 16:18:41 -04002098Returns true if <a href='undocumented#Engine'>Font Engine</a> may return <a href='undocumented#Glyph'>Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04002099
Cary Clark682c58d2018-05-16 07:07:07 -04002100Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002101
2102### Return Value
2103
Cary Clark682c58d2018-05-16 07:07:07 -04002104<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002105
2106### Example
2107
2108<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
2109
2110#### Example Output
2111
2112~~~~
2113paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2114paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2115~~~~
2116
2117</fiddle-embed></div>
2118
2119---
2120
Cary Clark682c58d2018-05-16 07:07:07 -04002121<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002122## setEmbeddedBitmapText
2123
Cary Clark682c58d2018-05-16 07:07:07 -04002124<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2125void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04002126</pre>
2127
2128Requests, but does not require, to use bitmaps in fonts instead of outlines.
2129
Cary Clark682c58d2018-05-16 07:07:07 -04002130Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
2131Clears <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 -04002132
2133### Parameters
2134
Cary Clark682c58d2018-05-16 07:07:07 -04002135<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
2136 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002137 </tr>
2138</table>
2139
2140### Example
2141
2142<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
2143
2144#### Example Output
2145
2146~~~~
2147paint1 == paint2
2148~~~~
2149
2150</fiddle-embed></div>
2151
2152---
2153
Cary Clark682c58d2018-05-16 07:07:07 -04002154## <a name='Automatic_Hinting'>Automatic Hinting</a>
Cary Clark08895c42018-02-01 09:37:32 -05002155
Cary Clark682c58d2018-05-16 07:07:07 -04002156If <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>
2157instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2158<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
2159<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002160
Cary Clark682c58d2018-05-16 07:07:07 -04002161<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 -04002162
Cary Clark682c58d2018-05-16 07:07:07 -04002163<a name='SkPaint_isAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002164## isAutohinted
2165
Cary Clark682c58d2018-05-16 07:07:07 -04002166<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2167bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002168</pre>
2169
Cary Clark80247e52018-07-11 16:18:41 -04002170Returns true if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, and if
2171platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>. If true, instructs
2172the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002173
Cary Clark682c58d2018-05-16 07:07:07 -04002174Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002175
2176### Return Value
2177
Cary Clark682c58d2018-05-16 07:07:07 -04002178<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002179
2180### Example
2181
2182<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
2183
2184#### Example Output
2185
2186~~~~
2187paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2188paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2189~~~~
2190
2191</fiddle-embed></div>
2192
2193### See Also
2194
Cary Clark682c58d2018-05-16 07:07:07 -04002195<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002196
2197---
2198
Cary Clark682c58d2018-05-16 07:07:07 -04002199<a name='SkPaint_setAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002200## setAutohinted
2201
Cary Clark682c58d2018-05-16 07:07:07 -04002202<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2203void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04002204</pre>
2205
Cary Clark80247e52018-07-11 16:18:41 -04002206Sets whether to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002207If <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> and <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is set,
Cary Clark80247e52018-07-11 16:18:41 -04002208instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002209<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
2210<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002211
Cary Clark682c58d2018-05-16 07:07:07 -04002212Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002213
Cary Clark682c58d2018-05-16 07:07:07 -04002214Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
2215Clears <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 -04002216
2217### Parameters
2218
Cary Clark682c58d2018-05-16 07:07:07 -04002219<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
2220 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002221 </tr>
2222</table>
2223
2224### Example
2225
2226<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
2227
2228### See Also
2229
Cary Clark682c58d2018-05-16 07:07:07 -04002230<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002231
2232---
2233
Cary Clark682c58d2018-05-16 07:07:07 -04002234## <a name='Vertical_Text'>Vertical Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05002235
Cary Clark682c58d2018-05-16 07:07:07 -04002236<a href='undocumented#Text'>Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
2237using <a href='undocumented#Advance'>Font Advance</a> to position subsequent <a href='undocumented#Glyph'>Glyphs</a>. By default, each successive glyph
2238is positioned to the right of the preceding glyph. <a href='#Vertical_Text'>Vertical Text</a> sets successive
2239<a href='undocumented#Glyph'>Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04002240
Cary Clark682c58d2018-05-16 07:07:07 -04002241Skia 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 -05002242font substitution,
Cary Clark137b8742018-05-30 09:21:49 -04002243textual substitution, line layout, or contextual spacing like <a href='undocumented#Kerning'>Kerning</a> pairs. Use
Cary Clark682c58d2018-05-16 07:07:07 -04002244a text shaping engine like <a href='https://harfbuzz.org/'>HarfBuzz</a></a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04002245into glyph series.
2246
Cary Clark682c58d2018-05-16 07:07:07 -04002247<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 -04002248
Cary Clark682c58d2018-05-16 07:07:07 -04002249<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if clear draws text left to right.
2250<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 -04002251
Cary Clark682c58d2018-05-16 07:07:07 -04002252<a href='#Vertical_Text'>Vertical Text</a> is clear by default.
2253<a href='#Vertical_Text'>Vertical Text</a> can be set by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
2254<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002255
2256### Example
2257
2258<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
2259
Cary Clark682c58d2018-05-16 07:07:07 -04002260<a name='SkPaint_isVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002261## isVerticalText
2262
Cary Clark682c58d2018-05-16 07:07:07 -04002263<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2264bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002265</pre>
2266
Cary Clark80247e52018-07-11 16:18:41 -04002267Returns true if <a href='undocumented#Glyph'>Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04002268
Cary Clark682c58d2018-05-16 07:07:07 -04002269Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002270
2271### Return Value
2272
Cary Clark682c58d2018-05-16 07:07:07 -04002273<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002274
2275### Example
2276
2277<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
2278
2279#### Example Output
2280
2281~~~~
2282paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2283paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2284~~~~
2285
2286</fiddle-embed></div>
2287
2288---
2289
Cary Clark682c58d2018-05-16 07:07:07 -04002290<a name='SkPaint_setVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002291## setVerticalText
2292
Cary Clark682c58d2018-05-16 07:07:07 -04002293<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2294void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText)
Cary Clark12799e12017-07-28 15:18:29 -04002295</pre>
2296
Cary Clark80247e52018-07-11 16:18:41 -04002297Returns true if text advance positions the next glyph below the previous glyph instead of to the
Cary Clark12799e12017-07-28 15:18:29 -04002298right of previous glyph.
2299
Cary Clark682c58d2018-05-16 07:07:07 -04002300Sets <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is true.
2301Clears <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04002302
2303### Parameters
2304
Cary Clark682c58d2018-05-16 07:07:07 -04002305<table> <tr> <td><a name='SkPaint_setVerticalText_verticalText'><code><strong>verticalText</strong></code></a></td>
2306 <td>setting for <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002307 </tr>
2308</table>
2309
2310### Example
2311
2312<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
2313
2314#### Example Output
2315
2316~~~~
2317paint1 == paint2
2318~~~~
2319
2320</fiddle-embed></div>
2321
2322---
2323
Cary Clark682c58d2018-05-16 07:07:07 -04002324## <a name='Fake_Bold'>Fake Bold</a>
Cary Clark08895c42018-02-01 09:37:32 -05002325
Cary Clark682c58d2018-05-16 07:07:07 -04002326<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 -05002327is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04002328bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002329
Cary Clark682c58d2018-05-16 07:07:07 -04002330Use <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 -04002331is not available.
2332
Cary Clark7cfcbca2018-01-04 16:11:51 -05002333A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04002334the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
2335by 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 -04002336
Cary Clark682c58d2018-05-16 07:07:07 -04002337<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04002338
2339### Example
2340
2341<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
2342
Cary Clark682c58d2018-05-16 07:07:07 -04002343<a name='SkPaint_isFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002344## isFakeBoldText
2345
Cary Clark682c58d2018-05-16 07:07:07 -04002346<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2347bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002348</pre>
2349
Cary Clark80247e52018-07-11 16:18:41 -04002350Returns true if approximate bold by increasing the stroke width when creating glyph bitmaps
Cary Clark12799e12017-07-28 15:18:29 -04002351from outlines.
2352
Cary Clark682c58d2018-05-16 07:07:07 -04002353Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002354
2355### Return Value
2356
Cary Clark682c58d2018-05-16 07:07:07 -04002357<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002358
2359### Example
2360
2361<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
2362
2363#### Example Output
2364
2365~~~~
2366paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2367paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2368~~~~
2369
2370</fiddle-embed></div>
2371
2372---
2373
Cary Clark682c58d2018-05-16 07:07:07 -04002374<a name='SkPaint_setFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002375## setFakeBoldText
2376
Cary Clark682c58d2018-05-16 07:07:07 -04002377<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2378void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04002379</pre>
2380
Cary Clark80247e52018-07-11 16:18:41 -04002381Increases stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04002382
Cary Clark682c58d2018-05-16 07:07:07 -04002383Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
2384Clears <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 -04002385
2386### Parameters
2387
Cary Clark682c58d2018-05-16 07:07:07 -04002388<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
2389 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002390 </tr>
2391</table>
2392
2393### Example
2394
2395<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
2396
2397#### Example Output
2398
2399~~~~
2400paint1 == paint2
2401~~~~
2402
2403</fiddle-embed></div>
2404
2405---
2406
Cary Clark682c58d2018-05-16 07:07:07 -04002407## <a name='Full_Hinting_Spacing'>Full Hinting Spacing</a>
Cary Clark08895c42018-02-01 09:37:32 -05002408
Cary Clark682c58d2018-05-16 07:07:07 -04002409if <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 -04002410spacing 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 -04002411<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
2412FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002413
Cary Clark137b8742018-05-30 09:21:49 -04002414<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
2415a 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 -04002416
Cary Clark682c58d2018-05-16 07:07:07 -04002417<a name='SkPaint_isDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002418## isDevKernText
2419
Cary Clark682c58d2018-05-16 07:07:07 -04002420<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2421bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002422</pre>
2423
Cary Clark682c58d2018-05-16 07:07:07 -04002424Deprecated.
2425
Cary Clark12799e12017-07-28 15:18:29 -04002426---
2427
Cary Clark682c58d2018-05-16 07:07:07 -04002428<a name='SkPaint_setDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002429## setDevKernText
2430
Cary Clark682c58d2018-05-16 07:07:07 -04002431<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2432void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04002433</pre>
2434
Cary Clark682c58d2018-05-16 07:07:07 -04002435Deprecated.
2436
Cary Clark12799e12017-07-28 15:18:29 -04002437---
2438
Cary Clark682c58d2018-05-16 07:07:07 -04002439## <a name='Filter_Quality_Methods'>Filter Quality Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05002440
Cary Clark682c58d2018-05-16 07:07:07 -04002441<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
2442A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
2443A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
2444If 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 -04002445in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04002446
Cary Clark682c58d2018-05-16 07:07:07 -04002447<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 -04002448
2449<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002450 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
2451 </tr> <tr>
2452 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
2453 </tr> <tr>
2454 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
2455 </tr> <tr>
2456 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
2457 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002458</table>
2459
Cary Clark682c58d2018-05-16 07:07:07 -04002460and 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 -04002461
Cary Clark682c58d2018-05-16 07:07:07 -04002462<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 -04002463
2464### Example
2465
skia-bookmaker525f9a92018-05-03 06:27:39 +00002466<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002467
Cary Clark682c58d2018-05-16 07:07:07 -04002468<a name='SkPaint_getFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002469## getFilterQuality
2470
Cary Clark682c58d2018-05-16 07:07:07 -04002471<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2472<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002473</pre>
2474
Cary Clark682c58d2018-05-16 07:07:07 -04002475Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002476draws faster; a higher setting looks better when the image is scaled.
2477
2478### Return Value
2479
Cary Clark682c58d2018-05-16 07:07:07 -04002480one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2481<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04002482
2483### Example
2484
2485<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
2486
2487#### Example Output
2488
2489~~~~
2490kNone_SkFilterQuality == paint.getFilterQuality()
2491~~~~
2492
2493</fiddle-embed></div>
2494
2495---
2496
Cary Clark682c58d2018-05-16 07:07:07 -04002497<a name='SkPaint_setFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002498## setFilterQuality
2499
Cary Clark682c58d2018-05-16 07:07:07 -04002500<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2501void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04002502</pre>
2503
Cary Clark682c58d2018-05-16 07:07:07 -04002504Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002505draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04002506Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04002507
2508### Parameters
2509
Cary Clark682c58d2018-05-16 07:07:07 -04002510<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
2511 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2512<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002513 </tr>
2514</table>
2515
2516### Example
2517
2518<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
2519
2520#### Example Output
2521
2522~~~~
2523kHigh_SkFilterQuality == paint.getFilterQuality()
2524~~~~
2525
2526</fiddle-embed></div>
2527
2528### See Also
2529
Cary Clark682c58d2018-05-16 07:07:07 -04002530<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04002531
2532---
2533
Cary Clark682c58d2018-05-16 07:07:07 -04002534## <a name='Color_Methods'>Color Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002535
Cary Clarkab2621d2018-01-30 10:08:57 -05002536| name | description |
2537| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04002538| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
2539| <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 -04002540
Cary Clarkffb3d682018-05-17 12:17:28 -04002541<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 -05002542values used to draw a filled or stroked shape in a 32-bit value. Each component
2543occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
2544All values in any combination are valid.
2545
Cary Clark682c58d2018-05-16 07:07:07 -04002546<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 -04002547RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05002548
Cary Clarkffb3d682018-05-17 12:17:28 -04002549The 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 -05002550positions on the output device, which may have more or fewer bits, and may have
2551a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04002552
Cary Clarkffb3d682018-05-17 12:17:28 -04002553| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04002554| --- | --- | --- | --- | --- |
2555| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
2556
2557### Example
2558
2559<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
2560
Cary Clark682c58d2018-05-16 07:07:07 -04002561<a name='SkPaint_getColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002562## getColor
2563
Cary Clark682c58d2018-05-16 07:07:07 -04002564<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2565<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002566</pre>
2567
Cary Clarkffb3d682018-05-17 12:17:28 -04002568Retrieves <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 -04002569Use 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 -04002570a color component.
2571
2572### Return Value
2573
Cary Clarkffb3d682018-05-17 12:17:28 -04002574<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04002575
2576### Example
2577
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002578<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04002579
2580#### Example Output
2581
2582~~~~
2583Yellow is 100% red, 100% green, and 0% blue.
2584~~~~
2585
2586</fiddle-embed></div>
2587
2588### See Also
2589
Cary Clark682c58d2018-05-16 07:07:07 -04002590<a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04002591
2592---
2593
Cary Clark682c58d2018-05-16 07:07:07 -04002594<a name='SkPaint_setColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002595## setColor
2596
Cary Clark682c58d2018-05-16 07:07:07 -04002597<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2598void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04002599</pre>
2600
Cary Clarkffb3d682018-05-17 12:17:28 -04002601Sets <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,
2602<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 -04002603
2604### Parameters
2605
Cary Clark682c58d2018-05-16 07:07:07 -04002606<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002607 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04002608 </tr>
2609</table>
2610
2611### Example
2612
skia-bookmaker233c6522018-07-04 05:33:26 +00002613<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04002614
2615#### Example Output
2616
2617~~~~
2618green1 == green2
2619~~~~
2620
2621</fiddle-embed></div>
2622
2623### See Also
2624
Cary Clark682c58d2018-05-16 07:07:07 -04002625<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 -04002626
2627---
2628
Cary Clark682c58d2018-05-16 07:07:07 -04002629## <a name='Alpha_Methods'>Alpha Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002630
Cary Clarkffb3d682018-05-17 12:17:28 -04002631<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 -04002632
Cary Clark682c58d2018-05-16 07:07:07 -04002633<a name='SkPaint_getAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002634## getAlpha
2635
Cary Clark682c58d2018-05-16 07:07:07 -04002636<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2637uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002638</pre>
2639
Cary Clark682c58d2018-05-16 07:07:07 -04002640Retrieves <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 -04002641
2642### Return Value
2643
Cary Clark682c58d2018-05-16 07:07:07 -04002644<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04002645
2646### Example
2647
2648<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
2649
2650#### Example Output
2651
2652~~~~
2653255 == paint.getAlpha()
2654~~~~
2655
2656</fiddle-embed></div>
2657
2658---
2659
Cary Clark682c58d2018-05-16 07:07:07 -04002660<a name='SkPaint_setAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002661## setAlpha
2662
Cary Clark682c58d2018-05-16 07:07:07 -04002663<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2664void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04002665</pre>
2666
Cary Clarkffb3d682018-05-17 12:17:28 -04002667Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04002668unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04002669build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
2670<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 -04002671fully opaque.
2672
2673### Parameters
2674
Cary Clark682c58d2018-05-16 07:07:07 -04002675<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
2676 <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 -04002677 </tr>
2678</table>
2679
2680### Example
2681
2682<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
2683
2684#### Example Output
2685
2686~~~~
26870x44112233 == paint.getColor()
2688~~~~
2689
2690</fiddle-embed></div>
2691
2692---
2693
Cary Clark682c58d2018-05-16 07:07:07 -04002694<a name='SkPaint_setARGB'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002695## setARGB
2696
Cary Clark682c58d2018-05-16 07:07:07 -04002697<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2698void <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 -04002699</pre>
2700
Cary Clark682c58d2018-05-16 07:07:07 -04002701Sets <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 -04002702The 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 -04002703
2704### Parameters
2705
Cary Clark682c58d2018-05-16 07:07:07 -04002706<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2707 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2708 </tr>
2709 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002710 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002711 </tr>
2712 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002713 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002714 </tr>
2715 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002716 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002717 </tr>
2718</table>
2719
2720### Example
2721
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002722<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04002723
2724#### Example Output
2725
2726~~~~
2727transRed1 == transRed2
2728~~~~
2729
2730</fiddle-embed></div>
2731
2732### See Also
2733
Cary Clark682c58d2018-05-16 07:07:07 -04002734<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002735
2736---
2737
Cary Clark682c58d2018-05-16 07:07:07 -04002738## <a name='Style'>Style</a>
Cary Clark08895c42018-02-01 09:37:32 -05002739
Cary Clark682c58d2018-05-16 07:07:07 -04002740<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2741Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002742
Cary Clark682c58d2018-05-16 07:07:07 -04002743Set <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 -04002744The fill covers the area inside the geometry for most shapes.
2745
Cary Clark682c58d2018-05-16 07:07:07 -04002746Set <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 -04002747
Cary Clark682c58d2018-05-16 07:07:07 -04002748## <a name='Style_Fill'>Style Fill</a>
Cary Clark12799e12017-07-28 15:18:29 -04002749
2750### See Also
2751
Cary Clark682c58d2018-05-16 07:07:07 -04002752<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002753
Cary Clark682c58d2018-05-16 07:07:07 -04002754## <a name='Style_Stroke'>Style Stroke</a>
Cary Clark12799e12017-07-28 15:18:29 -04002755
Cary Clarkbc5697d2017-10-04 14:31:33 -04002756The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002757<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>.
2758The 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 -04002759The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002760
Cary Clark682c58d2018-05-16 07:07:07 -04002761As <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
2762may 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 -04002763
Cary Clark682c58d2018-05-16 07:07:07 -04002764## <a name='Style_Hairline'>Style Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002765
Cary Clark682c58d2018-05-16 07:07:07 -04002766<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Style_Hairline'>Hairline</a>.
2767<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 -05002768flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002769
Cary Clark682c58d2018-05-16 07:07:07 -04002770<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
2771two 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
2772pixel. 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 -05002773GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002774while stroking.
2775
Cary Clark682c58d2018-05-16 07:07:07 -04002776## <a name='SkPaint_Style'>Enum SkPaint::Style</a>
Cary Clark12799e12017-07-28 15:18:29 -04002777
Cary Clarka560c472017-11-27 10:44:06 -05002778<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002779 enum <a href='#SkPaint_Style'>Style</a> {
2780 <a href='#SkPaint_kFill_Style'>kFill Style</a>,
2781 <a href='#SkPaint_kStroke_Style'>kStroke Style</a>,
2782 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002783 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002784
Cary Clark682c58d2018-05-16 07:07:07 -04002785 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 -05002786</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002787
Cary Clark682c58d2018-05-16 07:07:07 -04002788Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002789The stroke and fill
2790share all paint attributes; for instance, they are drawn with the same color.
2791
Cary Clark682c58d2018-05-16 07:07:07 -04002792Use <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 -04002793a fill draw.
2794
2795### Constants
2796
Cary Clark682c58d2018-05-16 07:07:07 -04002797<table style='border-collapse: collapse; width: 62.5em'>
2798 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2799<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2800<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2801 <tr style='background-color: #f0f0f0; '>
2802 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2803 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2804 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark224c7002018-06-27 11:00:21 -04002805Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002806<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
2807<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2808The <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 -04002809and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002810<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 -05002811</td>
Cary Clark12799e12017-07-28 15:18:29 -04002812 </tr>
2813 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002814 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2815 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2816 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark224c7002018-06-27 11:00:21 -04002817Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002818<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,
2819and ignore the set <a href='#SkPaint_Style'>Style</a>.
2820The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2821</td>
2822 </tr>
2823 <tr style='background-color: #f0f0f0; '>
2824 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2825 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2826 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark224c7002018-06-27 11:00:21 -04002827Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002828<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>,
2829and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002830</td>
Cary Clark12799e12017-07-28 15:18:29 -04002831 </tr>
2832 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002833 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2834 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2836May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002837</td>
Cary Clark12799e12017-07-28 15:18:29 -04002838 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002839</table>
Cary Clark12799e12017-07-28 15:18:29 -04002840
Cary Clark682c58d2018-05-16 07:07:07 -04002841<a name='SkPaint_getStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002842## getStyle
2843
Cary Clark682c58d2018-05-16 07:07:07 -04002844<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2845<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002846</pre>
2847
Cary Clark80247e52018-07-11 16:18:41 -04002848Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002849
2850### Return Value
2851
Cary Clark682c58d2018-05-16 07:07:07 -04002852one 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 -04002853
2854### Example
2855
2856<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2857
2858#### Example Output
2859
2860~~~~
2861SkPaint::kFill_Style == paint.getStyle()
2862~~~~
2863
2864</fiddle-embed></div>
2865
2866### See Also
2867
Cary Clark682c58d2018-05-16 07:07:07 -04002868<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002869
2870---
2871
Cary Clark682c58d2018-05-16 07:07:07 -04002872<a name='SkPaint_setStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002873## setStyle
2874
Cary Clark682c58d2018-05-16 07:07:07 -04002875<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2876void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002877</pre>
2878
2879Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002880Has 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 -04002881
2882### Parameters
2883
Cary Clark682c58d2018-05-16 07:07:07 -04002884<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2885 <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 -04002886 </tr>
2887</table>
2888
2889### Example
2890
2891<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2892
2893### See Also
2894
Cary Clark682c58d2018-05-16 07:07:07 -04002895<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002896
2897---
2898
2899### See Also
2900
Cary Clark682c58d2018-05-16 07:07:07 -04002901<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 -04002902
Cary Clark682c58d2018-05-16 07:07:07 -04002903## <a name='Stroke_Width'>Stroke Width</a>
Cary Clark08895c42018-02-01 09:37:32 -05002904
Cary Clark682c58d2018-05-16 07:07:07 -04002905<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002906of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002907set 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 -04002908
2909When width is greater than zero, the stroke encompasses as many pixels partially
2910or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002911the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002912
Cary Clark682c58d2018-05-16 07:07:07 -04002913The stroke dimensions are scaled by the canvas matrix, but <a href='#Style_Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002914remains one pixel wide regardless of scaling.
2915
2916The default width for the paint is zero.
2917
2918### Example
2919
skia-bookmaker525f9a92018-05-03 06:27:39 +00002920<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 -05002921line and the platform implementation.
2922</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002923
Cary Clark682c58d2018-05-16 07:07:07 -04002924<a name='SkPaint_getStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002925## getStrokeWidth
2926
Cary Clark682c58d2018-05-16 07:07:07 -04002927<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2928<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002929</pre>
2930
Cary Clark682c58d2018-05-16 07:07:07 -04002931Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002932outline the shape.
2933
2934### Return Value
2935
Cary Clark682c58d2018-05-16 07:07:07 -04002936zero for <a href='#Style_Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002937
2938### Example
2939
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002940<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002941
2942#### Example Output
2943
2944~~~~
29450 == paint.getStrokeWidth()
2946~~~~
2947
2948</fiddle-embed></div>
2949
2950---
2951
Cary Clark682c58d2018-05-16 07:07:07 -04002952<a name='SkPaint_setStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002953## setStrokeWidth
2954
Cary Clark682c58d2018-05-16 07:07:07 -04002955<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2956void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002957</pre>
2958
2959Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002960outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002961Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002962
2963### Parameters
2964
Cary Clark682c58d2018-05-16 07:07:07 -04002965<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
2966 <td>zero thickness for <a href='#Style_Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002967 </tr>
2968</table>
2969
2970### Example
2971
2972<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2973
2974#### Example Output
2975
2976~~~~
29775 == paint.getStrokeWidth()
2978~~~~
2979
2980</fiddle-embed></div>
2981
2982---
2983
Cary Clark682c58d2018-05-16 07:07:07 -04002984## <a name='Miter_Limit'>Miter Limit</a>
Cary Clark08895c42018-02-01 09:37:32 -05002985
Cary Clark682c58d2018-05-16 07:07:07 -04002986<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002987relative to the stroke width.
2988
Cary Clark682c58d2018-05-16 07:07:07 -04002989<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2990is 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>
2991or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002992
Cary Clark682c58d2018-05-16 07:07:07 -04002993If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
2994is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002995
Cary Clark682c58d2018-05-16 07:07:07 -04002996<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002997
Cary Clark682c58d2018-05-16 07:07:07 -04002998miter limit = 1 / sin ( angle / 2 )<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
2999The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003000in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04003001
3002Here are some miter limits and the angles that triggers them.
3003
3004| miter limit | angle in degrees |
3005| --- | --- |
3006| 10 | 11.48 |
3007| 9 | 12.76 |
3008| 8 | 14.36 |
3009| 7 | 16.43 |
3010| 6 | 19.19 |
3011| 5 | 23.07 |
3012| 4 | 28.96 |
3013| 3 | 38.94 |
3014| 2 | 60 |
3015| 1 | 180 |
3016
3017### Example
3018
Cary Clarka619d452018-07-16 08:12:01 -04003019<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark12799e12017-07-28 15:18:29 -04003020When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05003021by a bevel join.
3022</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003023
Cary Clark682c58d2018-05-16 07:07:07 -04003024<a name='SkPaint_getStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003025## getStrokeMiter
3026
Cary Clark682c58d2018-05-16 07:07:07 -04003027<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3028<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003029</pre>
3030
Cary Clark80247e52018-07-11 16:18:41 -04003031Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04003032
3033### Return Value
3034
Cary Clark682c58d2018-05-16 07:07:07 -04003035zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003036
3037### Example
3038
3039<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
3040
3041#### Example Output
3042
3043~~~~
3044default miter limit == 4
3045~~~~
3046
3047</fiddle-embed></div>
3048
3049### See Also
3050
Cary Clark682c58d2018-05-16 07:07:07 -04003051<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 -04003052
3053---
3054
Cary Clark682c58d2018-05-16 07:07:07 -04003055<a name='SkPaint_setStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003056## setStrokeMiter
3057
Cary Clark682c58d2018-05-16 07:07:07 -04003058<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3059void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04003060</pre>
3061
Cary Clark80247e52018-07-11 16:18:41 -04003062Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04003063Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04003064Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04003065
3066### Parameters
3067
Cary Clark682c58d2018-05-16 07:07:07 -04003068<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
3069 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003070 </tr>
3071</table>
3072
3073### Example
3074
skia-bookmakera717ca92018-07-08 05:32:09 +00003075<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04003076
3077#### Example Output
3078
3079~~~~
3080default miter limit == 8
3081~~~~
3082
3083</fiddle-embed></div>
3084
3085### See Also
3086
Cary Clark682c58d2018-05-16 07:07:07 -04003087<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 -04003088
3089---
3090
Cary Clark682c58d2018-05-16 07:07:07 -04003091## <a name='Stroke_Cap'>Stroke Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003092
Cary Clark682c58d2018-05-16 07:07:07 -04003093## <a name='SkPaint_Cap'>Enum SkPaint::Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003094
Cary Clarka560c472017-11-27 10:44:06 -05003095<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003096 enum <a href='#SkPaint_Cap'>Cap</a> {
3097 <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
3098 <a href='#SkPaint_kRound_Cap'>kRound Cap</a>,
3099 <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003100
Cary Clark682c58d2018-05-16 07:07:07 -04003101 <a href='#SkPaint_kLast_Cap'>kLast Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
3102 <a href='#SkPaint_kDefault_Cap'>kDefault Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003103 };
Cary Clark6fc50412017-09-21 12:31:06 -04003104
Cary Clark682c58d2018-05-16 07:07:07 -04003105 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 -05003106</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003107
Cary Clark682c58d2018-05-16 07:07:07 -04003108<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 -04003109
3110### Constants
3111
Cary Clark682c58d2018-05-16 07:07:07 -04003112<table style='border-collapse: collapse; width: 62.5em'>
3113 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3114<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3115<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3116 <tr style='background-color: #f0f0f0; '>
3117 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
3118 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3119 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3120Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05003121</td>
Cary Clark12799e12017-07-28 15:18:29 -04003122 </tr>
3123 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003124 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
3125 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3127Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05003128and end.
3129</td>
Cary Clark12799e12017-07-28 15:18:29 -04003130 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003131 <tr style='background-color: #f0f0f0; '>
3132 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
3133 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3134 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3135Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04003136and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05003137of the stroke.
3138</td>
Cary Clark12799e12017-07-28 15:18:29 -04003139 </tr>
3140 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003141 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
3142 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3143 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3144Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
3145</td>
3146 </tr>
3147 <tr style='background-color: #f0f0f0; '>
3148 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
3149 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3150 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3151<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 -05003152</td>
Cary Clark12799e12017-07-28 15:18:29 -04003153 </tr>
3154 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003155 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
3156 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3158May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003159</td>
Cary Clark12799e12017-07-28 15:18:29 -04003160 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003161</table>
Cary Clark12799e12017-07-28 15:18:29 -04003162
Cary Clark682c58d2018-05-16 07:07:07 -04003163Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3164follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003165
Cary Clark682c58d2018-05-16 07:07:07 -04003166If 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 -04003167visible beginning and end.
3168
Cary Clark682c58d2018-05-16 07:07:07 -04003169<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 -04003170
Cary Clark682c58d2018-05-16 07:07:07 -04003171<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Reference#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
3172<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 -04003173at the contour point.
Cary Clark682c58d2018-05-16 07:07:07 -04003174<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
3175<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04003176
Cary Clark682c58d2018-05-16 07:07:07 -04003177<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 -04003178
Cary Clark12799e12017-07-28 15:18:29 -04003179### Example
3180
Cary Clark2ade9972017-11-02 17:49:34 -04003181<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003182
Cary Clark682c58d2018-05-16 07:07:07 -04003183<a name='SkPaint_getStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003184## getStrokeCap
3185
Cary Clark682c58d2018-05-16 07:07:07 -04003186<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3187<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003188</pre>
3189
Cary Clark80247e52018-07-11 16:18:41 -04003190Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003191
3192### Return Value
3193
Cary Clark682c58d2018-05-16 07:07:07 -04003194one 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 -04003195
3196### Example
3197
3198<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
3199
3200#### Example Output
3201
3202~~~~
3203kButt_Cap == default stroke cap
3204~~~~
3205
3206</fiddle-embed></div>
3207
3208### See Also
3209
Cary Clark682c58d2018-05-16 07:07:07 -04003210<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003211
3212---
3213
Cary Clark682c58d2018-05-16 07:07:07 -04003214<a name='SkPaint_setStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003215## setStrokeCap
3216
Cary Clark682c58d2018-05-16 07:07:07 -04003217<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3218void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04003219</pre>
3220
Cary Clark80247e52018-07-11 16:18:41 -04003221Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003222
3223### Parameters
3224
Cary Clark682c58d2018-05-16 07:07:07 -04003225<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
3226 <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>;
3227has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04003228 </tr>
3229</table>
3230
3231### Example
3232
3233<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
3234
3235#### Example Output
3236
3237~~~~
3238kRound_Cap == paint.getStrokeCap()
3239~~~~
3240
3241</fiddle-embed></div>
3242
3243### See Also
3244
Cary Clark682c58d2018-05-16 07:07:07 -04003245<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003246
3247---
3248
Cary Clark682c58d2018-05-16 07:07:07 -04003249## <a name='Stroke_Join'>Stroke Join</a>
Cary Clark08895c42018-02-01 09:37:32 -05003250
Cary Clark682c58d2018-05-16 07:07:07 -04003251<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 -04003252
Cary Clark682c58d2018-05-16 07:07:07 -04003253Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3254follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003255
3256If the contour direction changes abruptly, because the tangent direction leading
3257to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04003258the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003259
3260### Example
3261
Cary Clark2ade9972017-11-02 17:49:34 -04003262<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003263
Cary Clark682c58d2018-05-16 07:07:07 -04003264## <a name='SkPaint_Join'>Enum SkPaint::Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04003265
Cary Clarka560c472017-11-27 10:44:06 -05003266<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003267 enum <a href='#SkPaint_Join'>Join</a> {
3268 <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
3269 <a href='#SkPaint_kRound_Join'>kRound Join</a>,
3270 <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003271
Cary Clark682c58d2018-05-16 07:07:07 -04003272 <a href='#SkPaint_kLast_Join'>kLast Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
3273 <a href='#SkPaint_kDefault_Join'>kDefault Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003274 };
Cary Clark6fc50412017-09-21 12:31:06 -04003275
Cary Clark682c58d2018-05-16 07:07:07 -04003276 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 -05003277</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003278
Cary Clark682c58d2018-05-16 07:07:07 -04003279<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 -04003280affects the four corners of a stroked rectangle, and the connected segments in a
3281stroked path.
3282
3283Choose miter join to draw sharp corners. Choose round join to draw a circle with a
3284radius equal to the stroke width on top of the corner. Choose bevel join to minimally
3285connect the thick strokes.
3286
Cary Clark7cfcbca2018-01-04 16:11:51 -05003287The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04003288not contain the actual join. For instance, a fill path constructed with round joins does
3289not necessarily include circles at each connected segment.
3290
3291### Constants
3292
Cary Clark682c58d2018-05-16 07:07:07 -04003293<table style='border-collapse: collapse; width: 62.5em'>
3294 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3295<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3296<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3297 <tr style='background-color: #f0f0f0; '>
3298 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
3299 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3300 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3301Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
3302If 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 -05003303</td>
Cary Clark12799e12017-07-28 15:18:29 -04003304 </tr>
3305 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003306 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
3307 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3308 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3309Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
3310</td>
3311 </tr>
3312 <tr style='background-color: #f0f0f0; '>
3313 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
3314 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3316Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05003317</td>
Cary Clark12799e12017-07-28 15:18:29 -04003318 </tr>
3319 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003320 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
3321 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3322 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3323equivalent to the largest value for Stroke_Join</td>
3324 </tr>
3325 <tr style='background-color: #f0f0f0; '>
3326 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
3327 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3328 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3329<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 -05003330</td>
Cary Clark12799e12017-07-28 15:18:29 -04003331 </tr>
3332 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003333 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
3334 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3335 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3336May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003337</td>
Cary Clark12799e12017-07-28 15:18:29 -04003338 </tr>
3339</table>
3340
3341### Example
3342
3343<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
3344
3345### See Also
3346
Cary Clark682c58d2018-05-16 07:07:07 -04003347<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 -04003348
Cary Clark682c58d2018-05-16 07:07:07 -04003349<a name='SkPaint_getStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003350## getStrokeJoin
3351
Cary Clark682c58d2018-05-16 07:07:07 -04003352<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3353<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003354</pre>
3355
Cary Clark80247e52018-07-11 16:18:41 -04003356Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003357
3358### Return Value
3359
Cary Clark682c58d2018-05-16 07:07:07 -04003360one 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 -04003361
3362### Example
3363
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003364<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04003365
3366#### Example Output
3367
3368~~~~
3369kMiter_Join == default stroke join
3370~~~~
3371
3372</fiddle-embed></div>
3373
3374### See Also
3375
Cary Clark682c58d2018-05-16 07:07:07 -04003376<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003377
3378---
3379
Cary Clark682c58d2018-05-16 07:07:07 -04003380<a name='SkPaint_setStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003381## setStrokeJoin
3382
Cary Clark682c58d2018-05-16 07:07:07 -04003383<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3384void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04003385</pre>
3386
Cary Clark80247e52018-07-11 16:18:41 -04003387Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003388
3389### Parameters
3390
Cary Clark682c58d2018-05-16 07:07:07 -04003391<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
3392 <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 -04003393otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04003394 </tr>
3395</table>
3396
3397### Example
3398
3399<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
3400
3401#### Example Output
3402
3403~~~~
3404kMiter_Join == paint.getStrokeJoin()
3405~~~~
3406
3407</fiddle-embed></div>
3408
3409### See Also
3410
Cary Clark682c58d2018-05-16 07:07:07 -04003411<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003412
3413---
3414
3415### See Also
3416
Cary Clark682c58d2018-05-16 07:07:07 -04003417<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003418
Cary Clark682c58d2018-05-16 07:07:07 -04003419## <a name='Fill_Path'>Fill Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05003420
Cary Clark682c58d2018-05-16 07:07:07 -04003421<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 -04003422
Cary Clark682c58d2018-05-16 07:07:07 -04003423If <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
3424replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
3425destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003426
Cary Clark682c58d2018-05-16 07:07:07 -04003427Fill <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
3428the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04003429
Cary Clark682c58d2018-05-16 07:07:07 -04003430If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
3431and <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>,
3432and <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 -04003433
Cary Clark682c58d2018-05-16 07:07:07 -04003434Fill <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 -04003435
Cary Clark682c58d2018-05-16 07:07:07 -04003436If 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>
3437returns false since <a href='#Style_Hairline'>Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04003438
Cary Clark682c58d2018-05-16 07:07:07 -04003439<a name='SkPaint_getFillPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003440## getFillPath
3441
Cary Clark682c58d2018-05-16 07:07:07 -04003442<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3443bool <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 -04003444</pre>
3445
Cary Clark80247e52018-07-11 16:18:41 -04003446Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04003447
3448### Parameters
3449
Cary Clark682c58d2018-05-16 07:07:07 -04003450<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
3451 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3452 </tr>
3453 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
3454 <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>
3455 </tr>
3456 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
3457 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
3458 </tr>
3459 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
3460 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04003461to favor speed and size</td>
3462 </tr>
3463</table>
3464
3465### Return Value
3466
Cary Clark682c58d2018-05-16 07:07:07 -04003467true 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 -04003468
3469### Example
3470
Cary Clark682c58d2018-05-16 07:07:07 -04003471<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.
3472At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05003473At the highest precision, the filled path has high fidelity compared to the original stroke.
3474</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003475
3476---
3477
Cary Clark682c58d2018-05-16 07:07:07 -04003478<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05003479
Cary Clark682c58d2018-05-16 07:07:07 -04003480<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3481bool <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 -04003482</pre>
3483
Cary Clark80247e52018-07-11 16:18:41 -04003484Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04003485
Cary Clark682c58d2018-05-16 07:07:07 -04003486Replaces <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>.
3487<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 -04003488
3489### Parameters
3490
Cary Clark682c58d2018-05-16 07:07:07 -04003491<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
3492 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3493 </tr>
3494 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
3495 <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 -04003496 </tr>
3497</table>
3498
3499### Return Value
3500
Cary Clark682c58d2018-05-16 07:07:07 -04003501true 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 -04003502
3503### Example
3504
3505<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
3506
3507---
3508
3509### See Also
3510
Cary Clark682c58d2018-05-16 07:07:07 -04003511<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 -04003512
Cary Clark682c58d2018-05-16 07:07:07 -04003513## <a name='Shader_Methods'>Shader Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003514
Cary Clark682c58d2018-05-16 07:07:07 -04003515<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
3516<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
3517If <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 -04003518
Cary Clark682c58d2018-05-16 07:07:07 -04003519<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>.
3520If <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 -04003521the fill.
3522
Cary Clark682c58d2018-05-16 07:07:07 -04003523The 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 -04003524
3525### Example
3526
3527<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
3528
Cary Clark682c58d2018-05-16 07:07:07 -04003529If <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 -04003530
3531### Example
3532
skia-bookmaker525f9a92018-05-03 06:27:39 +00003533<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003534
Cary Clark682c58d2018-05-16 07:07:07 -04003535<a name='SkPaint_getShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003536## getShader
3537
Cary Clark682c58d2018-05-16 07:07:07 -04003538<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3539<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003540</pre>
3541
Cary Clark80247e52018-07-11 16:18:41 -04003542Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003543
Cary Clark682c58d2018-05-16 07:07:07 -04003544Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003545
3546### Return Value
3547
Cary Clark682c58d2018-05-16 07:07:07 -04003548<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003549
3550### Example
3551
3552<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
3553
3554#### Example Output
3555
3556~~~~
3557nullptr == shader
3558nullptr != shader
3559~~~~
3560
3561</fiddle-embed></div>
3562
3563---
3564
Cary Clark682c58d2018-05-16 07:07:07 -04003565<a name='SkPaint_refShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003566## refShader
3567
Cary Clark682c58d2018-05-16 07:07:07 -04003568<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3569<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkShader'>SkShader</a>&gt; <a href='#SkPaint_refShader'>refShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003570</pre>
3571
Cary Clark80247e52018-07-11 16:18:41 -04003572Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003573
Cary Clark682c58d2018-05-16 07:07:07 -04003574Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003575
3576### Return Value
3577
Cary Clark682c58d2018-05-16 07:07:07 -04003578<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003579
3580### Example
3581
3582<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
3583
3584#### Example Output
3585
3586~~~~
3587shader unique: true
3588shader unique: false
3589~~~~
3590
3591</fiddle-embed></div>
3592
3593---
3594
Cary Clark682c58d2018-05-16 07:07:07 -04003595<a name='SkPaint_setShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003596## setShader
3597
Cary Clark682c58d2018-05-16 07:07:07 -04003598<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3599void <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 -04003600</pre>
3601
Cary Clark80247e52018-07-11 16:18:41 -04003602Sets optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003603
Cary Clark682c58d2018-05-16 07:07:07 -04003604Sets <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>.
3605Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003606
3607### Parameters
3608
Cary Clark682c58d2018-05-16 07:07:07 -04003609<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
3610 <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 -04003611 </tr>
3612</table>
3613
3614### Example
3615
skia-bookmakere0a458f2018-07-16 05:29:00 +00003616<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003617
3618---
3619
Cary Clark682c58d2018-05-16 07:07:07 -04003620## <a name='Color_Filter_Methods'>Color Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003621
Cary Clark682c58d2018-05-16 07:07:07 -04003622<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04003623<a href='undocumented#Color_Filter'>Color Filter</a> may apply <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
Cary Clark682c58d2018-05-16 07:07:07 -04003624If <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 -04003625
Cary Clark682c58d2018-05-16 07:07:07 -04003626The 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 -04003627
3628### Example
3629
3630<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
3631
Cary Clark682c58d2018-05-16 07:07:07 -04003632<a name='SkPaint_getColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003633## getColorFilter
3634
Cary Clark682c58d2018-05-16 07:07:07 -04003635<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3636<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003637</pre>
3638
Cary Clark682c58d2018-05-16 07:07:07 -04003639Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3640Does 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 -04003641
3642### Return Value
3643
Cary Clark682c58d2018-05-16 07:07:07 -04003644<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003645
3646### Example
3647
3648<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
3649
3650#### Example Output
3651
3652~~~~
3653nullptr == color filter
3654nullptr != color filter
3655~~~~
3656
3657</fiddle-embed></div>
3658
3659---
3660
Cary Clark682c58d2018-05-16 07:07:07 -04003661<a name='SkPaint_refColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003662## refColorFilter
3663
Cary Clark682c58d2018-05-16 07:07:07 -04003664<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3665<a href='undocumented#sk_sp'>sk sp</a>&lt;<a href='undocumented#SkColorFilter'>SkColorFilter</a>&gt; <a href='#SkPaint_refColorFilter'>refColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003666</pre>
3667
Cary Clark682c58d2018-05-16 07:07:07 -04003668Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3669Increases <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 -04003670
3671### Return Value
3672
Cary Clark682c58d2018-05-16 07:07:07 -04003673<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04003674
3675### Example
3676
3677<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3678
3679#### Example Output
3680
3681~~~~
3682color filter unique: true
3683color filter unique: false
3684~~~~
3685
3686</fiddle-embed></div>
3687
3688---
3689
Cary Clark682c58d2018-05-16 07:07:07 -04003690<a name='SkPaint_setColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003691## setColorFilter
3692
Cary Clark682c58d2018-05-16 07:07:07 -04003693<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3694void <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 -04003695</pre>
3696
Cary Clark682c58d2018-05-16 07:07:07 -04003697Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3698<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 -04003699
Cary Clark682c58d2018-05-16 07:07:07 -04003700Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003701
3702### Parameters
3703
Cary Clark682c58d2018-05-16 07:07:07 -04003704<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3705 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003706 </tr>
3707</table>
3708
3709### Example
3710
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003711<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003712
3713---
3714
Cary Clark682c58d2018-05-16 07:07:07 -04003715## <a name='Blend_Mode_Methods'>Blend Mode Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003716
Cary Clark224c7002018-06-27 11:00:21 -04003717<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3718The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003719over the destination color.
3720
3721### Example
3722
3723<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
3724
3725### See Also
3726
Cary Clark224c7002018-06-27 11:00:21 -04003727<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003728
Cary Clark682c58d2018-05-16 07:07:07 -04003729<a name='SkPaint_getBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003730## getBlendMode
3731
Cary Clark682c58d2018-05-16 07:07:07 -04003732<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003733<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003734</pre>
3735
Cary Clark224c7002018-06-27 11:00:21 -04003736Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
3737By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003738
3739### Return Value
3740
3741mode used to combine source color with destination color
3742
3743### Example
3744
skia-bookmaker525f9a92018-05-03 06:27:39 +00003745<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003746
3747#### Example Output
3748
3749~~~~
3750kSrcOver == getBlendMode
3751kSrcOver != getBlendMode
3752~~~~
3753
3754</fiddle-embed></div>
3755
3756---
3757
Cary Clark682c58d2018-05-16 07:07:07 -04003758<a name='SkPaint_isSrcOver'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003759## isSrcOver
3760
Cary Clark682c58d2018-05-16 07:07:07 -04003761<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3762bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003763</pre>
3764
Cary Clark224c7002018-06-27 11:00:21 -04003765Returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003766
3767### Return Value
3768
Cary Clark224c7002018-06-27 11:00:21 -04003769true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003770
3771### Example
3772
3773<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3774
3775#### Example Output
3776
3777~~~~
3778isSrcOver == true
3779isSrcOver != true
3780~~~~
3781
3782</fiddle-embed></div>
3783
3784---
3785
Cary Clark682c58d2018-05-16 07:07:07 -04003786<a name='SkPaint_setBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003787## setBlendMode
3788
Cary Clark682c58d2018-05-16 07:07:07 -04003789<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003790void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003791</pre>
3792
Cary Clark224c7002018-06-27 11:00:21 -04003793Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003794Does not check for valid input.
3795
3796### Parameters
3797
Cary Clark682c58d2018-05-16 07:07:07 -04003798<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark224c7002018-06-27 11:00:21 -04003799 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003800 </tr>
3801</table>
3802
3803### Example
3804
3805<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3806
3807#### Example Output
3808
3809~~~~
3810isSrcOver == true
3811isSrcOver != true
3812~~~~
3813
3814</fiddle-embed></div>
3815
3816---
3817
Cary Clark682c58d2018-05-16 07:07:07 -04003818## <a name='Path_Effect_Methods'>Path Effect Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003819
Cary Clark682c58d2018-05-16 07:07:07 -04003820<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3821<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3822If <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 -04003823
3824### Example
3825
3826<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3827
3828### See Also
3829
Cary Clark682c58d2018-05-16 07:07:07 -04003830<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003831
Cary Clark682c58d2018-05-16 07:07:07 -04003832<a name='SkPaint_getPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003833## getPathEffect
3834
Cary Clark682c58d2018-05-16 07:07:07 -04003835<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3836<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003837</pre>
3838
Cary Clark682c58d2018-05-16 07:07:07 -04003839Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3840Does 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 -04003841
3842### Return Value
3843
Cary Clark682c58d2018-05-16 07:07:07 -04003844<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003845
3846### Example
3847
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003848<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003849
3850#### Example Output
3851
3852~~~~
3853nullptr == path effect
3854nullptr != path effect
3855~~~~
3856
3857</fiddle-embed></div>
3858
3859---
3860
Cary Clark682c58d2018-05-16 07:07:07 -04003861<a name='SkPaint_refPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003862## refPathEffect
3863
Cary Clark682c58d2018-05-16 07:07:07 -04003864<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3865<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 -04003866</pre>
3867
Cary Clark682c58d2018-05-16 07:07:07 -04003868Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3869Increases <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 -04003870
3871### Return Value
3872
Cary Clark682c58d2018-05-16 07:07:07 -04003873<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003874
3875### Example
3876
skia-bookmakera391c722018-07-09 05:28:19 +00003877<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003878
3879#### Example Output
3880
3881~~~~
3882path effect unique: true
3883path effect unique: false
3884~~~~
3885
3886</fiddle-embed></div>
3887
3888---
3889
Cary Clark682c58d2018-05-16 07:07:07 -04003890<a name='SkPaint_setPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003891## setPathEffect
3892
Cary Clark682c58d2018-05-16 07:07:07 -04003893<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3894void <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 -04003895</pre>
3896
Cary Clark682c58d2018-05-16 07:07:07 -04003897Sets <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
3898<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003899
Cary Clark682c58d2018-05-16 07:07:07 -04003900Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003901
3902### Parameters
3903
Cary Clark682c58d2018-05-16 07:07:07 -04003904<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3905 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003906 </tr>
3907</table>
3908
3909### Example
3910
3911<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3912
3913---
3914
Cary Clark682c58d2018-05-16 07:07:07 -04003915## <a name='Mask_Filter_Methods'>Mask Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003916
Cary Clark682c58d2018-05-16 07:07:07 -04003917<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3918<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003919
Cary Clark682c58d2018-05-16 07:07:07 -04003920<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3921creating 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 -04003922modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003923
3924### Example
3925
Cary Clark681287e2018-03-16 11:34:15 -04003926<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003927
Cary Clark682c58d2018-05-16 07:07:07 -04003928<a name='SkPaint_getMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003929## getMaskFilter
3930
Cary Clark682c58d2018-05-16 07:07:07 -04003931<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3932<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003933</pre>
3934
Cary Clark682c58d2018-05-16 07:07:07 -04003935Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
3936Does 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 -04003937
3938### Return Value
3939
Cary Clark682c58d2018-05-16 07:07:07 -04003940<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003941
3942### Example
3943
Cary Clark681287e2018-03-16 11:34:15 -04003944<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003945
3946#### Example Output
3947
3948~~~~
3949nullptr == mask filter
3950nullptr != mask filter
3951~~~~
3952
3953</fiddle-embed></div>
3954
3955---
3956
Cary Clark682c58d2018-05-16 07:07:07 -04003957<a name='SkPaint_refMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003958## refMaskFilter
3959
Cary Clark682c58d2018-05-16 07:07:07 -04003960<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3961<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 -04003962</pre>
3963
Cary Clark682c58d2018-05-16 07:07:07 -04003964Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003965
Cary Clark682c58d2018-05-16 07:07:07 -04003966Increases <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 -04003967
3968### Return Value
3969
Cary Clark682c58d2018-05-16 07:07:07 -04003970<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003971
3972### Example
3973
Cary Clark681287e2018-03-16 11:34:15 -04003974<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003975
3976#### Example Output
3977
3978~~~~
3979mask filter unique: true
3980mask filter unique: false
3981~~~~
3982
3983</fiddle-embed></div>
3984
3985---
3986
Cary Clark682c58d2018-05-16 07:07:07 -04003987<a name='SkPaint_setMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003988## setMaskFilter
3989
Cary Clark682c58d2018-05-16 07:07:07 -04003990<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3991void <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 -04003992</pre>
3993
Cary Clark682c58d2018-05-16 07:07:07 -04003994Sets <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
3995<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
3996<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003997
Cary Clark682c58d2018-05-16 07:07:07 -04003998Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003999
4000### Parameters
4001
Cary Clark682c58d2018-05-16 07:07:07 -04004002<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
4003 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04004004 </tr>
4005</table>
4006
4007### Example
4008
Cary Clark681287e2018-03-16 11:34:15 -04004009<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004010
4011---
4012
Cary Clark682c58d2018-05-16 07:07:07 -04004013## <a name='Typeface_Methods'>Typeface Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004014
Cary Clark682c58d2018-05-16 07:07:07 -04004015<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
4016<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
4017The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04004018implementation.
4019
4020### Example
4021
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004022<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004023
Cary Clark682c58d2018-05-16 07:07:07 -04004024<a name='SkPaint_getTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004025## getTypeface
4026
Cary Clark682c58d2018-05-16 07:07:07 -04004027<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4028<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004029</pre>
4030
Cary Clark682c58d2018-05-16 07:07:07 -04004031Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
Cary Clark81abc432018-06-25 16:30:08 -04004032Does not alter <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004033
4034### Return Value
4035
Cary Clark682c58d2018-05-16 07:07:07 -04004036<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004037
4038### Example
4039
Cary Clark71961fb2018-01-05 14:21:59 -05004040<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04004041
4042#### Example Output
4043
4044~~~~
4045nullptr == typeface
4046nullptr != typeface
4047~~~~
4048
4049</fiddle-embed></div>
4050
4051---
4052
Cary Clark682c58d2018-05-16 07:07:07 -04004053<a name='SkPaint_refTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004054## refTypeface
4055
Cary Clark682c58d2018-05-16 07:07:07 -04004056<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4057<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 -04004058</pre>
4059
Cary Clark682c58d2018-05-16 07:07:07 -04004060Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004061
4062### Return Value
4063
Cary Clark682c58d2018-05-16 07:07:07 -04004064<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004065
4066### Example
4067
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004068<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04004069
4070#### Example Output
4071
4072~~~~
4073typeface1 != typeface2
4074typeface1 == typeface2
4075~~~~
4076
4077</fiddle-embed></div>
4078
4079---
4080
Cary Clark682c58d2018-05-16 07:07:07 -04004081<a name='SkPaint_setTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004082## setTypeface
4083
Cary Clark682c58d2018-05-16 07:07:07 -04004084<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4085void <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 -04004086</pre>
4087
Cary Clark682c58d2018-05-16 07:07:07 -04004088Sets <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>.
4089Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
4090<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004091
4092### Parameters
4093
Cary Clark682c58d2018-05-16 07:07:07 -04004094<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
4095 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004096 </tr>
4097</table>
4098
4099### Example
4100
Cary Clark71961fb2018-01-05 14:21:59 -05004101<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004102
4103---
4104
Cary Clark682c58d2018-05-16 07:07:07 -04004105## <a name='Image_Filter_Methods'>Image Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004106
Cary Clark682c58d2018-05-16 07:07:07 -04004107<a href='undocumented#Image_Filter'>Image Filter</a> operates on the pixel representation of the shape, as modified by <a href='#Paint'>Paint</a>
Cary Clark224c7002018-06-27 11:00:21 -04004108with <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> set to <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>. <a href='undocumented#Image_Filter'>Image Filter</a> creates a new bitmap,
4109which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04004110
Cary Clark682c58d2018-05-16 07:07:07 -04004111<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>
4112can 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.
4113<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
4114<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004115
4116### Example
4117
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004118<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004119
Cary Clark682c58d2018-05-16 07:07:07 -04004120<a name='SkPaint_getImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004121## getImageFilter
4122
Cary Clark682c58d2018-05-16 07:07:07 -04004123<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4124<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004125</pre>
4126
Cary Clark682c58d2018-05-16 07:07:07 -04004127Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4128Does 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 -04004129
4130### Return Value
4131
Cary Clark682c58d2018-05-16 07:07:07 -04004132<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004133
4134### Example
4135
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004136<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04004137
4138#### Example Output
4139
4140~~~~
4141nullptr == image filter
4142nullptr != image filter
4143~~~~
4144
4145</fiddle-embed></div>
4146
4147---
4148
Cary Clark682c58d2018-05-16 07:07:07 -04004149<a name='SkPaint_refImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004150## refImageFilter
4151
Cary Clark682c58d2018-05-16 07:07:07 -04004152<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4153<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 -04004154</pre>
4155
Cary Clark682c58d2018-05-16 07:07:07 -04004156Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4157Increases <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 -04004158
4159### Return Value
4160
Cary Clark682c58d2018-05-16 07:07:07 -04004161<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004162
4163### Example
4164
4165<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
4166
4167#### Example Output
4168
4169~~~~
4170image filter unique: true
4171image filter unique: false
4172~~~~
4173
4174</fiddle-embed></div>
4175
4176---
4177
Cary Clark682c58d2018-05-16 07:07:07 -04004178<a name='SkPaint_setImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004179## setImageFilter
4180
Cary Clark682c58d2018-05-16 07:07:07 -04004181<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4182void <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 -04004183</pre>
4184
Cary Clark682c58d2018-05-16 07:07:07 -04004185Sets <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
4186<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 -04004187on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04004188
Cary Clark682c58d2018-05-16 07:07:07 -04004189Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004190
4191### Parameters
4192
Cary Clark682c58d2018-05-16 07:07:07 -04004193<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
4194 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04004195 </tr>
4196</table>
4197
4198### Example
4199
4200<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
4201
4202---
4203
Cary Clark682c58d2018-05-16 07:07:07 -04004204## <a name='Draw_Looper_Methods'>Draw Looper Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004205
Cary Clark682c58d2018-05-16 07:07:07 -04004206<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 -04004207to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04004208
Cary Clark682c58d2018-05-16 07:07:07 -04004209<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
4210<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
4211Set <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 -04004212
4213### Example
4214
4215<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
4216
Cary Clark682c58d2018-05-16 07:07:07 -04004217<a name='SkPaint_getDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004218## getDrawLooper
4219
Cary Clark682c58d2018-05-16 07:07:07 -04004220<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4221<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004222</pre>
4223
Cary Clark682c58d2018-05-16 07:07:07 -04004224Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4225Does 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 -04004226
4227### Return Value
4228
Cary Clark682c58d2018-05-16 07:07:07 -04004229<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004230
4231### Example
4232
4233<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
4234
4235#### Example Output
4236
4237~~~~
4238nullptr == draw looper
4239nullptr != draw looper
4240~~~~
4241
4242</fiddle-embed></div>
4243
4244---
4245
Cary Clark682c58d2018-05-16 07:07:07 -04004246<a name='SkPaint_refDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004247## refDrawLooper
4248
Cary Clark682c58d2018-05-16 07:07:07 -04004249<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4250<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 -04004251</pre>
4252
Cary Clark682c58d2018-05-16 07:07:07 -04004253Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4254Increases <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 -04004255
4256### Return Value
4257
Cary Clark682c58d2018-05-16 07:07:07 -04004258<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004259
4260### Example
4261
4262<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
4263
4264#### Example Output
4265
4266~~~~
4267draw looper unique: true
4268draw looper unique: false
4269~~~~
4270
4271</fiddle-embed></div>
4272
4273---
4274
Cary Clark682c58d2018-05-16 07:07:07 -04004275<a name='SkPaint_getLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004276## getLooper
4277
Cary Clark682c58d2018-05-16 07:07:07 -04004278<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4279<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004280</pre>
4281
Cary Clark682c58d2018-05-16 07:07:07 -04004282Deprecated.
4283
Cary Clark12799e12017-07-28 15:18:29 -04004284---
4285
Cary Clark682c58d2018-05-16 07:07:07 -04004286<a name='SkPaint_setDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004287## setDrawLooper
4288
Cary Clark682c58d2018-05-16 07:07:07 -04004289<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4290void <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 -04004291</pre>
4292
Cary Clark682c58d2018-05-16 07:07:07 -04004293Sets <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
4294<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 -04004295drawing unaltered.
4296
Cary Clark682c58d2018-05-16 07:07:07 -04004297Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004298
4299### Parameters
4300
Cary Clark682c58d2018-05-16 07:07:07 -04004301<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
4302 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004303 </tr>
4304</table>
4305
4306### Example
4307
4308<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
4309
4310---
4311
Cary Clark682c58d2018-05-16 07:07:07 -04004312<a name='SkPaint_setLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004313## setLooper
4314
Cary Clark682c58d2018-05-16 07:07:07 -04004315<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4316void <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 -04004317</pre>
4318
Cary Clark682c58d2018-05-16 07:07:07 -04004319Deprecated.
4320
Cary Clark12799e12017-07-28 15:18:29 -04004321---
4322
Cary Clark682c58d2018-05-16 07:07:07 -04004323## <a name='Text_Align'>Text Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004324
Cary Clark682c58d2018-05-16 07:07:07 -04004325## <a name='SkPaint_Align'>Enum SkPaint::Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004326
Cary Clarka560c472017-11-27 10:44:06 -05004327<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004328 enum <a href='#SkPaint_Align'>Align</a> {
4329 <a href='#SkPaint_kLeft_Align'>kLeft Align</a>,
4330 <a href='#SkPaint_kCenter_Align'>kCenter Align</a>,
4331 <a href='#SkPaint_kRight_Align'>kRight Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004332 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04004333
Cary Clark682c58d2018-05-16 07:07:07 -04004334 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05004335</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004336
Cary Clark682c58d2018-05-16 07:07:07 -04004337<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
4338<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>,
4339<a href='SkCanvas_Reference#SkCanvas_drawPosTextH'>SkCanvas::drawPosTextH</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextOnPath'>SkCanvas::drawTextOnPath</a>,
4340<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>,
4341and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
4342as 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 -04004343
4344The text position is set by the font for both horizontal and vertical text.
4345Typically, for horizontal text, the position is to the left side of the glyph on the
4346base line; and for vertical text, the position is the horizontal center of the glyph
4347at the caps height.
4348
Cary Clark682c58d2018-05-16 07:07:07 -04004349<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 -04004350using the metrics returned by the font.
4351
Cary Clark682c58d2018-05-16 07:07:07 -04004352<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004353
4354### Constants
4355
Cary Clark682c58d2018-05-16 07:07:07 -04004356<table style='border-collapse: collapse; width: 62.5em'>
4357 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4358<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4359<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4360 <tr style='background-color: #f0f0f0; '>
4361 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
4362 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4363 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4364Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05004365</td>
Cary Clark12799e12017-07-28 15:18:29 -04004366 </tr>
4367 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004368 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
4369 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4370 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4371Moves the glyph half its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear, and
4372half its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
4373</td>
4374 </tr>
4375 <tr style='background-color: #f0f0f0; '>
4376 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
4377 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4378 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4379Moves the glyph by its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear,
4380and 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 -05004381</td>
Cary Clark12799e12017-07-28 15:18:29 -04004382 </tr>
4383 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004384 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
4385 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4386 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04004387May be used to verify that <a href='#SkPaint_Align'>Align</a> is a legal value.
4388</td>
Cary Clark12799e12017-07-28 15:18:29 -04004389 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004390</table>
Cary Clark12799e12017-07-28 15:18:29 -04004391
4392### Example
4393
Cary Clark1a8d7622018-03-05 13:26:16 -05004394<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
4395</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004396
4397### Example
4398
Cary Clark682c58d2018-05-16 07:07:07 -04004399<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 -05004400</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004401
Cary Clark682c58d2018-05-16 07:07:07 -04004402<a name='SkPaint_getTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004403## getTextAlign
4404
Cary Clark682c58d2018-05-16 07:07:07 -04004405<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4406<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004407</pre>
4408
Cary Clark682c58d2018-05-16 07:07:07 -04004409Returns <a href='#Text_Align'>Text Align</a>.
4410Returns <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 -04004411
4412### Return Value
4413
4414text placement relative to position
4415
4416### Example
4417
4418<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
4419
4420#### Example Output
4421
4422~~~~
4423kLeft_Align == default
4424~~~~
4425
4426</fiddle-embed></div>
4427
4428---
4429
Cary Clark682c58d2018-05-16 07:07:07 -04004430<a name='SkPaint_setTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004431## setTextAlign
4432
Cary Clark682c58d2018-05-16 07:07:07 -04004433<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4434void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04004435</pre>
4436
Cary Clark682c58d2018-05-16 07:07:07 -04004437Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
4438Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04004439
4440### Parameters
4441
Cary Clark682c58d2018-05-16 07:07:07 -04004442<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
4443 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04004444 </tr>
4445</table>
4446
4447### Example
4448
Cary Clark682c58d2018-05-16 07:07:07 -04004449<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 -05004450alignment out of range has no effect.
4451</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004452
4453---
4454
Cary Clark682c58d2018-05-16 07:07:07 -04004455## <a name='Text_Size'>Text Size</a>
Cary Clark08895c42018-02-01 09:37:32 -05004456
Cary Clark682c58d2018-05-16 07:07:07 -04004457<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
4458<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
4459<a href='#Text_Size'>Text Size</a> defaults to 12.
4460Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04004461
4462### Example
4463
4464<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
4465
Cary Clark682c58d2018-05-16 07:07:07 -04004466<a name='SkPaint_getTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004467## getTextSize
4468
Cary Clark682c58d2018-05-16 07:07:07 -04004469<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4470<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004471</pre>
4472
Cary Clark682c58d2018-05-16 07:07:07 -04004473Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04004474
4475### Return Value
4476
4477typographic height of text
4478
4479### Example
4480
skia-bookmaker233c6522018-07-04 05:33:26 +00004481<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004482
4483---
4484
Cary Clark682c58d2018-05-16 07:07:07 -04004485<a name='SkPaint_setTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004486## setTextSize
4487
Cary Clark682c58d2018-05-16 07:07:07 -04004488<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4489void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04004490</pre>
4491
Cary Clark682c58d2018-05-16 07:07:07 -04004492Sets <a href='#Text_Size'>Text Size</a> in points.
4493Has 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 -04004494
4495### Parameters
4496
Cary Clark682c58d2018-05-16 07:07:07 -04004497<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
4498 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004499 </tr>
4500</table>
4501
4502### Example
4503
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004504<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004505
4506---
4507
Cary Clark682c58d2018-05-16 07:07:07 -04004508## <a name='Text_Scale_X'>Text Scale X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004509
Cary Clark682c58d2018-05-16 07:07:07 -04004510<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
4511<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004512is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004513<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
4514<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04004515
4516### Example
4517
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004518<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004519
Cary Clark682c58d2018-05-16 07:07:07 -04004520<a name='SkPaint_getTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004521## getTextScaleX
4522
Cary Clark682c58d2018-05-16 07:07:07 -04004523<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4524<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004525</pre>
4526
Cary Clark682c58d2018-05-16 07:07:07 -04004527Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004528Default value is 1.
4529
4530### Return Value
4531
4532text horizontal scale
4533
4534### Example
4535
4536<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
4537
4538---
4539
Cary Clark682c58d2018-05-16 07:07:07 -04004540<a name='SkPaint_setTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004541## setTextScaleX
4542
Cary Clark682c58d2018-05-16 07:07:07 -04004543<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4544void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04004545</pre>
4546
Cary Clark682c58d2018-05-16 07:07:07 -04004547Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004548Default value is 1.
4549
4550### Parameters
4551
Cary Clark682c58d2018-05-16 07:07:07 -04004552<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
4553 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04004554 </tr>
4555</table>
4556
4557### Example
4558
4559<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
4560
4561---
4562
Cary Clark682c58d2018-05-16 07:07:07 -04004563## <a name='Text_Skew_X'>Text Skew X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004564
Cary Clark682c58d2018-05-16 07:07:07 -04004565<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
4566<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004567is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004568<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
4569<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04004570
4571### Example
4572
4573<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
4574
Cary Clark682c58d2018-05-16 07:07:07 -04004575<a name='SkPaint_getTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004576## getTextSkewX
4577
Cary Clark682c58d2018-05-16 07:07:07 -04004578<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4579<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004580</pre>
4581
Cary Clark682c58d2018-05-16 07:07:07 -04004582Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004583Default value is zero.
4584
4585### Return Value
4586
4587additional shear in x-axis relative to y-axis
4588
4589### Example
4590
4591<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
4592
4593---
4594
Cary Clark682c58d2018-05-16 07:07:07 -04004595<a name='SkPaint_setTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004596## setTextSkewX
4597
Cary Clark682c58d2018-05-16 07:07:07 -04004598<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4599void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04004600</pre>
4601
Cary Clark682c58d2018-05-16 07:07:07 -04004602Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004603Default value is zero.
4604
4605### Parameters
4606
Cary Clark682c58d2018-05-16 07:07:07 -04004607<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
4608 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04004609 </tr>
4610</table>
4611
4612### Example
4613
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004614<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004615
4616---
4617
Cary Clark682c58d2018-05-16 07:07:07 -04004618## <a name='Text_Encoding'>Text Encoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004619
Cary Clark682c58d2018-05-16 07:07:07 -04004620## <a name='SkPaint_TextEncoding'>Enum SkPaint::TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004621
Cary Clarka560c472017-11-27 10:44:06 -05004622<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004623 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
4624 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>,
4625 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>,
4626 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>,
4627 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004628 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004629</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004630
Cary Clark682c58d2018-05-16 07:07:07 -04004631<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
4632size, 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 -04004633
Cary Clarka560c472017-11-27 10:44:06 -05004634Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004635All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04004636in the total storage required.
4637
Cary Clark682c58d2018-05-16 07:07:07 -04004638<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 -04004639
Cary Clark682c58d2018-05-16 07:07:07 -04004640<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 -04004641
Cary Clark682c58d2018-05-16 07:07:07 -04004642<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 -04004643
Cary Clark682c58d2018-05-16 07:07:07 -04004644<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 -04004645A glyph index is a 16-bit word.
4646
Cary Clark682c58d2018-05-16 07:07:07 -04004647<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 -04004648
4649### Constants
4650
Cary Clark682c58d2018-05-16 07:07:07 -04004651<table style='border-collapse: collapse; width: 62.5em'>
4652 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4653<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4654<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4655 <tr style='background-color: #f0f0f0; '>
4656 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
4657 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4658 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4659uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04004660 </tr>
4661 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004662 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
4663 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4664 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4665uses two byte words to represent most of Unicode</td>
4666 </tr>
4667 <tr style='background-color: #f0f0f0; '>
4668 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
4669 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4671uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04004672 </tr>
4673 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004674 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
4675 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4676 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4677uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04004678 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004679</table>
Cary Clark12799e12017-07-28 15:18:29 -04004680
4681### Example
4682
Cary Clarka560c472017-11-27 10:44:06 -05004683<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4684Second line is encoded in UTF-16.
4685Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04004686Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05004687</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004688
Cary Clark682c58d2018-05-16 07:07:07 -04004689<a name='SkPaint_getTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004690## getTextEncoding
4691
Cary Clark682c58d2018-05-16 07:07:07 -04004692<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4693<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004694</pre>
4695
Cary Clark682c58d2018-05-16 07:07:07 -04004696Returns <a href='#Text_Encoding'>Text Encoding</a>.
4697<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 -04004698
4699### Return Value
4700
Cary Clark682c58d2018-05-16 07:07:07 -04004701one 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
4702<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004703
4704### Example
4705
skia-bookmaker525f9a92018-05-03 06:27:39 +00004706<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004707
4708#### Example Output
4709
4710~~~~
4711kUTF8_TextEncoding == text encoding
4712kGlyphID_TextEncoding == text encoding
4713~~~~
4714
4715</fiddle-embed></div>
4716
4717---
4718
Cary Clark682c58d2018-05-16 07:07:07 -04004719<a name='SkPaint_setTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004720## setTextEncoding
4721
Cary Clark682c58d2018-05-16 07:07:07 -04004722<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4723void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004724</pre>
4725
Cary Clark682c58d2018-05-16 07:07:07 -04004726Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4727<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4728Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004729
4730### Parameters
4731
Cary Clark682c58d2018-05-16 07:07:07 -04004732<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4733 <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
4734<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004735 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004736#
4737
Cary Clark12799e12017-07-28 15:18:29 -04004738</table>
4739
4740### Example
4741
Cary Clark75fd4492018-06-20 12:45:16 -04004742<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004743
4744#### Example Output
4745
4746~~~~
47474 != text encoding
4748~~~~
4749
4750</fiddle-embed></div>
4751
4752---
4753
Cary Clark682c58d2018-05-16 07:07:07 -04004754## <a name='Font_Metrics'>Font Metrics</a>
Cary Clark08895c42018-02-01 09:37:32 -05004755
Cary Clark682c58d2018-05-16 07:07:07 -04004756<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>.
4757The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4758<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004759
Cary Clark682c58d2018-05-16 07:07:07 -04004760<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 -04004761X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4762are positive.
4763Y-axis values above the baseline are negative, and below the baseline are positive.
4764
4765### Example
4766
Ben Wagnere5806492017-11-09 12:08:31 -05004767<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004768
Cary Clark682c58d2018-05-16 07:07:07 -04004769# <a name='SkPaint_FontMetrics'>Struct SkPaint::FontMetrics</a>
4770
4771## <a name='Font_Metrics_Constant'>Constant</a>
4772
4773
4774SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
4775<table style='border-collapse: collapse; width: 62.5em'>
4776 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4777<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4778 <tr style='background-color: #f0f0f0; '>
4779 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a></td>
4780 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>valid <a href='#Font_Metrics'>Font Metrics</a></td>
4781 </tr>
4782 <tr>
4783 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a></td>
4784 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is valid</td>
4785 </tr>
4786 <tr style='background-color: #f0f0f0; '>
4787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a></td>
4788 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is valid</td>
4789 </tr>
4790 <tr>
4791 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a></td>
4792 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is valid</td>
4793 </tr>
4794 <tr style='background-color: #f0f0f0; '>
4795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a></td>
4796 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is valid</td>
4797 </tr>
4798</table>
4799
Cary Clark682c58d2018-05-16 07:07:07 -04004800## <a name='Font_Metrics_Member_Function'>Member_Function</a>
4801
4802
4803SkPaint member functions read and modify the structure properties.
4804<table style='border-collapse: collapse; width: 62.5em'>
4805 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4806<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4807 <tr style='background-color: #f0f0f0; '>
4808 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a></td>
4809 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout position if set</td>
4810 </tr>
4811 <tr>
4812 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a></td>
4813 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout thickness if set</td>
4814 </tr>
4815 <tr style='background-color: #f0f0f0; '>
4816 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a></td>
4817 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline position if set</td>
4818 </tr>
4819 <tr>
4820 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a></td>
4821 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline thickness if set</td>
4822 </tr>
4823</table>
4824
Cary Clark682c58d2018-05-16 07:07:07 -04004825## <a name='Font_Metrics_Member'>Member</a>
4826
4827
4828SkPaint members may be read and written directly without using a member function.
4829<table style='border-collapse: collapse; width: 62.5em'>
4830 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4831<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4832 <tr style='background-color: #f0f0f0; '>
4833 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAscent'>fAscent</a></td>
4834 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve above baseline</td>
4835 </tr>
4836 <tr>
4837 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a></td>
4838 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>average character width</td>
4839 </tr>
4840 <tr style='background-color: #f0f0f0; '>
4841 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fBottom'>fBottom</a></td>
4842 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent below baseline</td>
4843 </tr>
4844 <tr>
4845 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a></td>
4846 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of an upper-case letter</td>
4847 </tr>
4848 <tr style='background-color: #f0f0f0; '>
4849 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fDescent'>fDescent</a></td>
4850 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve below baseline</td>
4851 </tr>
4852 <tr>
4853 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fFlags'>fFlags</a></td>
4854 <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>
4855 </tr>
4856 <tr style='background-color: #f0f0f0; '>
4857 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fLeading'>fLeading</a></td>
4858 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to add between lines</td>
4859 </tr>
4860 <tr>
4861 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a></td>
4862 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum character width</td>
4863 </tr>
4864 <tr style='background-color: #f0f0f0; '>
4865 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a></td>
4866 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout position relative to baseline</td>
4867 </tr>
4868 <tr>
4869 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a></td>
4870 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout thickness</td>
4871 </tr>
4872 <tr style='background-color: #f0f0f0; '>
4873 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fTop'>fTop</a></td>
4874 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent above baseline</td>
4875 </tr>
4876 <tr>
4877 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a></td>
4878 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline position relative to baseline</td>
4879 </tr>
4880 <tr style='background-color: #f0f0f0; '>
4881 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a></td>
4882 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline thickness</td>
4883 </tr>
4884 <tr>
4885 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a></td>
4886 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of lower-case 'x'</td>
4887 </tr>
4888 <tr style='background-color: #f0f0f0; '>
4889 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMax'>fXMax</a></td>
4890 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum x</td>
4891 </tr>
4892 <tr>
4893 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMin'>fXMin</a></td>
4894 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimum x</td>
4895 </tr>
4896</table>
4897
Cary Clarka560c472017-11-27 10:44:06 -05004898<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004899 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4900 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4901 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4902 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4903 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4904 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004905 };
Cary Clark12799e12017-07-28 15:18:29 -04004906
Cary Clark682c58d2018-05-16 07:07:07 -04004907 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4908 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4909 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4910 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4911 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4912 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4913 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4914 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4915 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4916 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4917 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4918 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4919 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4920 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4921 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4922 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004923
Cary Clark682c58d2018-05-16 07:07:07 -04004924 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness(SkScalar* thickness)</a> const;
4925 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition(SkScalar* position)</a> const;
4926 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness(SkScalar* thickness)</a> const;
4927 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark186d08f2018-04-03 08:43:27 -04004928 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004929</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004930
Cary Clark682c58d2018-05-16 07:07:07 -04004931<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
4932computed 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 -04004933not available.
4934
Cary Clark5538c132018-06-14 12:28:14 -04004935All vertical values are relative to the baseline, on a y-axis pointing down.
4936Zero is on the baseline, negative values are above the baseline, and positive
4937values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004938
Cary Clark682c58d2018-05-16 07:07:07 -04004939<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 -04004940are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004941
Cary Clark682c58d2018-05-16 07:07:07 -04004942<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 -04004943are valid, since their value may be zero.
4944
Cary Clark682c58d2018-05-16 07:07:07 -04004945## <a name='SkPaint_FontMetrics_FontMetricsFlags'>Enum SkPaint::FontMetrics::FontMetricsFlags</a>
Cary Clark12799e12017-07-28 15:18:29 -04004946
Cary Clarka560c472017-11-27 10:44:06 -05004947<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004948 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4949 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4950 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4951 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4952 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004953 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004954</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004955
Cary Clark682c58d2018-05-16 07:07:07 -04004956<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 -04004957the underline or strikeout metric may be valid and zero.
4958Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4959
Cary Clark12799e12017-07-28 15:18:29 -04004960### Constants
4961
Cary Clark682c58d2018-05-16 07:07:07 -04004962<table style='border-collapse: collapse; width: 62.5em'>
4963 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4964<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4965<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4966 <tr style='background-color: #f0f0f0; '>
4967 <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>
4968 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4969 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4970set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004971 </tr>
4972 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004973 <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>
4974 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4975 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4976set if fUnderlinePosition is valid</td>
4977 </tr>
4978 <tr style='background-color: #f0f0f0; '>
4979 <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>
4980 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4981 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4982set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004983 </tr>
4984 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004985 <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>
4986 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4987 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4988set if fStrikeoutPosition is valid</td>
4989 </tr>
4990</table>
4991
4992### Members
4993
4994<table style='border-collapse: collapse; width: 62.5em'>
4995 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
4996<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Name</th>
4997<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4998 <tr style='background-color: #f0f0f0; '>
4999 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
5000 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
5001 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5002is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005003 </tr>
5004 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005005 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5006 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
5007 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005008Greatest extent above the baseline for any glyph.
5009Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005010</td>
5011 </tr>
5012 <tr style='background-color: #f0f0f0; '>
5013 <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_fAscent'><code>fAscent</code></a></td>
5015 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005016Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005017Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005018</td>
5019 </tr>
5020 <tr>
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_fDescent'><code>fDescent</code></a></td>
5023 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005024Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005025Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005026</td>
5027 </tr>
5028 <tr style='background-color: #f0f0f0; '>
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_fBottom'><code>fBottom</code></a></td>
5031 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005032Greatest extent below the baseline for any glyph.
5033Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005034</td>
5035 </tr>
5036 <tr>
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_fLeading'><code>fLeading</code></a></td>
5039 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005040Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005041Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005042</td>
5043 </tr>
5044 <tr style='background-color: #f0f0f0; '>
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_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
5047 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005048Average character width, if it is available.
5049Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005050</td>
5051 </tr>
5052 <tr>
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_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
5055 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5056maximum character width</td>
5057 </tr>
5058 <tr style='background-color: #f0f0f0; '>
5059 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5060 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
5061 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005062Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005063Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005064</td>
5065 </tr>
5066 <tr>
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_fXMax'><code>fXMax</code></a></td>
5069 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005070Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005071Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005072</td>
5073 </tr>
5074 <tr style='background-color: #f0f0f0; '>
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_fXHeight'><code>fXHeight</code></a></td>
5077 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005078May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005079</td>
5080 </tr>
5081 <tr>
5082 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5083 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
5084 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005085May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005086</td>
5087 </tr>
5088 <tr style='background-color: #f0f0f0; '>
5089 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5090 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
5091 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5092If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5093If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
5094</td>
5095 </tr>
5096 <tr>
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_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
5099 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005100Position of the top of the underline stroke relative to the baseline.
5101Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005102
Cary Clark682c58d2018-05-16 07:07:07 -04005103If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5104If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
5105</td>
5106 </tr>
5107 <tr style='background-color: #f0f0f0; '>
5108 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5109 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
5110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5111If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5112If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
5113</td>
5114 </tr>
5115 <tr>
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_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
5118 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005119Position of the bottom of the strikeout stroke relative to the baseline.
5120Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005121
Cary Clark682c58d2018-05-16 07:07:07 -04005122If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5123If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
5124</td>
5125 </tr>
5126</table>
Cary Clark12799e12017-07-28 15:18:29 -04005127
Cary Clark682c58d2018-05-16 07:07:07 -04005128<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005129## hasUnderlineThickness
5130
Cary Clark682c58d2018-05-16 07:07:07 -04005131<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5132bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005133</pre>
5134
Cary Clark80247e52018-07-11 16:18:41 -04005135Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04005136<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,
5137return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005138
5139### Parameters
5140
Cary Clark682c58d2018-05-16 07:07:07 -04005141<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
5142 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005143 </tr>
5144</table>
5145
5146### Return Value
5147
5148true if font specifies underline width
5149
5150---
5151
Cary Clark682c58d2018-05-16 07:07:07 -04005152<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005153## hasUnderlinePosition
5154
Cary Clark682c58d2018-05-16 07:07:07 -04005155<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5156bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005157</pre>
5158
Cary Clark80247e52018-07-11 16:18:41 -04005159Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04005160<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,
5161return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005162
5163### Parameters
5164
Cary Clark682c58d2018-05-16 07:07:07 -04005165<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
5166 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005167 </tr>
5168</table>
5169
5170### Return Value
5171
Cary Clark682c58d2018-05-16 07:07:07 -04005172true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005173
5174---
5175
Cary Clark682c58d2018-05-16 07:07:07 -04005176<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005177## hasStrikeoutThickness
5178
Cary Clark682c58d2018-05-16 07:07:07 -04005179<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5180bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005181</pre>
5182
Cary Clark80247e52018-07-11 16:18:41 -04005183Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04005184<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,
5185return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005186
5187### Parameters
5188
Cary Clark682c58d2018-05-16 07:07:07 -04005189<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
5190 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005191 </tr>
5192</table>
5193
5194### Return Value
5195
5196true if font specifies strikeout width
5197
5198---
5199
Cary Clark682c58d2018-05-16 07:07:07 -04005200<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005201## hasStrikeoutPosition
5202
Cary Clark682c58d2018-05-16 07:07:07 -04005203<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5204bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005205</pre>
5206
Cary Clark80247e52018-07-11 16:18:41 -04005207Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04005208<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,
5209return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005210
5211### Parameters
5212
Cary Clark682c58d2018-05-16 07:07:07 -04005213<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
5214 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005215 </tr>
5216</table>
5217
5218### Return Value
5219
Cary Clark682c58d2018-05-16 07:07:07 -04005220true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005221
5222---
5223
Cary Clark682c58d2018-05-16 07:07:07 -04005224<a name='SkPaint_getFontMetrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005225## getFontMetrics
5226
Cary Clark682c58d2018-05-16 07:07:07 -04005227<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5228<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 -04005229</pre>
5230
Cary Clark682c58d2018-05-16 07:07:07 -04005231Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
5232The 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 -04005233descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005234If <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>.
5235Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5236dimensions 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>,
5237<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
5238Results 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 -04005239is ignored.
5240
5241### Parameters
5242
Cary Clark682c58d2018-05-16 07:07:07 -04005243<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
5244 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
5245 </tr>
5246 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
5247 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04005248 </tr>
5249</table>
5250
5251### Return Value
5252
5253recommended spacing between lines
5254
5255### Example
5256
5257<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
5258
5259### See Also
5260
Cary Clark682c58d2018-05-16 07:07:07 -04005261<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 -04005262
5263---
5264
Cary Clark682c58d2018-05-16 07:07:07 -04005265<a name='SkPaint_getFontSpacing'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005266## getFontSpacing
5267
Cary Clark682c58d2018-05-16 07:07:07 -04005268<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5269<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005270</pre>
5271
5272Returns the recommended spacing between lines: the sum of metrics
5273descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005274Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5275dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
5276Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005277
5278### Return Value
5279
5280recommended spacing between lines
5281
5282### Example
5283
5284<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
5285
5286#### Example Output
5287
5288~~~~
5289textSize: 12 fontSpacing: 13.9688
5290textSize: 18 fontSpacing: 20.9531
5291textSize: 24 fontSpacing: 27.9375
5292textSize: 32 fontSpacing: 37.25
5293~~~~
5294
5295</fiddle-embed></div>
5296
5297---
5298
Cary Clark682c58d2018-05-16 07:07:07 -04005299<a name='SkPaint_getFontBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005300## getFontBounds
5301
Cary Clark682c58d2018-05-16 07:07:07 -04005302<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5303<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005304</pre>
5305
Cary Clark682c58d2018-05-16 07:07:07 -04005306Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
5307Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
5308ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
5309and <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 -04005310
Cary Clark682c58d2018-05-16 07:07:07 -04005311If <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,
5312returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
5313<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 -04005314
5315### Return Value
5316
Cary Clark682c58d2018-05-16 07:07:07 -04005317union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04005318
5319### Example
5320
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005321<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04005322
5323#### Example Output
5324
5325~~~~
5326metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5327font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5328~~~~
5329
5330</fiddle-embed></div>
5331
5332---
5333
Cary Clark682c58d2018-05-16 07:07:07 -04005334<a name='SkPaint_textToGlyphs'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005335## textToGlyphs
5336
Cary Clark682c58d2018-05-16 07:07:07 -04005337<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5338int <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 -04005339</pre>
5340
Cary Clark682c58d2018-05-16 07:07:07 -04005341Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
5342Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
5343<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>.
5344<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04005345
Cary Clark682c58d2018-05-16 07:07:07 -04005346Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04005347
Cary Clark682c58d2018-05-16 07:07:07 -04005348If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
5349If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04005350
Cary Clark682c58d2018-05-16 07:07:07 -04005351If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
5352<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04005353
5354### Parameters
5355
Cary Clark682c58d2018-05-16 07:07:07 -04005356<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
5357 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5358 </tr>
5359 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
5360 <td>length of character storage in bytes</td>
5361 </tr>
5362 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
5363 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005364 </tr>
5365</table>
5366
5367### Return Value
5368
Cary Clark682c58d2018-05-16 07:07:07 -04005369number 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 -04005370
5371### Example
5372
5373<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
5374
5375---
5376
Cary Clark682c58d2018-05-16 07:07:07 -04005377<a name='SkPaint_countText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005378## countText
5379
Cary Clark682c58d2018-05-16 07:07:07 -04005380<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5381int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005382</pre>
5383
Cary Clark682c58d2018-05-16 07:07:07 -04005384Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
5385Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
5386Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005387
5388### Parameters
5389
Cary Clark682c58d2018-05-16 07:07:07 -04005390<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
5391 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5392 </tr>
5393 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
5394 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04005395 </tr>
5396</table>
5397
5398### Return Value
5399
Cary Clark682c58d2018-05-16 07:07:07 -04005400number 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 -04005401
5402### Example
5403
5404<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
5405
5406#### Example Output
5407
5408~~~~
5409count = 5
5410~~~~
5411
5412</fiddle-embed></div>
5413
5414---
5415
Cary Clark682c58d2018-05-16 07:07:07 -04005416<a name='SkPaint_containsText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005417## containsText
5418
Cary Clark682c58d2018-05-16 07:07:07 -04005419<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5420bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005421</pre>
5422
Cary Clark682c58d2018-05-16 07:07:07 -04005423Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
5424Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
5425<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005426
Cary Clark682c58d2018-05-16 07:07:07 -04005427If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
5428returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
5429does 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 -04005430
Cary Clark682c58d2018-05-16 07:07:07 -04005431Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04005432
5433### Parameters
5434
Cary Clark682c58d2018-05-16 07:07:07 -04005435<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
5436 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
5437 </tr>
5438 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
5439 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04005440 </tr>
5441</table>
5442
5443### Return Value
5444
Cary Clark682c58d2018-05-16 07:07:07 -04005445true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04005446
Ruiqi Mao94d57c42018-07-02 15:20:10 -04005447<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05005448corresponding to the Unicode surrogate code point.
5449</div>
Cary Clark12799e12017-07-28 15:18:29 -04005450
5451#### Example Output
5452
5453~~~~
54540x00b0 == has char
54550xd800 != has char
5456~~~~
5457
Cary Clark12799e12017-07-28 15:18:29 -04005458### Example
5459
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00005460<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href='#SkPaint_containsText'>containsText</a> returns true that glyph index is greater than zero, not
Cary Clark682c58d2018-05-16 07:07:07 -04005461that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05005462</div>
Cary Clark12799e12017-07-28 15:18:29 -04005463
5464#### Example Output
5465
5466~~~~
54670x01ff == has glyph
54680x0000 != has glyph
54690xffff == has glyph
5470~~~~
5471
5472</fiddle-embed></div>
5473
5474### See Also
5475
Cary Clark682c58d2018-05-16 07:07:07 -04005476<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04005477
5478---
5479
Cary Clark682c58d2018-05-16 07:07:07 -04005480<a name='SkPaint_glyphsToUnichars'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005481## glyphsToUnichars
5482
Cary Clark682c58d2018-05-16 07:07:07 -04005483<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5484void <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 -04005485</pre>
5486
Cary Clark682c58d2018-05-16 07:07:07 -04005487Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
5488<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
5489Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
5490by <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 -04005491
Cary Clark682c58d2018-05-16 07:07:07 -04005492Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005493
5494### Parameters
5495
Cary Clark682c58d2018-05-16 07:07:07 -04005496<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
5497 <td>array of indices into font</td>
5498 </tr>
5499 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
5500 <td>length of glyph array</td>
5501 </tr>
5502 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
5503 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04005504 </tr>
5505</table>
5506
5507### Example
5508
skia-bookmakerb95bbba2018-07-06 05:23:23 +00005509<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 -05005510</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005511
5512---
5513
Cary Clark682c58d2018-05-16 07:07:07 -04005514## <a name='Measure_Text'>Measure Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005515
Cary Clark682c58d2018-05-16 07:07:07 -04005516<a name='SkPaint_measureText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005517## measureText
5518
Cary Clark682c58d2018-05-16 07:07:07 -04005519<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5520<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 -04005521</pre>
5522
Cary Clark682c58d2018-05-16 07:07:07 -04005523Returns the advance width of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5524and the height of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5525The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
5526Uses <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,
5527and <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
5528<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
5529Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
5530The 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 -04005531
5532### Parameters
5533
Cary Clark682c58d2018-05-16 07:07:07 -04005534<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
5535 <td>character codes or glyph indices to be measured</td>
5536 </tr>
5537 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
5538 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
5539 </tr>
5540 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
5541 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005542 </tr>
5543</table>
5544
5545### Return Value
5546
5547advance width or height
5548
5549### Example
5550
5551<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
5552
5553---
5554
Cary Clark682c58d2018-05-16 07:07:07 -04005555<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05005556
Cary Clark682c58d2018-05-16 07:07:07 -04005557<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5558<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 -04005559</pre>
5560
Cary Clark682c58d2018-05-16 07:07:07 -04005561Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5562and the height of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5563The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
5564Uses <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,
5565and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5566Does 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 -04005567
5568### Parameters
5569
Cary Clark682c58d2018-05-16 07:07:07 -04005570<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
5571 <td>character codes or glyph indices to be measured</td>
5572 </tr>
5573 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
5574 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04005575 </tr>
5576</table>
5577
5578### Return Value
5579
5580advance width or height
5581
5582### Example
5583
5584<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
5585
5586#### Example Output
5587
5588~~~~
5589default width = 5
5590double width = 10
5591~~~~
5592
5593</fiddle-embed></div>
5594
5595---
5596
Cary Clark682c58d2018-05-16 07:07:07 -04005597<a name='SkPaint_breakText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005598## breakText
5599
Cary Clark682c58d2018-05-16 07:07:07 -04005600<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5601size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
5602 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04005603</pre>
5604
Cary Clark682c58d2018-05-16 07:07:07 -04005605Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5606If <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
5607equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5608If <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
5609equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5610Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5611Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
5612Uses <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,
5613and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5614Does 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 -04005615
5616### Parameters
5617
Cary Clark682c58d2018-05-16 07:07:07 -04005618<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
5619 <td>character codes or glyph indices to be measured</td>
5620 </tr>
5621 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
5622 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
5623 </tr>
5624 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
5625 <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>
5626 </tr>
5627 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
5628 <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 -04005629 </tr>
5630</table>
5631
5632### Return Value
5633
Cary Clark682c58d2018-05-16 07:07:07 -04005634bytes 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 -04005635
5636### Example
5637
Cary Clark682c58d2018-05-16 07:07:07 -04005638<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
5639<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 -05005640</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005641
5642---
5643
Cary Clark682c58d2018-05-16 07:07:07 -04005644<a name='SkPaint_getTextWidths'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005645## getTextWidths
5646
Cary Clark682c58d2018-05-16 07:07:07 -04005647<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5648int <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 -04005649</pre>
5650
Cary Clark682c58d2018-05-16 07:07:07 -04005651Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
5652the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
5653Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
5654If <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.
5655if <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.
5656If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the horizontal advance.
5657If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the vertical advance.
5658Uses <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,
5659and <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>.
5660Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
5661Does 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 -04005662
5663### Parameters
5664
Cary Clark682c58d2018-05-16 07:07:07 -04005665<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
5666 <td>character codes or glyph indices to be measured</td>
5667 </tr>
5668 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
5669 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
5670 </tr>
5671 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
5672 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
5673 </tr>
5674 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
5675 <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 -04005676 </tr>
5677</table>
5678
5679### Return Value
5680
Cary Clark682c58d2018-05-16 07:07:07 -04005681glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005682
5683### Example
5684
Cary Clark682c58d2018-05-16 07:07:07 -04005685<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.
5686The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05005687</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005688
5689---
5690
Cary Clark682c58d2018-05-16 07:07:07 -04005691## <a name='Text_Path'>Text Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05005692
Cary Clark682c58d2018-05-16 07:07:07 -04005693<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 -04005694
Cary Clark682c58d2018-05-16 07:07:07 -04005695<a name='SkPaint_getTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005696## getTextPath
5697
Cary Clark682c58d2018-05-16 07:07:07 -04005698<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5699void <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 -04005700</pre>
5701
Cary Clark682c58d2018-05-16 07:07:07 -04005702Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
5703Uses <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,
5704and <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.
5705All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
5706Uses <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 -04005707
5708### Parameters
5709
Cary Clark682c58d2018-05-16 07:07:07 -04005710<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
5711 <td>character codes or glyph indices</td>
5712 </tr>
5713 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
5714 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
5715 </tr>
5716 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005717 <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 -04005718 </tr>
5719 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005720 <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 -04005721 </tr>
5722 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
5723 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005724 </tr>
5725</table>
5726
5727### Example
5728
Cary Clark682c58d2018-05-16 07:07:07 -04005729<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 -05005730the offset location. The result is rendered with one draw call.
5731</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005732
5733---
5734
Cary Clark682c58d2018-05-16 07:07:07 -04005735<a name='SkPaint_getPosTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005736## getPosTextPath
5737
Cary Clark682c58d2018-05-16 07:07:07 -04005738<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5739void <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 -04005740</pre>
5741
Cary Clark682c58d2018-05-16 07:07:07 -04005742Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
5743Uses <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,
5744and <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.
5745All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
5746Uses <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>.
5747<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04005748
5749### Parameters
5750
Cary Clark682c58d2018-05-16 07:07:07 -04005751<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
5752 <td>character codes or glyph indices</td>
5753 </tr>
5754 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
5755 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
5756 </tr>
5757 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
5758 <td>positions of each glyph</td>
5759 </tr>
5760 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
5761 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005762 </tr>
5763</table>
5764
5765### Example
5766
Cary Clark682c58d2018-05-16 07:07:07 -04005767<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 -05005768</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005769
5770---
5771
Cary Clark682c58d2018-05-16 07:07:07 -04005772## <a name='Text_Intercepts'>Text Intercepts</a>
Cary Clark08895c42018-02-01 09:37:32 -05005773
Cary Clark682c58d2018-05-16 07:07:07 -04005774<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
5775of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04005776underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005777
Cary Clark682c58d2018-05-16 07:07:07 -04005778<a name='SkPaint_getTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005779## getTextIntercepts
5780
Cary Clark682c58d2018-05-16 07:07:07 -04005781<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5782int <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,
5783 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005784</pre>
5785
Cary Clark682c58d2018-05-16 07:07:07 -04005786Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
5787<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
5788The 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 -05005789the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005790Uses <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,
5791and <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.
5792Uses <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 +00005793
Cary Clark682c58d2018-05-16 07:07:07 -04005794Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005795
Cary Clark682c58d2018-05-16 07:07:07 -04005796<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005797
5798### Parameters
5799
Cary Clark682c58d2018-05-16 07:07:07 -04005800<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
5801 <td>character codes or glyph indices</td>
5802 </tr>
5803 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
5804 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5805 </tr>
5806 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005807 <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 -04005808 </tr>
5809 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005810 <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 -04005811 </tr>
5812 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5813 <td>lower and upper line parallel to the advance</td>
5814 </tr>
5815 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5816 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005817 </tr>
5818</table>
5819
5820### Return Value
5821
5822number of intersections; may be zero
5823
5824### Example
5825
Cary Clark1a8d7622018-03-05 13:26:16 -05005826<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
5827</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005828
5829---
5830
Cary Clark682c58d2018-05-16 07:07:07 -04005831<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005832## getPosTextIntercepts
5833
Cary Clark682c58d2018-05-16 07:07:07 -04005834<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5835int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
5836 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005837</pre>
5838
Cary Clark682c58d2018-05-16 07:07:07 -04005839Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5840<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5841The 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 -05005842the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005843Uses <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,
5844and <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.
5845Uses <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 +00005846
Cary Clark682c58d2018-05-16 07:07:07 -04005847Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005848
Cary Clark682c58d2018-05-16 07:07:07 -04005849<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005850
5851### Parameters
5852
Cary Clark682c58d2018-05-16 07:07:07 -04005853<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5854 <td>character codes or glyph indices</td>
5855 </tr>
5856 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5857 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5858 </tr>
5859 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5860 <td>positions of each glyph</td>
5861 </tr>
5862 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5863 <td>lower and upper line parallel to the advance</td>
5864 </tr>
5865 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5866 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005867 </tr>
5868</table>
5869
5870### Return Value
5871
Cary Clarka523d2d2017-08-30 08:58:10 -04005872number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005873
5874### Example
5875
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00005876<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 -05005877</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005878
5879---
5880
Cary Clark682c58d2018-05-16 07:07:07 -04005881<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005882## getPosTextHIntercepts
5883
Cary Clark682c58d2018-05-16 07:07:07 -04005884<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5885int <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,
5886 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005887</pre>
5888
Cary Clark682c58d2018-05-16 07:07:07 -04005889Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5890<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5891The 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 -05005892the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005893Uses <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,
5894and <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.
5895Uses <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 +00005896
Cary Clark682c58d2018-05-16 07:07:07 -04005897Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005898
Cary Clark682c58d2018-05-16 07:07:07 -04005899<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005900
5901### Parameters
5902
Cary Clark682c58d2018-05-16 07:07:07 -04005903<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5904 <td>character codes or glyph indices</td>
5905 </tr>
5906 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5907 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5908 </tr>
5909 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5910 <td>positions of each glyph in x</td>
5911 </tr>
5912 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5913 <td>position of each glyph in y</td>
5914 </tr>
5915 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5916 <td>lower and upper line parallel to the advance</td>
5917 </tr>
5918 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5919 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005920 </tr>
5921</table>
5922
5923### Return Value
5924
5925number of intersections; may be zero
5926
5927### Example
5928
Cary Clark80247e52018-07-11 16:18:41 -04005929<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 -05005930</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005931
5932---
5933
Cary Clark682c58d2018-05-16 07:07:07 -04005934<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005935## getTextBlobIntercepts
5936
Cary Clark682c58d2018-05-16 07:07:07 -04005937<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5938int <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 -04005939</pre>
5940
Cary Clark682c58d2018-05-16 07:07:07 -04005941Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5942<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
5943The 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 -05005944the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005945Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5946and <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.
5947Uses 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 +00005948
Cary Clark682c58d2018-05-16 07:07:07 -04005949<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 -05005950
Cary Clark682c58d2018-05-16 07:07:07 -04005951Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005952
Cary Clark682c58d2018-05-16 07:07:07 -04005953<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005954
5955### Parameters
5956
Cary Clark682c58d2018-05-16 07:07:07 -04005957<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5958 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5959 </tr>
5960 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5961 <td>lower and upper line parallel to the advance</td>
5962 </tr>
5963 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5964 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005965 </tr>
5966</table>
5967
5968### Return Value
5969
5970number of intersections; may be zero
5971
5972### Example
5973
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005974<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005975
5976---
5977
Cary Clark682c58d2018-05-16 07:07:07 -04005978<a name='SkPaint_nothingToDraw'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005979## nothingToDraw
5980
Cary Clark682c58d2018-05-16 07:07:07 -04005981<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5982bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005983</pre>
5984
Cary Clark682c58d2018-05-16 07:07:07 -04005985Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
5986otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005987
Cary Clark224c7002018-06-27 11:00:21 -04005988Returns true if, for example, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> combined with <a href='SkColor_Reference#Alpha'>Color Alpha</a> computes a
Cary Clark682c58d2018-05-16 07:07:07 -04005989new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005990
5991### Return Value
5992
Cary Clark682c58d2018-05-16 07:07:07 -04005993true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005994
5995### Example
5996
skia-bookmaker525f9a92018-05-03 06:27:39 +00005997<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04005998
5999#### Example Output
6000
6001~~~~
6002initial nothing to draw: false
6003blend dst nothing to draw: true
6004blend src over nothing to draw: false
6005alpha 0 nothing to draw: true
6006~~~~
6007
6008</fiddle-embed></div>
6009
6010---
6011
Cary Clark682c58d2018-05-16 07:07:07 -04006012## <a name='Fast_Bounds'>Fast Bounds</a>
Cary Clark08895c42018-02-01 09:37:32 -05006013
Cary Clark682c58d2018-05-16 07:07:07 -04006014<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
6015<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04006016
Cary Clark682c58d2018-05-16 07:07:07 -04006017<a name='SkPaint_canComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006018## canComputeFastBounds
6019
Cary Clark682c58d2018-05-16 07:07:07 -04006020<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6021bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04006022</pre>
6023
Cary Clark682c58d2018-05-16 07:07:07 -04006024Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
6025to 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 -04006026always returns false.
6027
6028### Return Value
6029
Cary Clark682c58d2018-05-16 07:07:07 -04006030true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04006031
6032---
6033
Cary Clark682c58d2018-05-16 07:07:07 -04006034<a name='SkPaint_computeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006035## computeFastBounds
6036
Cary Clark682c58d2018-05-16 07:07:07 -04006037<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6038const <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 -04006039</pre>
6040
Cary Clark682c58d2018-05-16 07:07:07 -04006041Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04006042raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04006043effects 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 -04006044parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04006045for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04006046
Cary Clark682c58d2018-05-16 07:07:07 -04006047The 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
6048should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
6049use 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
6050<a href='SkRect_Reference#Rect'>Rect</a>.
6051
Cary Clark12799e12017-07-28 15:18:29 -04006052### Parameters
6053
Cary Clark682c58d2018-05-16 07:07:07 -04006054<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6055 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6056 </tr>
6057 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6058 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04006059 </tr>
6060</table>
6061
6062### Return Value
6063
6064fast computed bounds
6065
6066---
6067
Cary Clark682c58d2018-05-16 07:07:07 -04006068<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006069## computeFastStrokeBounds
6070
Cary Clark682c58d2018-05-16 07:07:07 -04006071<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6072const <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 -04006073</pre>
6074
6075### Parameters
6076
Cary Clark682c58d2018-05-16 07:07:07 -04006077<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
6078 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6079 </tr>
6080 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
6081 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04006082 </tr>
6083</table>
6084
6085### Return Value
6086
6087fast computed bounds
6088
6089---
6090
Cary Clark682c58d2018-05-16 07:07:07 -04006091<a name='SkPaint_doComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006092## doComputeFastBounds
6093
Cary Clark682c58d2018-05-16 07:07:07 -04006094<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6095const <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 -04006096</pre>
6097
Cary Clark682c58d2018-05-16 07:07:07 -04006098Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
6099account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
6100altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04006101
6102### Parameters
6103
Cary Clark682c58d2018-05-16 07:07:07 -04006104<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6105 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6106 </tr>
6107 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6108 <td>computed bounds of geometry</td>
6109 </tr>
6110 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
6111 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04006112 </tr>
6113</table>
6114
6115### Return Value
6116
6117fast computed bounds
6118
6119---
6120
Cary Clark682c58d2018-05-16 07:07:07 -04006121## <a name='Utility'>Utility</a>
Cary Clark78de7512018-02-07 07:27:09 -05006122
Cary Clark78de7512018-02-07 07:27:09 -05006123
Cary Clark682c58d2018-05-16 07:07:07 -04006124<table style='border-collapse: collapse; width: 62.5em'>
6125 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
6126<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
6127 <tr style='background-color: #f0f0f0; '>
6128 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
6129 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
6130 </tr>
6131 <tr>
6132 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
6133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
6134 </tr>
6135 <tr style='background-color: #f0f0f0; '>
6136 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
6137 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
6138 </tr>
6139 <tr>
6140 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
6141 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
6142 </tr>
6143 <tr style='background-color: #f0f0f0; '>
6144 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
6145 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
6146 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04006147</table>
Cary Clark224c7002018-06-27 11:00:21 -04006148