blob: 5e512bff1e2ecca7d63a143a8a4f90f14634d328 [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; '>
Cary Clark434b80f2018-09-04 11:13:56 -0400558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColor4f'>getColor4f</a></td>
559 <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>
560 </tr>
561 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400562 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColorFilter'>getColorFilter</a></td>
563 <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>
564 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400565 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400566 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getDrawLooper'>getDrawLooper</a></td>
567 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
568 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400569 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400570 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFillPath'>getFillPath</a></td>
571 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill path equivalent to stroke</td>
572 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400573 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400574 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFilterQuality'>getFilterQuality</a></td>
575 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, image filtering level</td>
576 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400577 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400578 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFlags'>getFlags</a></td>
579 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Flags'>Flags</a> stored in a bit field</td>
580 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400581 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400582 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontBounds'>getFontBounds</a></td>
583 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns union all glyph bounds</td>
584 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400585 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400586 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontMetrics'>getFontMetrics</a></td>
587 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a> metrics scaled by text size</td>
588 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400589 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400590 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontSpacing'>getFontSpacing</a></td>
591 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns recommended spacing between lines</td>
592 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400593 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400594 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHash'>getHash</a></td>
595 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns a shallow hash for equality checks</td>
596 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400597 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400598 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHinting'>getHinting</a></td>
599 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
600 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400601 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400602 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getImageFilter'>getImageFilter</a></td>
603 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
604 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400605 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400606 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getMaskFilter'>getMaskFilter</a></td>
607 <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>
608 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400609 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400610 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPathEffect'>getPathEffect</a></td>
611 <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>
612 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400613 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400614 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a></td>
615 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect horizontally positioned text; underlines</td>
616 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400617 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400618 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a></td>
619 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect positioned text; underlines</td>
620 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400621 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400622 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextPath'>getPosTextPath</a></td>
623 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to positioned text</td>
624 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400625 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400626 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getShader'>getShader</a></td>
627 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
628 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400629 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400630 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeCap'>getStrokeCap</a></td>
631 <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>
632 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400633 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400634 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a></td>
635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
636 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400637 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400638 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a></td>
639 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
640 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400641 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400642 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a></td>
643 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns thickness of the stroke</td>
644 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400645 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400646 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStyle'>getStyle</a></td>
647 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
648 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400649 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400650 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextAlign'>getTextAlign</a></td>
651 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
652 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400653 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400654 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a></td>
Cary Clarkd2ca79c2018-08-10 13:09:13 -0400655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect <a href='SkTextBlob_Reference#Text_Blob'>Text Blob</a>; underlines</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400656 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400657 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400658 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextEncoding'>getTextEncoding</a></td>
659 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns character or glyph encoded size</td>
660 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400661 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400662 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a></td>
663 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect text; underlines</td>
664 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400665 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextPath'>getTextPath</a></td>
667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to text</td>
668 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400669 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextScaleX'>getTextScaleX</a></td>
671 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal scale; condensed text</td>
672 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400673 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400674 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSize'>getTextSize</a></td>
675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text size in points</td>
676 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400677 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSkewX'>getTextSkewX</a></td>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal skew; oblique text</td>
680 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400681 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400682 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextWidths'>getTextWidths</a></td>
683 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance and bounds for each glyph in text</td>
684 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400685 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400686 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTypeface'>getTypeface</a></td>
687 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a>, font description</td>
688 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400689 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400690 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
692 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400693 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400694 <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 -0400695 <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 -0400696 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400697 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400698 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAutohinted'>isAutohinted</a></td>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Glyph'>Glyphs</a> are always hinted</td>
700 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400701 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400702 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isDither'>isDither</a></td>
703 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Dither'>Dither</a> is set</td>
704 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400705 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400706 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a></td>
707 <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>
708 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400709 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400710 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a></td>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Fake_Bold'>Fake Bold</a> is set</td>
712 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400713 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400714 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a></td>
715 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#LCD_Text'>LCD Text</a> is set</td>
716 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400717 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400718 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLinearText'>isLinearText</a></td>
719 <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>
720 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400721 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400722 <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 -0400723 <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 -0400724 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400725 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400726 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSubpixelText'>isSubpixelText</a></td>
727 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Subpixel_Text'>Subpixel Text</a> is set</td>
728 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400729 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400730 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isVerticalText'>isVerticalText</a></td>
731 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Vertical_Text'>Vertical Text</a> is set</td>
732 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400733 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400734 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_measureText'>measureText</a></td>
735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance width and bounds of text</td>
736 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400737 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400738 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
739 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
740 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400741 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400742 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refColorFilter'>refColorFilter</a></td>
743 <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>
744 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400745 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400746 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refDrawLooper'>refDrawLooper</a></td>
747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
748 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400749 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400750 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refImageFilter'>refImageFilter</a></td>
751 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
752 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400753 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400754 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refMaskFilter'>refMaskFilter</a></td>
755 <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>
756 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400757 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400758 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refPathEffect'>refPathEffect</a></td>
759 <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>
760 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400761 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400762 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refShader'>refShader</a></td>
763 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
764 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400765 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400766 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refTypeface'>refTypeface</a></td>
767 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Typeface'>Typeface</a>, font description</td>
768 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400769 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400770 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_reset'>reset</a></td>
771 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to default values</td>
772 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400773 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400774 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setARGB'>setARGB</a></td>
775 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets color by component</td>
776 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400777 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400778 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAlpha'>setAlpha</a></td>
779 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
780 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400781 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400782 <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 -0400783 <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 -0400784 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400785 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400786 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAutohinted'>setAutohinted</a></td>
787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Glyph'>Glyphs</a> to always be hinted</td>
788 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400789 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400790 <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 -0400791 <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 -0400792 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400793 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400794 <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 -0400795 <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 -0400796 </tr>
Cary Clark434b80f2018-09-04 11:13:56 -0400797 <tr style='background-color: #f0f0f0; '>
798 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColor4f'>setColor4f</a></td>
799 <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>
800 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400801 <tr>
802 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColorFilter'>setColorFilter</a></td>
803 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Color_Filter'>Color Filter</a>, alters color</td>
804 </tr>
805 <tr style='background-color: #f0f0f0; '>
806 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDither'>setDither</a></td>
807 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Dither'>Dither</a></td>
808 </tr>
809 <tr>
810 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDrawLooper'>setDrawLooper</a></td>
811 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
812 </tr>
813 <tr style='background-color: #f0f0f0; '>
814 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a></td>
815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
816 </tr>
817 <tr>
818 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a></td>
819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Fake_Bold'>Fake Bold</a></td>
820 </tr>
821 <tr style='background-color: #f0f0f0; '>
822 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFilterQuality'>setFilterQuality</a></td>
823 <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>
824 </tr>
825 <tr>
826 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFlags'>setFlags</a></td>
827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets multiple <a href='#SkPaint_Flags'>Flags</a> in a bit field</td>
828 </tr>
829 <tr style='background-color: #f0f0f0; '>
830 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setHinting'>setHinting</a></td>
831 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
832 </tr>
833 <tr>
834 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setImageFilter'>setImageFilter</a></td>
835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
836 </tr>
837 <tr style='background-color: #f0f0f0; '>
838 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a></td>
839 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#LCD_Text'>LCD Text</a></td>
840 </tr>
841 <tr>
842 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLinearText'>setLinearText</a></td>
843 <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>
844 </tr>
845 <tr style='background-color: #f0f0f0; '>
846 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setMaskFilter'>setMaskFilter</a></td>
847 <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>
848 </tr>
849 <tr>
850 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setPathEffect'>setPathEffect</a></td>
851 <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>
852 </tr>
853 <tr style='background-color: #f0f0f0; '>
854 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setShader'>setShader</a></td>
855 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
856 </tr>
857 <tr>
858 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeCap'>setStrokeCap</a></td>
859 <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>
860 </tr>
861 <tr style='background-color: #f0f0f0; '>
862 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a></td>
863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
864 </tr>
865 <tr>
866 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a></td>
867 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
868 </tr>
869 <tr style='background-color: #f0f0f0; '>
870 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a></td>
871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets thickness of the stroke</td>
872 </tr>
873 <tr>
874 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStyle'>setStyle</a></td>
875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
876 </tr>
877 <tr style='background-color: #f0f0f0; '>
878 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setSubpixelText'>setSubpixelText</a></td>
879 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Subpixel_Text'>Subpixel Text</a></td>
880 </tr>
881 <tr>
882 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextAlign'>setTextAlign</a></td>
883 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
884 </tr>
885 <tr style='background-color: #f0f0f0; '>
886 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextEncoding'>setTextEncoding</a></td>
887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets character or glyph encoded size</td>
888 </tr>
889 <tr>
890 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextScaleX'>setTextScaleX</a></td>
891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal scale; condensed 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_setTextSize'>setTextSize</a></td>
895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets text size in points</td>
896 </tr>
897 <tr>
898 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSkewX'>setTextSkewX</a></td>
899 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal skew; oblique text</td>
900 </tr>
901 <tr style='background-color: #f0f0f0; '>
902 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTypeface'>setTypeface</a></td>
903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Typeface'>Typeface</a>, font description</td>
904 </tr>
905 <tr>
906 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setVerticalText'>setVerticalText</a></td>
907 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Vertical_Text'>Vertical Text</a></td>
908 </tr>
909 <tr style='background-color: #f0f0f0; '>
910 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
911 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
912 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400913</table>
914
Cary Clark682c58d2018-05-16 07:07:07 -0400915## <a name='Initializers'>Initializers</a>
916
917<a name='SkPaint_empty_constructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400918## SkPaint
919
Cary Clark682c58d2018-05-16 07:07:07 -0400920<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
921<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400922</pre>
923
Cary Clark682c58d2018-05-16 07:07:07 -0400924Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400925
926| attribute | default value |
927| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400928| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark224c7002018-06-27 11:00:21 -0400929| <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 -0400930| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
931| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
932| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
933| <a href='#Dither'>Dither</a> | false |
934| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
935| <a href='#Fake_Bold'>Fake Bold</a> | false |
936| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
937| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
938| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
939| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
940| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
941| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
942| <a href='#LCD_Text'>LCD Text</a> | false |
943| <a href='#Linear_Text'>Linear Text</a> | false |
944| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
945| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
946| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
947| <a href='undocumented#Shader'>Shader</a> | nullptr |
948| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
949| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
950| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
951| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
952| <a href='#Text_Size'>Text Size</a> | 12 |
953| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
954| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
955| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
956| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
957| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
958| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
959| <a href='#Vertical_Text'>Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400960
961The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500962paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400963build system.
964
965### Return Value
966
Cary Clark682c58d2018-05-16 07:07:07 -0400967default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400968
969### Example
970
971<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
972
973---
974
Cary Clark682c58d2018-05-16 07:07:07 -0400975<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400976## SkPaint
977
Cary Clark682c58d2018-05-16 07:07:07 -0400978<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
979<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400980</pre>
981
Cary Clark682c58d2018-05-16 07:07:07 -0400982Makes 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>,
983<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
984between 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 -0400985their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400986
Cary Clark682c58d2018-05-16 07:07:07 -0400987The 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>,
988<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
989This 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 -0400990
991### Parameters
992
Cary Clark682c58d2018-05-16 07:07:07 -0400993<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
994 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400995 </tr>
996</table>
997
998### Return Value
999
Cary Clark682c58d2018-05-16 07:07:07 -04001000shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001001
1002### Example
1003
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001004<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -04001005
1006#### Example Output
1007
1008~~~~
1009SK_ColorRED == paint1.getColor()
1010SK_ColorBLUE == paint2.getColor()
1011~~~~
1012
1013</fiddle-embed></div>
1014
1015---
1016
Cary Clark682c58d2018-05-16 07:07:07 -04001017<a name='SkPaint_move_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001018## SkPaint
1019
Cary Clark682c58d2018-05-16 07:07:07 -04001020<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1021<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -04001022</pre>
1023
Cary Clarkd0530ba2017-09-14 11:25:39 -04001024Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -04001025of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001026
Cary Clark682c58d2018-05-16 07:07:07 -04001027After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001028
1029### Parameters
1030
Cary Clark682c58d2018-05-16 07:07:07 -04001031<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
1032 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001033 </tr>
1034</table>
1035
1036### Return Value
1037
Cary Clark682c58d2018-05-16 07:07:07 -04001038content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001039
1040### Example
1041
Cary Clark83647062018-07-18 16:21:51 -04001042<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -04001043
1044#### Example Output
1045
1046~~~~
1047path effect unique: true
1048~~~~
1049
1050</fiddle-embed></div>
1051
1052---
1053
Cary Clark682c58d2018-05-16 07:07:07 -04001054<a name='SkPaint_reset'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001055## reset
1056
Cary Clark682c58d2018-05-16 07:07:07 -04001057<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1058void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001059</pre>
1060
Cary Clark682c58d2018-05-16 07:07:07 -04001061Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
1062<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001063
1064### Example
1065
1066<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
1067
1068#### Example Output
1069
1070~~~~
1071paint1 == paint2
1072~~~~
1073
1074</fiddle-embed></div>
1075
1076---
1077
Cary Clark682c58d2018-05-16 07:07:07 -04001078<a name='SkPaint_destructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001079## ~SkPaint
1080
Cary Clark682c58d2018-05-16 07:07:07 -04001081<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1082<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001083</pre>
1084
Cary Clark682c58d2018-05-16 07:07:07 -04001085Decreases <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>,
1086<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
1087objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -04001088
1089---
1090
Cary Clark682c58d2018-05-16 07:07:07 -04001091## <a name='Management'>Management</a>
Cary Clark12799e12017-07-28 15:18:29 -04001092
Cary Clark682c58d2018-05-16 07:07:07 -04001093<a name='SkPaint_copy_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001094## operator=
1095
Cary Clark682c58d2018-05-16 07:07:07 -04001096<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1097<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001098</pre>
1099
Cary Clark682c58d2018-05-16 07:07:07 -04001100Makes 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>,
1101<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
1102between 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 -04001103prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -04001104resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
1105are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -04001106
1107### Parameters
1108
Cary Clark682c58d2018-05-16 07:07:07 -04001109<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
1110 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -04001111 </tr>
1112</table>
1113
1114### Return Value
1115
Cary Clark682c58d2018-05-16 07:07:07 -04001116content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001117
1118### Example
1119
1120<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
1121
1122#### Example Output
1123
1124~~~~
1125SK_ColorRED == paint1.getColor()
1126SK_ColorRED == paint2.getColor()
1127~~~~
1128
1129</fiddle-embed></div>
1130
1131---
1132
Cary Clark682c58d2018-05-16 07:07:07 -04001133<a name='SkPaint_move_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001134## operator=
1135
Cary Clark682c58d2018-05-16 07:07:07 -04001136<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1137<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001138</pre>
1139
Cary Clark682c58d2018-05-16 07:07:07 -04001140Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
1141of 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 -04001142prior destination are decreased by one; those objects are deleted if the resulting count
1143is zero.
Cary Clark12799e12017-07-28 15:18:29 -04001144
Cary Clark682c58d2018-05-16 07:07:07 -04001145After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001146
1147### Parameters
1148
Cary Clark682c58d2018-05-16 07:07:07 -04001149<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
1150 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001151 </tr>
1152</table>
1153
1154### Return Value
1155
Cary Clark682c58d2018-05-16 07:07:07 -04001156content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001157
1158### Example
1159
Ravi Mistry874e22b2018-07-19 03:49:13 +00001160<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -04001161
1162#### Example Output
1163
1164~~~~
1165SK_ColorRED == paint2.getColor()
1166~~~~
1167
1168</fiddle-embed></div>
1169
1170---
1171
Cary Clark682c58d2018-05-16 07:07:07 -04001172<a name='SkPaint_equal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001173## operator==
1174
Cary Clark682c58d2018-05-16 07:07:07 -04001175<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1176bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001177</pre>
1178
Cary Clark682c58d2018-05-16 07:07:07 -04001179Compares <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
1180if <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>,
1181<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 -04001182
1183### Parameters
1184
Cary Clark682c58d2018-05-16 07:07:07 -04001185<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
1186 <td><a href='#Paint'>Paint</a> to compare</td>
1187 </tr>
1188 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
1189 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001190 </tr>
1191</table>
1192
1193### Return Value
1194
Cary Clark682c58d2018-05-16 07:07:07 -04001195true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001196
1197### Example
1198
1199<div><fiddle-embed name="7481a948e34672720337a631830586dd">
1200
1201#### Example Output
1202
1203~~~~
1204paint1 == paint2
1205paint1 != paint2
1206~~~~
1207
1208</fiddle-embed></div>
1209
Cary Clark06c20f32018-03-20 15:53:27 -04001210### See Also
1211
Cary Clark682c58d2018-05-16 07:07:07 -04001212<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001213
Cary Clark12799e12017-07-28 15:18:29 -04001214---
1215
Cary Clark682c58d2018-05-16 07:07:07 -04001216<a name='SkPaint_notequal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001217## operator!=
1218
Cary Clark682c58d2018-05-16 07:07:07 -04001219<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1220bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001221</pre>
1222
Cary Clark682c58d2018-05-16 07:07:07 -04001223Compares <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
1224if <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>,
1225<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 -04001226
1227### Parameters
1228
Cary Clark682c58d2018-05-16 07:07:07 -04001229<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
1230 <td><a href='#Paint'>Paint</a> to compare</td>
1231 </tr>
1232 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
1233 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001234 </tr>
1235</table>
1236
1237### Return Value
1238
Cary Clark682c58d2018-05-16 07:07:07 -04001239true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001240
1241### Example
1242
skia-bookmakera717ca92018-07-08 05:32:09 +00001243<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -04001244
1245#### Example Output
1246
1247~~~~
1248paint1 == paint2
1249paint1 == paint2
1250~~~~
1251
1252</fiddle-embed></div>
1253
Cary Clark06c20f32018-03-20 15:53:27 -04001254### See Also
1255
Cary Clark682c58d2018-05-16 07:07:07 -04001256<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001257
Cary Clark12799e12017-07-28 15:18:29 -04001258---
1259
Cary Clark682c58d2018-05-16 07:07:07 -04001260<a name='SkPaint_getHash'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001261## getHash
1262
Cary Clark682c58d2018-05-16 07:07:07 -04001263<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1264uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001265</pre>
1266
Cary Clark682c58d2018-05-16 07:07:07 -04001267Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001268Identical hashes guarantee that the paints are
1269equivalent, but differing hashes do not guarantee that the paints have differing
1270contents.
1271
Cary Clark682c58d2018-05-16 07:07:07 -04001272If <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 -04001273their hashes are also equal.
1274
1275The hash returned is platform and implementation specific.
1276
1277### Return Value
1278
1279a shallow hash
1280
1281### Example
1282
Cary Clark83647062018-07-18 16:21:51 -04001283<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -04001284
1285#### Example Output
1286
1287~~~~
1288paint1 == paint2
1289paint1.getHash() == paint2.getHash()
1290~~~~
1291
1292</fiddle-embed></div>
1293
1294---
1295
Cary Clark682c58d2018-05-16 07:07:07 -04001296## <a name='Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001297
Cary Clark682c58d2018-05-16 07:07:07 -04001298## <a name='SkPaint_Hinting'>Enum SkPaint::Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001299
Cary Clarka560c472017-11-27 10:44:06 -05001300<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001301 enum <a href='#SkPaint_Hinting'>Hinting</a> {
1302 <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> = 0,
1303 <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> = 1,
1304 <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> = 2,
1305 <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -04001306 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001307</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001308
Cary Clark682c58d2018-05-16 07:07:07 -04001309<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
1310look 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 -04001311muted effect or no effect at all depending on the platform.
1312
Cary Clark7cfcbca2018-01-04 16:11:51 -05001313The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -04001314as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001315
1316### Constants
1317
Cary Clark682c58d2018-05-16 07:07:07 -04001318<table style='border-collapse: collapse; width: 62.5em'>
1319 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1320<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1321<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1322 <tr style='background-color: #f0f0f0; '>
1323 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
1324 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1325 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1326Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001327With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
1328bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -04001329outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -05001330to 26.6 fractional pixels.
1331</td>
Cary Clark12799e12017-07-28 15:18:29 -04001332 </tr>
1333 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001334 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
1335 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1336 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1337Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001338With FreeType, this is equivalent in spirit to the
1339FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -04001340lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -04001341Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05001342</td>
Cary Clark12799e12017-07-28 15:18:29 -04001343 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001344 <tr style='background-color: #f0f0f0; '>
1345 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
1346 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1348Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001349With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
1350choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -05001351gray-level rendering.
1352</td>
Cary Clark12799e12017-07-28 15:18:29 -04001353 </tr>
1354 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001355 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
1356 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1357 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04001358Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -04001359FT_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 -05001360FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
1361horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -05001362variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
1363</td>
Cary Clark12799e12017-07-28 15:18:29 -04001364 </tr>
1365</table>
1366
Cary Clark682c58d2018-05-16 07:07:07 -04001367On <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 -04001368to 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 -04001369Normal 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 -04001370the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -04001371
Cary Clark682c58d2018-05-16 07:07:07 -04001372On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -04001373
Cary Clark682c58d2018-05-16 07:07:07 -04001374<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1375Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04001376
Cary Clark682c58d2018-05-16 07:07:07 -04001377<a name='SkPaint_getHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001378## getHinting
1379
Cary Clark682c58d2018-05-16 07:07:07 -04001380<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1381<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001382</pre>
1383
1384Returns level of glyph outline adjustment.
1385
1386### Return Value
1387
Cary Clark682c58d2018-05-16 07:07:07 -04001388one 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 -04001389
1390### Example
1391
Cary Clark83647062018-07-18 16:21:51 -04001392<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
Cary Clark12799e12017-07-28 15:18:29 -04001393
1394#### Example Output
1395
1396~~~~
1397SkPaint::kNormal_Hinting == paint.getHinting()
1398~~~~
1399
1400</fiddle-embed></div>
1401
1402---
1403
Cary Clark682c58d2018-05-16 07:07:07 -04001404<a name='SkPaint_setHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001405## setHinting
1406
Cary Clark682c58d2018-05-16 07:07:07 -04001407<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1408void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -04001409</pre>
1410
1411Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -04001412Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001413
Cary Clark682c58d2018-05-16 07:07:07 -04001414| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -04001415| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -04001416| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
1417| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
1418| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
1419| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -04001420
1421### Parameters
1422
Cary Clark682c58d2018-05-16 07:07:07 -04001423<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
1424 <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 -04001425 </tr>
1426</table>
1427
1428### Example
1429
1430<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
1431
1432#### Example Output
1433
1434~~~~
1435paint1 == paint2
1436~~~~
1437
1438</fiddle-embed></div>
1439
1440---
1441
Cary Clark682c58d2018-05-16 07:07:07 -04001442## <a name='Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001443
Cary Clark682c58d2018-05-16 07:07:07 -04001444## <a name='SkPaint_Flags'>Enum SkPaint::Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001445
Cary Clarka560c472017-11-27 10:44:06 -05001446<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001447 enum <a href='#SkPaint_Flags'>Flags</a> {
1448 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> = 0x01,
1449 <a href='#SkPaint_kDither_Flag'>kDither Flag</a> = 0x04,
1450 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> = 0x20,
1451 <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> = 0x40,
1452 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> = 0x80,
1453 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> = 0x200,
1454 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> = 0x400,
1455 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> = 0x800,
1456 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -04001457
Cary Clark682c58d2018-05-16 07:07:07 -04001458 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -04001459 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001460
Cary Clark12799e12017-07-28 15:18:29 -04001461</pre>
1462
Cary Clark682c58d2018-05-16 07:07:07 -04001463The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
1464The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
1465with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
1466All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -04001467multiple settings at once.
1468
1469### Constants
1470
Cary Clark682c58d2018-05-16 07:07:07 -04001471<table style='border-collapse: collapse; width: 62.5em'>
1472 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1473<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1474<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1475 <tr style='background-color: #f0f0f0; '>
1476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
1477 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
1478 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -04001479mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -04001480 </tr>
1481 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001482 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
1483 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
1484 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1485mask for setting Dither</td>
1486 </tr>
1487 <tr style='background-color: #f0f0f0; '>
1488 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
1489 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
1490 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1491mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -04001492 </tr>
1493 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001494 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
1495 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
1496 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1497mask for setting Linear_Text</td>
1498 </tr>
1499 <tr style='background-color: #f0f0f0; '>
1500 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
1501 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
1502 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1503mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001504 </tr>
1505 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
1507 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
1508 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1509mask for setting LCD_Text</td>
1510 </tr>
1511 <tr style='background-color: #f0f0f0; '>
1512 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
1513 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
1514 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1515mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -04001516 </tr>
1517 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001518 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
1519 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
1520 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1521mask for setting Automatic_Hinting</td>
1522 </tr>
1523 <tr style='background-color: #f0f0f0; '>
1524 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kVerticalText_Flag'><code>SkPaint::kVerticalText_Flag</code></a></td>
1525 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x1000</td>
1526 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1527mask for setting Vertical_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001528 </tr>
1529 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001530 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
1531 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
1532 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1533mask 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 -04001534 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001535<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
1536</table>
Cary Clark12799e12017-07-28 15:18:29 -04001537
Cary Clark682c58d2018-05-16 07:07:07 -04001538## <a name='SkPaint_ReserveFlags'>Enum SkPaint::ReserveFlags</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001539
Cary Clark682c58d2018-05-16 07:07:07 -04001540Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04001541
Cary Clark4855f782018-02-06 09:41:53 -05001542soonOnly valid for Android framework.
1543
Cary Clarka560c472017-11-27 10:44:06 -05001544<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001545 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
1546 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText ReserveFlag</a> = 0x08,
1547 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -04001548 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001549</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001550
1551### Constants
1552
Cary Clark682c58d2018-05-16 07:07:07 -04001553<table style='border-collapse: collapse; width: 62.5em'>
1554 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1555<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1556<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1557 <tr style='background-color: #f0f0f0; '>
1558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
1559 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</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>
1565 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001566 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
1567 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
1568 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1569Deprecated.
1570
1571soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001572 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001573</table>
Cary Clark4855f782018-02-06 09:41:53 -05001574
Cary Clark682c58d2018-05-16 07:07:07 -04001575<a name='SkPaint_getFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001576## getFlags
1577
Cary Clark682c58d2018-05-16 07:07:07 -04001578<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1579uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001580</pre>
1581
Cary Clark682c58d2018-05-16 07:07:07 -04001582Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
1583bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -04001584
1585### Return Value
1586
Cary Clark682c58d2018-05-16 07:07:07 -04001587zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001588
1589### Example
1590
1591<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
1592
1593#### Example Output
1594
1595~~~~
1596(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
1597~~~~
1598
1599</fiddle-embed></div>
1600
1601---
1602
Cary Clark682c58d2018-05-16 07:07:07 -04001603<a name='SkPaint_setFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001604## setFlags
1605
Cary Clark682c58d2018-05-16 07:07:07 -04001606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1607void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -04001608</pre>
1609
Cary Clark682c58d2018-05-16 07:07:07 -04001610Replaces <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.
1611All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -04001612
1613### Parameters
1614
Cary Clark682c58d2018-05-16 07:07:07 -04001615<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
1616 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001617 </tr>
1618</table>
1619
1620### Example
1621
1622<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
1623
1624#### Example Output
1625
1626~~~~
1627paint.isAntiAlias()
1628paint.isDither()
1629~~~~
1630
1631</fiddle-embed></div>
1632
1633---
1634
Cary Clarkffb3d682018-05-17 12:17:28 -04001635## <a name='Anti_Alias'>Anti Alias</a>
Cary Clark08895c42018-02-01 09:37:32 -05001636
Cary Clarkffb3d682018-05-17 12:17:28 -04001637<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -04001638If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
1639If <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 -04001640
Cary Clark682c58d2018-05-16 07:07:07 -04001641The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -04001642passing through the pixel center may, but is not required to, draw the pixel.
1643
Cary Clark682c58d2018-05-16 07:07:07 -04001644<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
1645active <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 -04001646
Cary Clarkffb3d682018-05-17 12:17:28 -04001647A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
1648<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 -04001649<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001650
Cary Clarkffb3d682018-05-17 12:17:28 -04001651The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -04001652
Cary Clarkffb3d682018-05-17 12:17:28 -04001653<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
1654<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 -04001655at compile time.
1656
1657### Example
1658
1659<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
1660A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -04001661The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
1662<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001663</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001664
Cary Clark682c58d2018-05-16 07:07:07 -04001665<a name='SkPaint_isAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001666## isAntiAlias
1667
Cary Clark682c58d2018-05-16 07:07:07 -04001668<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1669bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001670</pre>
1671
Cary Clark80247e52018-07-11 16:18:41 -04001672Returns 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 -04001673
Cary Clark682c58d2018-05-16 07:07:07 -04001674Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001675
1676### Return Value
1677
Cary Clark682c58d2018-05-16 07:07:07 -04001678<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001679
1680### Example
1681
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001682<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -04001683
1684#### Example Output
1685
1686~~~~
1687paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1688paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1689~~~~
1690
1691</fiddle-embed></div>
1692
1693---
1694
Cary Clark682c58d2018-05-16 07:07:07 -04001695<a name='SkPaint_setAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001696## setAntiAlias
1697
Cary Clark682c58d2018-05-16 07:07:07 -04001698<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1699void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001700</pre>
1701
Cary Clark682c58d2018-05-16 07:07:07 -04001702Requests, 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 -04001703partial transparency.
1704
Cary Clark682c58d2018-05-16 07:07:07 -04001705Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1706Clears <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 -04001707
1708### Parameters
1709
Cary Clark682c58d2018-05-16 07:07:07 -04001710<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1711 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001712 </tr>
1713</table>
1714
1715### Example
1716
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001717<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -04001718
1719#### Example Output
1720
1721~~~~
1722paint1 == paint2
1723~~~~
1724
1725</fiddle-embed></div>
1726
1727---
1728
Cary Clark682c58d2018-05-16 07:07:07 -04001729## <a name='Dither'>Dither</a>
Cary Clark08895c42018-02-01 09:37:32 -05001730
Cary Clark682c58d2018-05-16 07:07:07 -04001731<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001732This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001733Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1734and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1735and 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 -04001736
1737Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001738<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>.
1739<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
1740<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 -04001741
Cary Clark682c58d2018-05-16 07:07:07 -04001742<a href='#Dither'>Dither</a> is disabled by default.
1743<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 -04001744at compile time.
1745
Cary Clark682c58d2018-05-16 07:07:07 -04001746Some 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 -04001747
1748### Example
1749
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001750<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 -05001751alternating nearby colors from pixel to pixel.
1752</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001753
1754### Example
1755
Cary Clarka619d452018-07-16 08:12:01 -04001756<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark224c7002018-06-27 11:00:21 -04001757Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001758dither, making it easier to see.
1759</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001760
Cary Clark682c58d2018-05-16 07:07:07 -04001761<a name='SkPaint_isDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001762## isDither
1763
Cary Clark682c58d2018-05-16 07:07:07 -04001764<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1765bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001766</pre>
1767
Cary Clark80247e52018-07-11 16:18:41 -04001768Returns true if color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001769
Cary Clark682c58d2018-05-16 07:07:07 -04001770Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001771
1772### Return Value
1773
Cary Clark682c58d2018-05-16 07:07:07 -04001774<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001775
1776### Example
1777
1778<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1779
1780#### Example Output
1781
1782~~~~
1783paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1784paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1785~~~~
1786
1787</fiddle-embed></div>
1788
1789---
1790
Cary Clark682c58d2018-05-16 07:07:07 -04001791<a name='SkPaint_setDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001792## setDither
1793
Cary Clark682c58d2018-05-16 07:07:07 -04001794<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1795void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001796</pre>
1797
1798Requests, but does not require, to distribute color error.
1799
Cary Clark682c58d2018-05-16 07:07:07 -04001800Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1801Clears <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 -04001802
1803### Parameters
1804
Cary Clark682c58d2018-05-16 07:07:07 -04001805<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1806 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001807 </tr>
1808</table>
1809
1810### Example
1811
1812<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1813
1814#### Example Output
1815
1816~~~~
1817paint1 == paint2
1818~~~~
1819
1820</fiddle-embed></div>
1821
1822### See Also
1823
Cary Clark682c58d2018-05-16 07:07:07 -04001824<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001825
1826---
1827
1828### See Also
1829
Cary Clarkffb3d682018-05-17 12:17:28 -04001830Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001831
Cary Clark682c58d2018-05-16 07:07:07 -04001832## <a name='Device_Text'>Device Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05001833
Cary Clark682c58d2018-05-16 07:07:07 -04001834<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 -04001835
Cary Clarkffb3d682018-05-17 12:17:28 -04001836When 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 -04001837create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001838on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001839<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 -04001840the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001841
Cary Clark682c58d2018-05-16 07:07:07 -04001842<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 -04001843As the opaqueness
1844of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1845
1846Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001847<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1848<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
1849<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 -04001850
1851### Example
1852
Cary Clark682c58d2018-05-16 07:07:07 -04001853<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>.
1854When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1855When <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 -05001856</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001857
Cary Clark682c58d2018-05-16 07:07:07 -04001858## <a name='Linear_Text'>Linear Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001859
Cary Clark682c58d2018-05-16 07:07:07 -04001860<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>.
1861If <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>.
1862If <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 -04001863
Cary Clark682c58d2018-05-16 07:07:07 -04001864<a name='SkPaint_isLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001865## isLinearText
1866
Cary Clark682c58d2018-05-16 07:07:07 -04001867<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1868bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001869</pre>
1870
Cary Clark80247e52018-07-11 16:18:41 -04001871Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001872
Cary Clark682c58d2018-05-16 07:07:07 -04001873Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001874
1875### Return Value
1876
Cary Clark682c58d2018-05-16 07:07:07 -04001877<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001878
1879### Example
1880
1881<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1882
1883### See Also
1884
Cary Clark682c58d2018-05-16 07:07:07 -04001885<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001886
1887---
1888
Cary Clark682c58d2018-05-16 07:07:07 -04001889<a name='SkPaint_setLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001890## setLinearText
1891
Cary Clark682c58d2018-05-16 07:07:07 -04001892<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1893void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001894</pre>
1895
Cary Clark80247e52018-07-11 16:18:41 -04001896Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark682c58d2018-05-16 07:07:07 -04001897By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001898
Cary Clark682c58d2018-05-16 07:07:07 -04001899Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1900Clears <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 -04001901
1902### Parameters
1903
Cary Clark682c58d2018-05-16 07:07:07 -04001904<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1905 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001906 </tr>
1907</table>
1908
1909### Example
1910
Cary Clark83647062018-07-18 16:21:51 -04001911<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001912
1913### See Also
1914
Cary Clark682c58d2018-05-16 07:07:07 -04001915<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001916
1917---
1918
Cary Clark682c58d2018-05-16 07:07:07 -04001919## <a name='Subpixel_Text'>Subpixel Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001920
Cary Clark682c58d2018-05-16 07:07:07 -04001921<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 -04001922As the opaqueness
1923of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1924
Cary Clark682c58d2018-05-16 07:07:07 -04001925<a name='SkPaint_isSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001926## isSubpixelText
1927
Cary Clark682c58d2018-05-16 07:07:07 -04001928<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1929bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001930</pre>
1931
Cary Clark80247e52018-07-11 16:18:41 -04001932Returns 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 -04001933
Cary Clark682c58d2018-05-16 07:07:07 -04001934Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001935
1936### Return Value
1937
Cary Clark682c58d2018-05-16 07:07:07 -04001938<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001939
1940### Example
1941
1942<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1943
1944#### Example Output
1945
1946~~~~
1947paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1948paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1949~~~~
1950
1951</fiddle-embed></div>
1952
1953---
1954
Cary Clark682c58d2018-05-16 07:07:07 -04001955<a name='SkPaint_setSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001956## setSubpixelText
1957
Cary Clark682c58d2018-05-16 07:07:07 -04001958<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1959void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001960</pre>
1961
Cary Clark682c58d2018-05-16 07:07:07 -04001962Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001963
Cary Clark682c58d2018-05-16 07:07:07 -04001964Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1965Clears <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 -04001966
1967### Parameters
1968
Cary Clark682c58d2018-05-16 07:07:07 -04001969<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1970 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001971 </tr>
1972</table>
1973
1974### Example
1975
1976<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1977
1978#### Example Output
1979
1980~~~~
1981paint1 == paint2
1982~~~~
1983
1984</fiddle-embed></div>
1985
1986---
1987
Cary Clark682c58d2018-05-16 07:07:07 -04001988## <a name='LCD_Text'>LCD Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001989
Cary Clarkffb3d682018-05-17 12:17:28 -04001990When 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 -04001991create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001992on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001993<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 -04001994the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001995
Cary Clark682c58d2018-05-16 07:07:07 -04001996<a name='SkPaint_isLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001997## isLCDRenderText
1998
Cary Clark682c58d2018-05-16 07:07:07 -04001999<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2000bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002001</pre>
2002
Cary Clark80247e52018-07-11 16:18:41 -04002003Returns true if <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002004
Cary Clark682c58d2018-05-16 07:07:07 -04002005Returns 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 -04002006
2007### Return Value
2008
Cary Clark682c58d2018-05-16 07:07:07 -04002009<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002010
2011### Example
2012
skia-bookmakera391c722018-07-09 05:28:19 +00002013<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04002014
2015#### Example Output
2016
2017~~~~
2018paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2019paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2020~~~~
2021
2022</fiddle-embed></div>
2023
2024---
2025
Cary Clark682c58d2018-05-16 07:07:07 -04002026<a name='SkPaint_setLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002027## setLCDRenderText
2028
Cary Clark682c58d2018-05-16 07:07:07 -04002029<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2030void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04002031</pre>
2032
Cary Clark682c58d2018-05-16 07:07:07 -04002033Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002034
Cary Clark682c58d2018-05-16 07:07:07 -04002035Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
2036Clears <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 -04002037
2038### Parameters
2039
Cary Clark682c58d2018-05-16 07:07:07 -04002040<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
2041 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002042 </tr>
2043</table>
2044
2045### Example
2046
skia-bookmakere0a458f2018-07-16 05:29:00 +00002047<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04002048
2049#### Example Output
2050
2051~~~~
2052paint1 == paint2
2053~~~~
2054
2055</fiddle-embed></div>
2056
2057---
2058
Cary Clark682c58d2018-05-16 07:07:07 -04002059## <a name='Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a>
Cary Clark08895c42018-02-01 09:37:32 -05002060
Cary Clark682c58d2018-05-16 07:07:07 -04002061<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
2062<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 -05002063in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04002064
Cary Clark682c58d2018-05-16 07:07:07 -04002065FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
2066the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002067Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04002068<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04002069
Cary Clark682c58d2018-05-16 07:07:07 -04002070<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
2071<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
2072<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002073
2074### Example
2075
Cary Clarka560c472017-11-27 10:44:06 -05002076<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05002077<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05002078 includes an embedded bitmap Glyph at odd font sizes. This example works
2079 on platforms that use FreeType as their Font_Engine.
2080 Windows may, but is not required to, return a bitmap glyph if
2081 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
2082 bitmap.allocN32Pixels(30, 15);
2083 bitmap.eraseColor(0);
2084 SkCanvas offscreen(bitmap);
2085 SkPaint paint;
2086 paint.setAntiAlias(true);
2087 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05002088 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05002089 for (bool embedded : { false, true}) {
2090 paint.setEmbeddedBitmapText(embedded);
2091 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
2092 }
2093 canvas->drawBitmap(bitmap, 0, 0);
2094 canvas->scale(10, 10);
2095 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05002096
Cary Clarka560c472017-11-27 10:44:06 -05002097</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002098
Cary Clark682c58d2018-05-16 07:07:07 -04002099<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002100## isEmbeddedBitmapText
2101
Cary Clark682c58d2018-05-16 07:07:07 -04002102<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2103bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002104</pre>
2105
Cary Clark80247e52018-07-11 16:18:41 -04002106Returns 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 -04002107
Cary Clark682c58d2018-05-16 07:07:07 -04002108Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002109
2110### Return Value
2111
Cary Clark682c58d2018-05-16 07:07:07 -04002112<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002113
2114### Example
2115
2116<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
2117
2118#### Example Output
2119
2120~~~~
2121paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2122paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2123~~~~
2124
2125</fiddle-embed></div>
2126
2127---
2128
Cary Clark682c58d2018-05-16 07:07:07 -04002129<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002130## setEmbeddedBitmapText
2131
Cary Clark682c58d2018-05-16 07:07:07 -04002132<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2133void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04002134</pre>
2135
2136Requests, but does not require, to use bitmaps in fonts instead of outlines.
2137
Cary Clark682c58d2018-05-16 07:07:07 -04002138Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
2139Clears <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 -04002140
2141### Parameters
2142
Cary Clark682c58d2018-05-16 07:07:07 -04002143<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
2144 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002145 </tr>
2146</table>
2147
2148### Example
2149
2150<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
2151
2152#### Example Output
2153
2154~~~~
2155paint1 == paint2
2156~~~~
2157
2158</fiddle-embed></div>
2159
2160---
2161
Cary Clark682c58d2018-05-16 07:07:07 -04002162## <a name='Automatic_Hinting'>Automatic Hinting</a>
Cary Clark08895c42018-02-01 09:37:32 -05002163
Cary Clark682c58d2018-05-16 07:07:07 -04002164If <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>
2165instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2166<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
2167<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002168
Cary Clark682c58d2018-05-16 07:07:07 -04002169<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 -04002170
Cary Clark682c58d2018-05-16 07:07:07 -04002171<a name='SkPaint_isAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002172## isAutohinted
2173
Cary Clark682c58d2018-05-16 07:07:07 -04002174<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2175bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002176</pre>
2177
Cary Clark80247e52018-07-11 16:18:41 -04002178Returns 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
2179platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>. If true, instructs
2180the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002181
Cary Clark682c58d2018-05-16 07:07:07 -04002182Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002183
2184### Return Value
2185
Cary Clark682c58d2018-05-16 07:07:07 -04002186<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002187
2188### Example
2189
2190<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
2191
2192#### Example Output
2193
2194~~~~
2195paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2196paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2197~~~~
2198
2199</fiddle-embed></div>
2200
2201### See Also
2202
Cary Clark682c58d2018-05-16 07:07:07 -04002203<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002204
2205---
2206
Cary Clark682c58d2018-05-16 07:07:07 -04002207<a name='SkPaint_setAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002208## setAutohinted
2209
Cary Clark682c58d2018-05-16 07:07:07 -04002210<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2211void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04002212</pre>
2213
Cary Clark80247e52018-07-11 16:18:41 -04002214Sets whether to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002215If <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 -04002216instructs 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 -04002217<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
2218<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002219
Cary Clark682c58d2018-05-16 07:07:07 -04002220Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002221
Cary Clark682c58d2018-05-16 07:07:07 -04002222Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
2223Clears <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 -04002224
2225### Parameters
2226
Cary Clark682c58d2018-05-16 07:07:07 -04002227<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
2228 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002229 </tr>
2230</table>
2231
2232### Example
2233
2234<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
2235
2236### See Also
2237
Cary Clark682c58d2018-05-16 07:07:07 -04002238<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002239
2240---
2241
Cary Clark682c58d2018-05-16 07:07:07 -04002242## <a name='Vertical_Text'>Vertical Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05002243
Cary Clark682c58d2018-05-16 07:07:07 -04002244<a href='undocumented#Text'>Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
2245using <a href='undocumented#Advance'>Font Advance</a> to position subsequent <a href='undocumented#Glyph'>Glyphs</a>. By default, each successive glyph
2246is positioned to the right of the preceding glyph. <a href='#Vertical_Text'>Vertical Text</a> sets successive
2247<a href='undocumented#Glyph'>Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04002248
Cary Clark682c58d2018-05-16 07:07:07 -04002249Skia 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 -05002250font substitution,
Cary Clark137b8742018-05-30 09:21:49 -04002251textual substitution, line layout, or contextual spacing like <a href='undocumented#Kerning'>Kerning</a> pairs. Use
Cary Clark682c58d2018-05-16 07:07:07 -04002252a text shaping engine like <a href='https://harfbuzz.org/'>HarfBuzz</a></a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04002253into glyph series.
2254
Cary Clark682c58d2018-05-16 07:07:07 -04002255<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 -04002256
Cary Clark682c58d2018-05-16 07:07:07 -04002257<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if clear draws text left to right.
2258<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 -04002259
Cary Clark682c58d2018-05-16 07:07:07 -04002260<a href='#Vertical_Text'>Vertical Text</a> is clear by default.
2261<a href='#Vertical_Text'>Vertical Text</a> can be set by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
2262<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002263
2264### Example
2265
2266<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
2267
Cary Clark682c58d2018-05-16 07:07:07 -04002268<a name='SkPaint_isVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002269## isVerticalText
2270
Cary Clark682c58d2018-05-16 07:07:07 -04002271<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2272bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002273</pre>
2274
Cary Clark80247e52018-07-11 16:18:41 -04002275Returns 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 -04002276
Cary Clark682c58d2018-05-16 07:07:07 -04002277Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002278
2279### Return Value
2280
Cary Clark682c58d2018-05-16 07:07:07 -04002281<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002282
2283### Example
2284
2285<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
2286
2287#### Example Output
2288
2289~~~~
2290paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2291paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2292~~~~
2293
2294</fiddle-embed></div>
2295
2296---
2297
Cary Clark682c58d2018-05-16 07:07:07 -04002298<a name='SkPaint_setVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002299## setVerticalText
2300
Cary Clark682c58d2018-05-16 07:07:07 -04002301<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2302void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText)
Cary Clark12799e12017-07-28 15:18:29 -04002303</pre>
2304
Cary Clark80247e52018-07-11 16:18:41 -04002305Returns true if text advance positions the next glyph below the previous glyph instead of to the
Cary Clark12799e12017-07-28 15:18:29 -04002306right of previous glyph.
2307
Cary Clark682c58d2018-05-16 07:07:07 -04002308Sets <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is true.
2309Clears <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04002310
2311### Parameters
2312
Cary Clark682c58d2018-05-16 07:07:07 -04002313<table> <tr> <td><a name='SkPaint_setVerticalText_verticalText'><code><strong>verticalText</strong></code></a></td>
2314 <td>setting for <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002315 </tr>
2316</table>
2317
2318### Example
2319
2320<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
2321
2322#### Example Output
2323
2324~~~~
2325paint1 == paint2
2326~~~~
2327
2328</fiddle-embed></div>
2329
2330---
2331
Cary Clark682c58d2018-05-16 07:07:07 -04002332## <a name='Fake_Bold'>Fake Bold</a>
Cary Clark08895c42018-02-01 09:37:32 -05002333
Cary Clark682c58d2018-05-16 07:07:07 -04002334<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 -05002335is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04002336bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002337
Cary Clark682c58d2018-05-16 07:07:07 -04002338Use <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 -04002339is not available.
2340
Cary Clark7cfcbca2018-01-04 16:11:51 -05002341A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04002342the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
2343by 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 -04002344
Cary Clark682c58d2018-05-16 07:07:07 -04002345<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04002346
2347### Example
2348
2349<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
2350
Cary Clark682c58d2018-05-16 07:07:07 -04002351<a name='SkPaint_isFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002352## isFakeBoldText
2353
Cary Clark682c58d2018-05-16 07:07:07 -04002354<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2355bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002356</pre>
2357
Cary Clark80247e52018-07-11 16:18:41 -04002358Returns true if approximate bold by increasing the stroke width when creating glyph bitmaps
Cary Clark12799e12017-07-28 15:18:29 -04002359from outlines.
2360
Cary Clark682c58d2018-05-16 07:07:07 -04002361Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002362
2363### Return Value
2364
Cary Clark682c58d2018-05-16 07:07:07 -04002365<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002366
2367### Example
2368
2369<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
2370
2371#### Example Output
2372
2373~~~~
2374paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2375paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2376~~~~
2377
2378</fiddle-embed></div>
2379
2380---
2381
Cary Clark682c58d2018-05-16 07:07:07 -04002382<a name='SkPaint_setFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002383## setFakeBoldText
2384
Cary Clark682c58d2018-05-16 07:07:07 -04002385<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2386void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04002387</pre>
2388
Cary Clark80247e52018-07-11 16:18:41 -04002389Increases stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04002390
Cary Clark682c58d2018-05-16 07:07:07 -04002391Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
2392Clears <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 -04002393
2394### Parameters
2395
Cary Clark682c58d2018-05-16 07:07:07 -04002396<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
2397 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002398 </tr>
2399</table>
2400
2401### Example
2402
2403<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
2404
2405#### Example Output
2406
2407~~~~
2408paint1 == paint2
2409~~~~
2410
2411</fiddle-embed></div>
2412
2413---
2414
Cary Clark682c58d2018-05-16 07:07:07 -04002415## <a name='Full_Hinting_Spacing'>Full Hinting Spacing</a>
Cary Clark08895c42018-02-01 09:37:32 -05002416
Cary Clark682c58d2018-05-16 07:07:07 -04002417if <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 -04002418spacing 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 -04002419<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
2420FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002421
Cary Clark137b8742018-05-30 09:21:49 -04002422<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
2423a 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 -04002424
Cary Clark682c58d2018-05-16 07:07:07 -04002425<a name='SkPaint_isDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002426## isDevKernText
2427
Cary Clark682c58d2018-05-16 07:07:07 -04002428<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2429bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002430</pre>
2431
Cary Clark682c58d2018-05-16 07:07:07 -04002432Deprecated.
2433
Cary Clark12799e12017-07-28 15:18:29 -04002434---
2435
Cary Clark682c58d2018-05-16 07:07:07 -04002436<a name='SkPaint_setDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002437## setDevKernText
2438
Cary Clark682c58d2018-05-16 07:07:07 -04002439<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2440void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04002441</pre>
2442
Cary Clark682c58d2018-05-16 07:07:07 -04002443Deprecated.
2444
Cary Clark12799e12017-07-28 15:18:29 -04002445---
2446
Cary Clark682c58d2018-05-16 07:07:07 -04002447## <a name='Filter_Quality_Methods'>Filter Quality Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05002448
Cary Clark682c58d2018-05-16 07:07:07 -04002449<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
2450A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
2451A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
2452If 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 -04002453in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04002454
Cary Clark682c58d2018-05-16 07:07:07 -04002455<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 -04002456
2457<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002458 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
2459 </tr> <tr>
2460 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
2461 </tr> <tr>
2462 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
2463 </tr> <tr>
2464 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
2465 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002466</table>
2467
Cary Clark682c58d2018-05-16 07:07:07 -04002468and 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 -04002469
Cary Clark682c58d2018-05-16 07:07:07 -04002470<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 -04002471
2472### Example
2473
skia-bookmaker525f9a92018-05-03 06:27:39 +00002474<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002475
Cary Clark682c58d2018-05-16 07:07:07 -04002476<a name='SkPaint_getFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002477## getFilterQuality
2478
Cary Clark682c58d2018-05-16 07:07:07 -04002479<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2480<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002481</pre>
2482
Cary Clark682c58d2018-05-16 07:07:07 -04002483Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002484draws faster; a higher setting looks better when the image is scaled.
2485
2486### Return Value
2487
Cary Clark682c58d2018-05-16 07:07:07 -04002488one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2489<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04002490
2491### Example
2492
2493<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
2494
2495#### Example Output
2496
2497~~~~
2498kNone_SkFilterQuality == paint.getFilterQuality()
2499~~~~
2500
2501</fiddle-embed></div>
2502
2503---
2504
Cary Clark682c58d2018-05-16 07:07:07 -04002505<a name='SkPaint_setFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002506## setFilterQuality
2507
Cary Clark682c58d2018-05-16 07:07:07 -04002508<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2509void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04002510</pre>
2511
Cary Clark682c58d2018-05-16 07:07:07 -04002512Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002513draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04002514Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04002515
2516### Parameters
2517
Cary Clark682c58d2018-05-16 07:07:07 -04002518<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
2519 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2520<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002521 </tr>
2522</table>
2523
2524### Example
2525
2526<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
2527
2528#### Example Output
2529
2530~~~~
2531kHigh_SkFilterQuality == paint.getFilterQuality()
2532~~~~
2533
2534</fiddle-embed></div>
2535
2536### See Also
2537
Cary Clark682c58d2018-05-16 07:07:07 -04002538<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04002539
2540---
2541
Cary Clark682c58d2018-05-16 07:07:07 -04002542## <a name='Color_Methods'>Color Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002543
Cary Clarkab2621d2018-01-30 10:08:57 -05002544| name | description |
2545| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04002546| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
2547| <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 -04002548
Cary Clarkffb3d682018-05-17 12:17:28 -04002549<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 -05002550values used to draw a filled or stroked shape in a 32-bit value. Each component
2551occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
2552All values in any combination are valid.
2553
Cary Clark682c58d2018-05-16 07:07:07 -04002554<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 -04002555RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05002556
Cary Clarkffb3d682018-05-17 12:17:28 -04002557The 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 -05002558positions on the output device, which may have more or fewer bits, and may have
2559a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04002560
Cary Clarkffb3d682018-05-17 12:17:28 -04002561| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04002562| --- | --- | --- | --- | --- |
2563| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
2564
2565### Example
2566
Ravi Mistry874e22b2018-07-19 03:49:13 +00002567<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002568
Cary Clark682c58d2018-05-16 07:07:07 -04002569<a name='SkPaint_getColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002570## getColor
2571
Cary Clark682c58d2018-05-16 07:07:07 -04002572<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2573<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002574</pre>
2575
Cary Clarkffb3d682018-05-17 12:17:28 -04002576Retrieves <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 -04002577Use 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 -04002578a color component.
2579
2580### Return Value
2581
Cary Clarkffb3d682018-05-17 12:17:28 -04002582<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04002583
2584### Example
2585
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002586<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04002587
2588#### Example Output
2589
2590~~~~
2591Yellow is 100% red, 100% green, and 0% blue.
2592~~~~
2593
2594</fiddle-embed></div>
2595
2596### See Also
2597
Cary Clark434b80f2018-09-04 11:13:56 -04002598<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
2599
2600---
2601
2602<a name='SkPaint_getColor4f'></a>
2603## getColor4f
2604
2605<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2606<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
2607</pre>
2608
2609Retrieves alpha and RGB, unpmreultiplied, as four floating point values. RGB are
2610are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
2611
2612### Return Value
2613
2614<a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA
2615
2616#### Example Output
2617
2618~~~~
2619Yellow is 100% red, 100% green, and 0% blue.
2620~~~~
2621
2622### See Also
2623
2624<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04002625
2626---
2627
Cary Clark682c58d2018-05-16 07:07:07 -04002628<a name='SkPaint_setColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002629## setColor
2630
Cary Clark682c58d2018-05-16 07:07:07 -04002631<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2632void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04002633</pre>
2634
Cary Clarkffb3d682018-05-17 12:17:28 -04002635Sets <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,
2636<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 -04002637
2638### Parameters
2639
Cary Clark682c58d2018-05-16 07:07:07 -04002640<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002641 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04002642 </tr>
2643</table>
2644
2645### Example
2646
skia-bookmaker233c6522018-07-04 05:33:26 +00002647<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04002648
2649#### Example Output
2650
2651~~~~
2652green1 == green2
2653~~~~
2654
2655</fiddle-embed></div>
2656
2657### See Also
2658
Cary Clark434b80f2018-09-04 11:13:56 -04002659<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setColor4f'>setColor4f</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
2660
2661---
2662
2663<a name='SkPaint_setColor4f'></a>
2664## setColor4f
2665
2666<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2667void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
2668</pre>
2669
2670Sets alpha and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
2671point values, unpremultiplied. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
2672the <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a>. If <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a> is nullptr, then <a href='#SkPaint_setColor4f_color'>color</a> is assumed to be in the
2673sRGB <a href='#SkPaint_setColor4f_color'>color</a> space.
2674
2675### Parameters
2676
2677<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
2678 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA</td>
2679 </tr>
2680 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
2681 <td><a href='undocumented#Color_Space'>Color Space</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
2682 </tr>
2683</table>
2684
2685#### Example Output
2686
2687~~~~
2688green1 == green2
2689~~~~
2690
2691### See Also
2692
2693<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setColor'>setColor</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002694
2695---
2696
Cary Clark682c58d2018-05-16 07:07:07 -04002697## <a name='Alpha_Methods'>Alpha Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002698
Cary Clarkffb3d682018-05-17 12:17:28 -04002699<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 -04002700
Cary Clark682c58d2018-05-16 07:07:07 -04002701<a name='SkPaint_getAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002702## getAlpha
2703
Cary Clark682c58d2018-05-16 07:07:07 -04002704<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2705uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002706</pre>
2707
Cary Clark682c58d2018-05-16 07:07:07 -04002708Retrieves <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 -04002709
2710### Return Value
2711
Cary Clark682c58d2018-05-16 07:07:07 -04002712<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04002713
2714### Example
2715
Cary Clark83647062018-07-18 16:21:51 -04002716<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04002717
2718#### Example Output
2719
2720~~~~
2721255 == paint.getAlpha()
2722~~~~
2723
2724</fiddle-embed></div>
2725
2726---
2727
Cary Clark682c58d2018-05-16 07:07:07 -04002728<a name='SkPaint_setAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002729## setAlpha
2730
Cary Clark682c58d2018-05-16 07:07:07 -04002731<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2732void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04002733</pre>
2734
Cary Clarkffb3d682018-05-17 12:17:28 -04002735Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04002736unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04002737build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
2738<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 -04002739fully opaque.
2740
2741### Parameters
2742
Cary Clark682c58d2018-05-16 07:07:07 -04002743<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
2744 <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 -04002745 </tr>
2746</table>
2747
2748### Example
2749
Ravi Mistry874e22b2018-07-19 03:49:13 +00002750<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04002751
2752#### Example Output
2753
2754~~~~
27550x44112233 == paint.getColor()
2756~~~~
2757
2758</fiddle-embed></div>
2759
2760---
2761
Cary Clark682c58d2018-05-16 07:07:07 -04002762<a name='SkPaint_setARGB'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002763## setARGB
2764
Cary Clark682c58d2018-05-16 07:07:07 -04002765<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2766void <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 -04002767</pre>
2768
Cary Clark682c58d2018-05-16 07:07:07 -04002769Sets <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 -04002770The 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 -04002771
2772### Parameters
2773
Cary Clark682c58d2018-05-16 07:07:07 -04002774<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2775 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2776 </tr>
2777 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002778 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002779 </tr>
2780 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002781 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002782 </tr>
2783 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002784 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002785 </tr>
2786</table>
2787
2788### Example
2789
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002790<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04002791
2792#### Example Output
2793
2794~~~~
2795transRed1 == transRed2
2796~~~~
2797
2798</fiddle-embed></div>
2799
2800### See Also
2801
Cary Clark682c58d2018-05-16 07:07:07 -04002802<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002803
2804---
2805
Cary Clark682c58d2018-05-16 07:07:07 -04002806## <a name='Style'>Style</a>
Cary Clark08895c42018-02-01 09:37:32 -05002807
Cary Clark682c58d2018-05-16 07:07:07 -04002808<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2809Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002810
Cary Clark682c58d2018-05-16 07:07:07 -04002811Set <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 -04002812The fill covers the area inside the geometry for most shapes.
2813
Cary Clark682c58d2018-05-16 07:07:07 -04002814Set <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 -04002815
Cary Clark682c58d2018-05-16 07:07:07 -04002816## <a name='Style_Fill'>Style Fill</a>
Cary Clark12799e12017-07-28 15:18:29 -04002817
2818### See Also
2819
Cary Clark682c58d2018-05-16 07:07:07 -04002820<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002821
Cary Clark682c58d2018-05-16 07:07:07 -04002822## <a name='Style_Stroke'>Style Stroke</a>
Cary Clark12799e12017-07-28 15:18:29 -04002823
Cary Clarkbc5697d2017-10-04 14:31:33 -04002824The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002825<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>.
2826The 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 -04002827The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002828
Cary Clark682c58d2018-05-16 07:07:07 -04002829As <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
2830may 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 -04002831
Cary Clark682c58d2018-05-16 07:07:07 -04002832## <a name='Style_Hairline'>Style Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002833
Cary Clark682c58d2018-05-16 07:07:07 -04002834<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Style_Hairline'>Hairline</a>.
2835<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 -05002836flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002837
Cary Clark682c58d2018-05-16 07:07:07 -04002838<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
2839two 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
2840pixel. 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 -05002841GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002842while stroking.
2843
Cary Clark682c58d2018-05-16 07:07:07 -04002844## <a name='SkPaint_Style'>Enum SkPaint::Style</a>
Cary Clark12799e12017-07-28 15:18:29 -04002845
Cary Clarka560c472017-11-27 10:44:06 -05002846<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002847 enum <a href='#SkPaint_Style'>Style</a> {
2848 <a href='#SkPaint_kFill_Style'>kFill Style</a>,
2849 <a href='#SkPaint_kStroke_Style'>kStroke Style</a>,
2850 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002851 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002852
Cary Clark682c58d2018-05-16 07:07:07 -04002853 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 -05002854</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002855
Cary Clark682c58d2018-05-16 07:07:07 -04002856Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002857The stroke and fill
2858share all paint attributes; for instance, they are drawn with the same color.
2859
Cary Clark682c58d2018-05-16 07:07:07 -04002860Use <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 -04002861a fill draw.
2862
2863### Constants
2864
Cary Clark682c58d2018-05-16 07:07:07 -04002865<table style='border-collapse: collapse; width: 62.5em'>
2866 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2867<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2868<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2869 <tr style='background-color: #f0f0f0; '>
2870 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2871 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2872 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002873Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
2874<a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkImage_Reference#Image'>Image</a>, <a href='undocumented#Patch'>Patches</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='undocumented#Sprite'>Sprites</a>, and <a href='undocumented#Vertices'>Vertices</a> are painted as if
Cary Clark682c58d2018-05-16 07:07:07 -04002875<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2876The <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 -04002877and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002878<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 -05002879</td>
Cary Clark12799e12017-07-28 15:18:29 -04002880 </tr>
2881 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002882 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2883 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002885Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002886<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,
2887and ignore the set <a href='#SkPaint_Style'>Style</a>.
2888The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2889</td>
2890 </tr>
2891 <tr style='background-color: #f0f0f0; '>
2892 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2893 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2894 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002895Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002896<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>,
2897and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002898</td>
Cary Clark12799e12017-07-28 15:18:29 -04002899 </tr>
2900 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002901 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2902 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2904May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002905</td>
Cary Clark12799e12017-07-28 15:18:29 -04002906 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002907</table>
Cary Clark12799e12017-07-28 15:18:29 -04002908
Cary Clark682c58d2018-05-16 07:07:07 -04002909<a name='SkPaint_getStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002910## getStyle
2911
Cary Clark682c58d2018-05-16 07:07:07 -04002912<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2913<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002914</pre>
2915
Cary Clark80247e52018-07-11 16:18:41 -04002916Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002917
2918### Return Value
2919
Cary Clark682c58d2018-05-16 07:07:07 -04002920one 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 -04002921
2922### Example
2923
2924<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2925
2926#### Example Output
2927
2928~~~~
2929SkPaint::kFill_Style == paint.getStyle()
2930~~~~
2931
2932</fiddle-embed></div>
2933
2934### See Also
2935
Cary Clark682c58d2018-05-16 07:07:07 -04002936<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002937
2938---
2939
Cary Clark682c58d2018-05-16 07:07:07 -04002940<a name='SkPaint_setStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002941## setStyle
2942
Cary Clark682c58d2018-05-16 07:07:07 -04002943<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2944void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002945</pre>
2946
2947Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002948Has 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 -04002949
2950### Parameters
2951
Cary Clark682c58d2018-05-16 07:07:07 -04002952<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2953 <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 -04002954 </tr>
2955</table>
2956
2957### Example
2958
2959<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2960
2961### See Also
2962
Cary Clark682c58d2018-05-16 07:07:07 -04002963<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002964
2965---
2966
2967### See Also
2968
Cary Clark682c58d2018-05-16 07:07:07 -04002969<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 -04002970
Cary Clark682c58d2018-05-16 07:07:07 -04002971## <a name='Stroke_Width'>Stroke Width</a>
Cary Clark08895c42018-02-01 09:37:32 -05002972
Cary Clark682c58d2018-05-16 07:07:07 -04002973<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002974of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002975set 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 -04002976
2977When width is greater than zero, the stroke encompasses as many pixels partially
2978or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002979the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002980
Cary Clark682c58d2018-05-16 07:07:07 -04002981The stroke dimensions are scaled by the canvas matrix, but <a href='#Style_Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002982remains one pixel wide regardless of scaling.
2983
2984The default width for the paint is zero.
2985
2986### Example
2987
skia-bookmaker525f9a92018-05-03 06:27:39 +00002988<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 -05002989line and the platform implementation.
2990</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002991
Cary Clark682c58d2018-05-16 07:07:07 -04002992<a name='SkPaint_getStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002993## getStrokeWidth
2994
Cary Clark682c58d2018-05-16 07:07:07 -04002995<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2996<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002997</pre>
2998
Cary Clark682c58d2018-05-16 07:07:07 -04002999Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04003000outline the shape.
3001
3002### Return Value
3003
Cary Clark682c58d2018-05-16 07:07:07 -04003004zero for <a href='#Style_Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04003005
3006### Example
3007
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003008<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04003009
3010#### Example Output
3011
3012~~~~
30130 == paint.getStrokeWidth()
3014~~~~
3015
3016</fiddle-embed></div>
3017
3018---
3019
Cary Clark682c58d2018-05-16 07:07:07 -04003020<a name='SkPaint_setStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003021## setStrokeWidth
3022
Cary Clark682c58d2018-05-16 07:07:07 -04003023<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3024void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04003025</pre>
3026
3027Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05003028outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04003029Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04003030
3031### Parameters
3032
Cary Clark682c58d2018-05-16 07:07:07 -04003033<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
3034 <td>zero thickness for <a href='#Style_Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04003035 </tr>
3036</table>
3037
3038### Example
3039
3040<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
3041
3042#### Example Output
3043
3044~~~~
30455 == paint.getStrokeWidth()
3046~~~~
3047
3048</fiddle-embed></div>
3049
3050---
3051
Cary Clark682c58d2018-05-16 07:07:07 -04003052## <a name='Miter_Limit'>Miter Limit</a>
Cary Clark08895c42018-02-01 09:37:32 -05003053
Cary Clark682c58d2018-05-16 07:07:07 -04003054<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04003055relative to the stroke width.
3056
Cary Clark682c58d2018-05-16 07:07:07 -04003057<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
3058is 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>
3059or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003060
Cary Clark682c58d2018-05-16 07:07:07 -04003061If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
3062is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003063
Cary Clark682c58d2018-05-16 07:07:07 -04003064<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04003065
Cary Clark682c58d2018-05-16 07:07:07 -04003066miter limit = 1 / sin ( angle / 2 )<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
3067The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003068in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04003069
3070Here are some miter limits and the angles that triggers them.
3071
3072| miter limit | angle in degrees |
3073| --- | --- |
3074| 10 | 11.48 |
3075| 9 | 12.76 |
3076| 8 | 14.36 |
3077| 7 | 16.43 |
3078| 6 | 19.19 |
3079| 5 | 23.07 |
3080| 4 | 28.96 |
3081| 3 | 38.94 |
3082| 2 | 60 |
3083| 1 | 180 |
3084
3085### Example
3086
Cary Clarka619d452018-07-16 08:12:01 -04003087<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark12799e12017-07-28 15:18:29 -04003088When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05003089by a bevel join.
3090</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003091
Cary Clark682c58d2018-05-16 07:07:07 -04003092<a name='SkPaint_getStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003093## getStrokeMiter
3094
Cary Clark682c58d2018-05-16 07:07:07 -04003095<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3096<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003097</pre>
3098
Cary Clark80247e52018-07-11 16:18:41 -04003099Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04003100
3101### Return Value
3102
Cary Clark682c58d2018-05-16 07:07:07 -04003103zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003104
3105### Example
3106
3107<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
3108
3109#### Example Output
3110
3111~~~~
3112default miter limit == 4
3113~~~~
3114
3115</fiddle-embed></div>
3116
3117### See Also
3118
Cary Clark682c58d2018-05-16 07:07:07 -04003119<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 -04003120
3121---
3122
Cary Clark682c58d2018-05-16 07:07:07 -04003123<a name='SkPaint_setStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003124## setStrokeMiter
3125
Cary Clark682c58d2018-05-16 07:07:07 -04003126<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3127void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04003128</pre>
3129
Cary Clark80247e52018-07-11 16:18:41 -04003130Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04003131Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04003132Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04003133
3134### Parameters
3135
Cary Clark682c58d2018-05-16 07:07:07 -04003136<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
3137 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003138 </tr>
3139</table>
3140
3141### Example
3142
skia-bookmakera717ca92018-07-08 05:32:09 +00003143<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04003144
3145#### Example Output
3146
3147~~~~
3148default miter limit == 8
3149~~~~
3150
3151</fiddle-embed></div>
3152
3153### See Also
3154
Cary Clark682c58d2018-05-16 07:07:07 -04003155<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 -04003156
3157---
3158
Cary Clark682c58d2018-05-16 07:07:07 -04003159## <a name='Stroke_Cap'>Stroke Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003160
Cary Clark682c58d2018-05-16 07:07:07 -04003161## <a name='SkPaint_Cap'>Enum SkPaint::Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003162
Cary Clarka560c472017-11-27 10:44:06 -05003163<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003164 enum <a href='#SkPaint_Cap'>Cap</a> {
3165 <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
3166 <a href='#SkPaint_kRound_Cap'>kRound Cap</a>,
3167 <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003168
Cary Clark682c58d2018-05-16 07:07:07 -04003169 <a href='#SkPaint_kLast_Cap'>kLast Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
3170 <a href='#SkPaint_kDefault_Cap'>kDefault Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003171 };
Cary Clark6fc50412017-09-21 12:31:06 -04003172
Cary Clark682c58d2018-05-16 07:07:07 -04003173 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 -05003174</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003175
Cary Clark682c58d2018-05-16 07:07:07 -04003176<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 -04003177
3178### Constants
3179
Cary Clark682c58d2018-05-16 07:07:07 -04003180<table style='border-collapse: collapse; width: 62.5em'>
3181 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3182<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3183<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3184 <tr style='background-color: #f0f0f0; '>
3185 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
3186 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3187 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3188Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05003189</td>
Cary Clark12799e12017-07-28 15:18:29 -04003190 </tr>
3191 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003192 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
3193 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3194 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3195Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05003196and end.
3197</td>
Cary Clark12799e12017-07-28 15:18:29 -04003198 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003199 <tr style='background-color: #f0f0f0; '>
3200 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
3201 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3202 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3203Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04003204and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05003205of the stroke.
3206</td>
Cary Clark12799e12017-07-28 15:18:29 -04003207 </tr>
3208 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003209 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
3210 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3211 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3212Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
3213</td>
3214 </tr>
3215 <tr style='background-color: #f0f0f0; '>
3216 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
3217 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3218 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3219<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 -05003220</td>
Cary Clark12799e12017-07-28 15:18:29 -04003221 </tr>
3222 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003223 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
3224 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3225 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3226May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003227</td>
Cary Clark12799e12017-07-28 15:18:29 -04003228 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003229</table>
Cary Clark12799e12017-07-28 15:18:29 -04003230
Cary Clark682c58d2018-05-16 07:07:07 -04003231Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3232follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003233
Cary Clark682c58d2018-05-16 07:07:07 -04003234If 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 -04003235visible beginning and end.
3236
Cary Clark682c58d2018-05-16 07:07:07 -04003237<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 -04003238
Cary Clark682c58d2018-05-16 07:07:07 -04003239<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Reference#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
3240<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 -04003241at the contour point.
Cary Clark682c58d2018-05-16 07:07:07 -04003242<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
3243<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04003244
Cary Clark682c58d2018-05-16 07:07:07 -04003245<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 -04003246
Cary Clark12799e12017-07-28 15:18:29 -04003247### Example
3248
Cary Clark2ade9972017-11-02 17:49:34 -04003249<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003250
Cary Clark682c58d2018-05-16 07:07:07 -04003251<a name='SkPaint_getStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003252## getStrokeCap
3253
Cary Clark682c58d2018-05-16 07:07:07 -04003254<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3255<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003256</pre>
3257
Cary Clark80247e52018-07-11 16:18:41 -04003258Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003259
3260### Return Value
3261
Cary Clark682c58d2018-05-16 07:07:07 -04003262one 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 -04003263
3264### Example
3265
3266<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
3267
3268#### Example Output
3269
3270~~~~
3271kButt_Cap == default stroke cap
3272~~~~
3273
3274</fiddle-embed></div>
3275
3276### See Also
3277
Cary Clark682c58d2018-05-16 07:07:07 -04003278<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003279
3280---
3281
Cary Clark682c58d2018-05-16 07:07:07 -04003282<a name='SkPaint_setStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003283## setStrokeCap
3284
Cary Clark682c58d2018-05-16 07:07:07 -04003285<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3286void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04003287</pre>
3288
Cary Clark80247e52018-07-11 16:18:41 -04003289Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003290
3291### Parameters
3292
Cary Clark682c58d2018-05-16 07:07:07 -04003293<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
3294 <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>;
3295has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04003296 </tr>
3297</table>
3298
3299### Example
3300
3301<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
3302
3303#### Example Output
3304
3305~~~~
3306kRound_Cap == paint.getStrokeCap()
3307~~~~
3308
3309</fiddle-embed></div>
3310
3311### See Also
3312
Cary Clark682c58d2018-05-16 07:07:07 -04003313<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003314
3315---
3316
Cary Clark682c58d2018-05-16 07:07:07 -04003317## <a name='Stroke_Join'>Stroke Join</a>
Cary Clark08895c42018-02-01 09:37:32 -05003318
Cary Clark682c58d2018-05-16 07:07:07 -04003319<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 -04003320
Cary Clark682c58d2018-05-16 07:07:07 -04003321Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3322follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003323
3324If the contour direction changes abruptly, because the tangent direction leading
3325to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04003326the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003327
3328### Example
3329
Cary Clark2ade9972017-11-02 17:49:34 -04003330<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003331
Cary Clark682c58d2018-05-16 07:07:07 -04003332## <a name='SkPaint_Join'>Enum SkPaint::Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04003333
Cary Clarka560c472017-11-27 10:44:06 -05003334<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003335 enum <a href='#SkPaint_Join'>Join</a> {
3336 <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
3337 <a href='#SkPaint_kRound_Join'>kRound Join</a>,
3338 <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003339
Cary Clark682c58d2018-05-16 07:07:07 -04003340 <a href='#SkPaint_kLast_Join'>kLast Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
3341 <a href='#SkPaint_kDefault_Join'>kDefault Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003342 };
Cary Clark6fc50412017-09-21 12:31:06 -04003343
Cary Clark682c58d2018-05-16 07:07:07 -04003344 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 -05003345</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003346
Cary Clark682c58d2018-05-16 07:07:07 -04003347<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 -04003348affects the four corners of a stroked rectangle, and the connected segments in a
3349stroked path.
3350
3351Choose miter join to draw sharp corners. Choose round join to draw a circle with a
3352radius equal to the stroke width on top of the corner. Choose bevel join to minimally
3353connect the thick strokes.
3354
Cary Clark7cfcbca2018-01-04 16:11:51 -05003355The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04003356not contain the actual join. For instance, a fill path constructed with round joins does
3357not necessarily include circles at each connected segment.
3358
3359### Constants
3360
Cary Clark682c58d2018-05-16 07:07:07 -04003361<table style='border-collapse: collapse; width: 62.5em'>
3362 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3363<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3364<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3365 <tr style='background-color: #f0f0f0; '>
3366 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
3367 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3368 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3369Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
3370If 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 -05003371</td>
Cary Clark12799e12017-07-28 15:18:29 -04003372 </tr>
3373 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003374 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
3375 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3376 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3377Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
3378</td>
3379 </tr>
3380 <tr style='background-color: #f0f0f0; '>
3381 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
3382 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3383 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3384Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05003385</td>
Cary Clark12799e12017-07-28 15:18:29 -04003386 </tr>
3387 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003388 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
3389 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3390 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3391equivalent to the largest value for Stroke_Join</td>
3392 </tr>
3393 <tr style='background-color: #f0f0f0; '>
3394 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
3395 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3396 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3397<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 -05003398</td>
Cary Clark12799e12017-07-28 15:18:29 -04003399 </tr>
3400 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003401 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
3402 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3403 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3404May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003405</td>
Cary Clark12799e12017-07-28 15:18:29 -04003406 </tr>
3407</table>
3408
3409### Example
3410
3411<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
3412
3413### See Also
3414
Cary Clark682c58d2018-05-16 07:07:07 -04003415<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 -04003416
Cary Clark682c58d2018-05-16 07:07:07 -04003417<a name='SkPaint_getStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003418## getStrokeJoin
3419
Cary Clark682c58d2018-05-16 07:07:07 -04003420<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3421<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003422</pre>
3423
Cary Clark80247e52018-07-11 16:18:41 -04003424Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003425
3426### Return Value
3427
Cary Clark682c58d2018-05-16 07:07:07 -04003428one 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 -04003429
3430### Example
3431
Cary Clark7f644ec2018-07-19 10:50:44 -04003432<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04003433
3434#### Example Output
3435
3436~~~~
3437kMiter_Join == default stroke join
3438~~~~
3439
3440</fiddle-embed></div>
3441
3442### See Also
3443
Cary Clark682c58d2018-05-16 07:07:07 -04003444<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003445
3446---
3447
Cary Clark682c58d2018-05-16 07:07:07 -04003448<a name='SkPaint_setStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003449## setStrokeJoin
3450
Cary Clark682c58d2018-05-16 07:07:07 -04003451<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3452void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04003453</pre>
3454
Cary Clark80247e52018-07-11 16:18:41 -04003455Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003456
3457### Parameters
3458
Cary Clark682c58d2018-05-16 07:07:07 -04003459<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
3460 <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 -04003461otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04003462 </tr>
3463</table>
3464
3465### Example
3466
3467<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
3468
3469#### Example Output
3470
3471~~~~
3472kMiter_Join == paint.getStrokeJoin()
3473~~~~
3474
3475</fiddle-embed></div>
3476
3477### See Also
3478
Cary Clark682c58d2018-05-16 07:07:07 -04003479<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003480
3481---
3482
3483### See Also
3484
Cary Clark682c58d2018-05-16 07:07:07 -04003485<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003486
Cary Clark682c58d2018-05-16 07:07:07 -04003487## <a name='Fill_Path'>Fill Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05003488
Cary Clark682c58d2018-05-16 07:07:07 -04003489<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 -04003490
Cary Clark682c58d2018-05-16 07:07:07 -04003491If <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
3492replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
3493destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003494
Cary Clark682c58d2018-05-16 07:07:07 -04003495Fill <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
3496the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04003497
Cary Clark682c58d2018-05-16 07:07:07 -04003498If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
3499and <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>,
3500and <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 -04003501
Cary Clark682c58d2018-05-16 07:07:07 -04003502Fill <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 -04003503
Cary Clark682c58d2018-05-16 07:07:07 -04003504If 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>
3505returns false since <a href='#Style_Hairline'>Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04003506
Cary Clark682c58d2018-05-16 07:07:07 -04003507<a name='SkPaint_getFillPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003508## getFillPath
3509
Cary Clark682c58d2018-05-16 07:07:07 -04003510<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3511bool <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 -04003512</pre>
3513
Cary Clark80247e52018-07-11 16:18:41 -04003514Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04003515
3516### Parameters
3517
Cary Clark682c58d2018-05-16 07:07:07 -04003518<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
3519 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3520 </tr>
3521 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
3522 <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>
3523 </tr>
3524 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
3525 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
3526 </tr>
3527 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
3528 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04003529to favor speed and size</td>
3530 </tr>
3531</table>
3532
3533### Return Value
3534
Cary Clark682c58d2018-05-16 07:07:07 -04003535true 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 -04003536
3537### Example
3538
Cary Clark682c58d2018-05-16 07:07:07 -04003539<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.
3540At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05003541At the highest precision, the filled path has high fidelity compared to the original stroke.
3542</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003543
3544---
3545
Cary Clark682c58d2018-05-16 07:07:07 -04003546<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05003547
Cary Clark682c58d2018-05-16 07:07:07 -04003548<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3549bool <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 -04003550</pre>
3551
Cary Clark80247e52018-07-11 16:18:41 -04003552Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04003553
Cary Clark682c58d2018-05-16 07:07:07 -04003554Replaces <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>.
3555<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 -04003556
3557### Parameters
3558
Cary Clark682c58d2018-05-16 07:07:07 -04003559<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
3560 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3561 </tr>
3562 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
3563 <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 -04003564 </tr>
3565</table>
3566
3567### Return Value
3568
Cary Clark682c58d2018-05-16 07:07:07 -04003569true 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 -04003570
3571### Example
3572
3573<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
3574
3575---
3576
3577### See Also
3578
Cary Clark682c58d2018-05-16 07:07:07 -04003579<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 -04003580
Cary Clark682c58d2018-05-16 07:07:07 -04003581## <a name='Shader_Methods'>Shader Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003582
Cary Clark682c58d2018-05-16 07:07:07 -04003583<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
3584<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
3585If <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 -04003586
Cary Clark682c58d2018-05-16 07:07:07 -04003587<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>.
3588If <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 -04003589the fill.
3590
Cary Clark682c58d2018-05-16 07:07:07 -04003591The 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 -04003592
3593### Example
3594
3595<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
3596
Cary Clark682c58d2018-05-16 07:07:07 -04003597If <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 -04003598
3599### Example
3600
skia-bookmaker525f9a92018-05-03 06:27:39 +00003601<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003602
Cary Clark682c58d2018-05-16 07:07:07 -04003603<a name='SkPaint_getShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003604## getShader
3605
Cary Clark682c58d2018-05-16 07:07:07 -04003606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3607<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003608</pre>
3609
Cary Clark80247e52018-07-11 16:18:41 -04003610Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003611
Cary Clark682c58d2018-05-16 07:07:07 -04003612Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003613
3614### Return Value
3615
Cary Clark682c58d2018-05-16 07:07:07 -04003616<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003617
3618### Example
3619
3620<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
3621
3622#### Example Output
3623
3624~~~~
3625nullptr == shader
3626nullptr != shader
3627~~~~
3628
3629</fiddle-embed></div>
3630
3631---
3632
Cary Clark682c58d2018-05-16 07:07:07 -04003633<a name='SkPaint_refShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003634## refShader
3635
Cary Clark682c58d2018-05-16 07:07:07 -04003636<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3637<a href='undocumented#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 -04003638</pre>
3639
Cary Clark80247e52018-07-11 16:18:41 -04003640Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003641
Cary Clark682c58d2018-05-16 07:07:07 -04003642Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003643
3644### Return Value
3645
Cary Clark682c58d2018-05-16 07:07:07 -04003646<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003647
3648### Example
3649
3650<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
3651
3652#### Example Output
3653
3654~~~~
3655shader unique: true
3656shader unique: false
3657~~~~
3658
3659</fiddle-embed></div>
3660
3661---
3662
Cary Clark682c58d2018-05-16 07:07:07 -04003663<a name='SkPaint_setShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003664## setShader
3665
Cary Clark682c58d2018-05-16 07:07:07 -04003666<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3667void <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 -04003668</pre>
3669
Cary Clark80247e52018-07-11 16:18:41 -04003670Sets optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003671
Cary Clark682c58d2018-05-16 07:07:07 -04003672Sets <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>.
3673Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003674
3675### Parameters
3676
Cary Clark682c58d2018-05-16 07:07:07 -04003677<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
3678 <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 -04003679 </tr>
3680</table>
3681
3682### Example
3683
skia-bookmakere0a458f2018-07-16 05:29:00 +00003684<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003685
3686---
3687
Cary Clark682c58d2018-05-16 07:07:07 -04003688## <a name='Color_Filter_Methods'>Color Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003689
Cary Clark682c58d2018-05-16 07:07:07 -04003690<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04003691<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 -04003692If <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 -04003693
Cary Clark682c58d2018-05-16 07:07:07 -04003694The 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 -04003695
3696### Example
3697
3698<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
3699
Cary Clark682c58d2018-05-16 07:07:07 -04003700<a name='SkPaint_getColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003701## getColorFilter
3702
Cary Clark682c58d2018-05-16 07:07:07 -04003703<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3704<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003705</pre>
3706
Cary Clark682c58d2018-05-16 07:07:07 -04003707Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3708Does 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 -04003709
3710### Return Value
3711
Cary Clark682c58d2018-05-16 07:07:07 -04003712<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003713
3714### Example
3715
3716<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
3717
3718#### Example Output
3719
3720~~~~
3721nullptr == color filter
3722nullptr != color filter
3723~~~~
3724
3725</fiddle-embed></div>
3726
3727---
3728
Cary Clark682c58d2018-05-16 07:07:07 -04003729<a name='SkPaint_refColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003730## refColorFilter
3731
Cary Clark682c58d2018-05-16 07:07:07 -04003732<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3733<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 -04003734</pre>
3735
Cary Clark682c58d2018-05-16 07:07:07 -04003736Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3737Increases <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 -04003738
3739### Return Value
3740
Cary Clark682c58d2018-05-16 07:07:07 -04003741<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04003742
3743### Example
3744
3745<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3746
3747#### Example Output
3748
3749~~~~
3750color filter unique: true
3751color filter unique: false
3752~~~~
3753
3754</fiddle-embed></div>
3755
3756---
3757
Cary Clark682c58d2018-05-16 07:07:07 -04003758<a name='SkPaint_setColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003759## setColorFilter
3760
Cary Clark682c58d2018-05-16 07:07:07 -04003761<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3762void <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 -04003763</pre>
3764
Cary Clark682c58d2018-05-16 07:07:07 -04003765Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3766<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 -04003767
Cary Clark682c58d2018-05-16 07:07:07 -04003768Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003769
3770### Parameters
3771
Cary Clark682c58d2018-05-16 07:07:07 -04003772<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3773 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003774 </tr>
3775</table>
3776
3777### Example
3778
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003779<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003780
3781---
3782
Cary Clark682c58d2018-05-16 07:07:07 -04003783## <a name='Blend_Mode_Methods'>Blend Mode Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003784
Cary Clark224c7002018-06-27 11:00:21 -04003785<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3786The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003787over the destination color.
3788
3789### Example
3790
Cary Clark83647062018-07-18 16:21:51 -04003791<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003792
3793### See Also
3794
Cary Clark224c7002018-06-27 11:00:21 -04003795<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003796
Cary Clark682c58d2018-05-16 07:07:07 -04003797<a name='SkPaint_getBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003798## getBlendMode
3799
Cary Clark682c58d2018-05-16 07:07:07 -04003800<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003801<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003802</pre>
3803
Cary Clark224c7002018-06-27 11:00:21 -04003804Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
3805By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003806
3807### Return Value
3808
3809mode used to combine source color with destination color
3810
3811### Example
3812
skia-bookmaker525f9a92018-05-03 06:27:39 +00003813<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003814
3815#### Example Output
3816
3817~~~~
3818kSrcOver == getBlendMode
3819kSrcOver != getBlendMode
3820~~~~
3821
3822</fiddle-embed></div>
3823
3824---
3825
Cary Clark682c58d2018-05-16 07:07:07 -04003826<a name='SkPaint_isSrcOver'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003827## isSrcOver
3828
Cary Clark682c58d2018-05-16 07:07:07 -04003829<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3830bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003831</pre>
3832
Cary Clark224c7002018-06-27 11:00:21 -04003833Returns 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 -04003834
3835### Return Value
3836
Cary Clark224c7002018-06-27 11:00:21 -04003837true 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 -04003838
3839### Example
3840
3841<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3842
3843#### Example Output
3844
3845~~~~
3846isSrcOver == true
3847isSrcOver != true
3848~~~~
3849
3850</fiddle-embed></div>
3851
3852---
3853
Cary Clark682c58d2018-05-16 07:07:07 -04003854<a name='SkPaint_setBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003855## setBlendMode
3856
Cary Clark682c58d2018-05-16 07:07:07 -04003857<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003858void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003859</pre>
3860
Cary Clark224c7002018-06-27 11:00:21 -04003861Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003862Does not check for valid input.
3863
3864### Parameters
3865
Cary Clark682c58d2018-05-16 07:07:07 -04003866<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark224c7002018-06-27 11:00:21 -04003867 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003868 </tr>
3869</table>
3870
3871### Example
3872
3873<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3874
3875#### Example Output
3876
3877~~~~
3878isSrcOver == true
3879isSrcOver != true
3880~~~~
3881
3882</fiddle-embed></div>
3883
3884---
3885
Cary Clark682c58d2018-05-16 07:07:07 -04003886## <a name='Path_Effect_Methods'>Path Effect Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003887
Cary Clark682c58d2018-05-16 07:07:07 -04003888<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3889<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3890If <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 -04003891
3892### Example
3893
3894<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3895
3896### See Also
3897
Cary Clark682c58d2018-05-16 07:07:07 -04003898<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003899
Cary Clark682c58d2018-05-16 07:07:07 -04003900<a name='SkPaint_getPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003901## getPathEffect
3902
Cary Clark682c58d2018-05-16 07:07:07 -04003903<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3904<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003905</pre>
3906
Cary Clark682c58d2018-05-16 07:07:07 -04003907Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3908Does 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 -04003909
3910### Return Value
3911
Cary Clark682c58d2018-05-16 07:07:07 -04003912<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003913
3914### Example
3915
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003916<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003917
3918#### Example Output
3919
3920~~~~
3921nullptr == path effect
3922nullptr != path effect
3923~~~~
3924
3925</fiddle-embed></div>
3926
3927---
3928
Cary Clark682c58d2018-05-16 07:07:07 -04003929<a name='SkPaint_refPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003930## refPathEffect
3931
Cary Clark682c58d2018-05-16 07:07:07 -04003932<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3933<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 -04003934</pre>
3935
Cary Clark682c58d2018-05-16 07:07:07 -04003936Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3937Increases <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 -04003938
3939### Return Value
3940
Cary Clark682c58d2018-05-16 07:07:07 -04003941<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003942
3943### Example
3944
Cary Clark83647062018-07-18 16:21:51 -04003945<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003946
3947#### Example Output
3948
3949~~~~
3950path effect unique: true
3951path effect unique: false
3952~~~~
3953
3954</fiddle-embed></div>
3955
3956---
3957
Cary Clark682c58d2018-05-16 07:07:07 -04003958<a name='SkPaint_setPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003959## setPathEffect
3960
Cary Clark682c58d2018-05-16 07:07:07 -04003961<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3962void <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 -04003963</pre>
3964
Cary Clark682c58d2018-05-16 07:07:07 -04003965Sets <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
3966<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003967
Cary Clark682c58d2018-05-16 07:07:07 -04003968Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003969
3970### Parameters
3971
Cary Clark682c58d2018-05-16 07:07:07 -04003972<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3973 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003974 </tr>
3975</table>
3976
3977### Example
3978
3979<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3980
3981---
3982
Cary Clark682c58d2018-05-16 07:07:07 -04003983## <a name='Mask_Filter_Methods'>Mask Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003984
Cary Clark682c58d2018-05-16 07:07:07 -04003985<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3986<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003987
Cary Clark682c58d2018-05-16 07:07:07 -04003988<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3989creating 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 -04003990modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003991
3992### Example
3993
Cary Clark681287e2018-03-16 11:34:15 -04003994<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003995
Cary Clark682c58d2018-05-16 07:07:07 -04003996<a name='SkPaint_getMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003997## getMaskFilter
3998
Cary Clark682c58d2018-05-16 07:07:07 -04003999<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4000<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004001</pre>
4002
Cary Clark682c58d2018-05-16 07:07:07 -04004003Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
4004Does 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 -04004005
4006### Return Value
4007
Cary Clark682c58d2018-05-16 07:07:07 -04004008<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004009
4010### Example
4011
Cary Clark681287e2018-03-16 11:34:15 -04004012<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04004013
4014#### Example Output
4015
4016~~~~
4017nullptr == mask filter
4018nullptr != mask filter
4019~~~~
4020
4021</fiddle-embed></div>
4022
4023---
4024
Cary Clark682c58d2018-05-16 07:07:07 -04004025<a name='SkPaint_refMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004026## refMaskFilter
4027
Cary Clark682c58d2018-05-16 07:07:07 -04004028<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4029<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 -04004030</pre>
4031
Cary Clark682c58d2018-05-16 07:07:07 -04004032Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04004033
Cary Clark682c58d2018-05-16 07:07:07 -04004034Increases <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 -04004035
4036### Return Value
4037
Cary Clark682c58d2018-05-16 07:07:07 -04004038<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004039
4040### Example
4041
Cary Clark83647062018-07-18 16:21:51 -04004042<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04004043
4044#### Example Output
4045
4046~~~~
4047mask filter unique: true
4048mask filter unique: false
4049~~~~
4050
4051</fiddle-embed></div>
4052
4053---
4054
Cary Clark682c58d2018-05-16 07:07:07 -04004055<a name='SkPaint_setMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004056## setMaskFilter
4057
Cary Clark682c58d2018-05-16 07:07:07 -04004058<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4059void <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 -04004060</pre>
4061
Cary Clark682c58d2018-05-16 07:07:07 -04004062Sets <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
4063<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
4064<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04004065
Cary Clark682c58d2018-05-16 07:07:07 -04004066Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004067
4068### Parameters
4069
Cary Clark682c58d2018-05-16 07:07:07 -04004070<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
4071 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04004072 </tr>
4073</table>
4074
4075### Example
4076
Cary Clark681287e2018-03-16 11:34:15 -04004077<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004078
4079---
4080
Cary Clark682c58d2018-05-16 07:07:07 -04004081## <a name='Typeface_Methods'>Typeface Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004082
Cary Clark682c58d2018-05-16 07:07:07 -04004083<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
4084<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
4085The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04004086implementation.
4087
4088### Example
4089
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004090<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004091
Cary Clark682c58d2018-05-16 07:07:07 -04004092<a name='SkPaint_getTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004093## getTypeface
4094
Cary Clark682c58d2018-05-16 07:07:07 -04004095<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4096<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004097</pre>
4098
Cary Clark682c58d2018-05-16 07:07:07 -04004099Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
Cary Clark81abc432018-06-25 16:30:08 -04004100Does not alter <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004101
4102### Return Value
4103
Cary Clark682c58d2018-05-16 07:07:07 -04004104<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004105
4106### Example
4107
Cary Clarkf9603982018-07-17 08:20:27 -04004108<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04004109
4110#### Example Output
4111
4112~~~~
4113nullptr == typeface
4114nullptr != typeface
4115~~~~
4116
4117</fiddle-embed></div>
4118
4119---
4120
Cary Clark682c58d2018-05-16 07:07:07 -04004121<a name='SkPaint_refTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004122## refTypeface
4123
Cary Clark682c58d2018-05-16 07:07:07 -04004124<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4125<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 -04004126</pre>
4127
Cary Clark682c58d2018-05-16 07:07:07 -04004128Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004129
4130### Return Value
4131
Cary Clark682c58d2018-05-16 07:07:07 -04004132<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004133
4134### Example
4135
Cary Clark83647062018-07-18 16:21:51 -04004136<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04004137
4138#### Example Output
4139
4140~~~~
4141typeface1 != typeface2
4142typeface1 == typeface2
4143~~~~
4144
4145</fiddle-embed></div>
4146
4147---
4148
Cary Clark682c58d2018-05-16 07:07:07 -04004149<a name='SkPaint_setTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004150## setTypeface
4151
Cary Clark682c58d2018-05-16 07:07:07 -04004152<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4153void <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 -04004154</pre>
4155
Cary Clark682c58d2018-05-16 07:07:07 -04004156Sets <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>.
4157Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
4158<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004159
4160### Parameters
4161
Cary Clark682c58d2018-05-16 07:07:07 -04004162<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
4163 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004164 </tr>
4165</table>
4166
4167### Example
4168
Cary Clark71961fb2018-01-05 14:21:59 -05004169<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004170
4171---
4172
Cary Clark682c58d2018-05-16 07:07:07 -04004173## <a name='Image_Filter_Methods'>Image Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004174
Cary Clark682c58d2018-05-16 07:07:07 -04004175<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 -04004176with <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,
4177which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04004178
Cary Clark682c58d2018-05-16 07:07:07 -04004179<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>
4180can 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.
4181<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
4182<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004183
4184### Example
4185
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004186<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004187
Cary Clark682c58d2018-05-16 07:07:07 -04004188<a name='SkPaint_getImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004189## getImageFilter
4190
Cary Clark682c58d2018-05-16 07:07:07 -04004191<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4192<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004193</pre>
4194
Cary Clark682c58d2018-05-16 07:07:07 -04004195Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4196Does 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 -04004197
4198### Return Value
4199
Cary Clark682c58d2018-05-16 07:07:07 -04004200<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004201
4202### Example
4203
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004204<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04004205
4206#### Example Output
4207
4208~~~~
4209nullptr == image filter
4210nullptr != image filter
4211~~~~
4212
4213</fiddle-embed></div>
4214
4215---
4216
Cary Clark682c58d2018-05-16 07:07:07 -04004217<a name='SkPaint_refImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004218## refImageFilter
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#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 -04004222</pre>
4223
Cary Clark682c58d2018-05-16 07:07:07 -04004224Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4225Increases <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 -04004226
4227### Return Value
4228
Cary Clark682c58d2018-05-16 07:07:07 -04004229<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004230
4231### Example
4232
4233<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
4234
4235#### Example Output
4236
4237~~~~
4238image filter unique: true
4239image filter unique: false
4240~~~~
4241
4242</fiddle-embed></div>
4243
4244---
4245
Cary Clark682c58d2018-05-16 07:07:07 -04004246<a name='SkPaint_setImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004247## setImageFilter
4248
Cary Clark682c58d2018-05-16 07:07:07 -04004249<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4250void <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 -04004251</pre>
4252
Cary Clark682c58d2018-05-16 07:07:07 -04004253Sets <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
4254<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 -04004255on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04004256
Cary Clark682c58d2018-05-16 07:07:07 -04004257Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004258
4259### Parameters
4260
Cary Clark682c58d2018-05-16 07:07:07 -04004261<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
4262 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04004263 </tr>
4264</table>
4265
4266### Example
4267
4268<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
4269
4270---
4271
Cary Clark682c58d2018-05-16 07:07:07 -04004272## <a name='Draw_Looper_Methods'>Draw Looper Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004273
Cary Clark682c58d2018-05-16 07:07:07 -04004274<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 -04004275to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04004276
Cary Clark682c58d2018-05-16 07:07:07 -04004277<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
4278<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
4279Set <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 -04004280
4281### Example
4282
4283<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
4284
Cary Clark682c58d2018-05-16 07:07:07 -04004285<a name='SkPaint_getDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004286## getDrawLooper
4287
Cary Clark682c58d2018-05-16 07:07:07 -04004288<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4289<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004290</pre>
4291
Cary Clark682c58d2018-05-16 07:07:07 -04004292Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4293Does 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 -04004294
4295### Return Value
4296
Cary Clark682c58d2018-05-16 07:07:07 -04004297<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004298
4299### Example
4300
4301<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
4302
4303#### Example Output
4304
4305~~~~
4306nullptr == draw looper
4307nullptr != draw looper
4308~~~~
4309
4310</fiddle-embed></div>
4311
4312---
4313
Cary Clark682c58d2018-05-16 07:07:07 -04004314<a name='SkPaint_refDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004315## refDrawLooper
4316
Cary Clark682c58d2018-05-16 07:07:07 -04004317<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4318<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 -04004319</pre>
4320
Cary Clark682c58d2018-05-16 07:07:07 -04004321Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4322Increases <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 -04004323
4324### Return Value
4325
Cary Clark682c58d2018-05-16 07:07:07 -04004326<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004327
4328### Example
4329
4330<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
4331
4332#### Example Output
4333
4334~~~~
4335draw looper unique: true
4336draw looper unique: false
4337~~~~
4338
4339</fiddle-embed></div>
4340
4341---
4342
Cary Clark682c58d2018-05-16 07:07:07 -04004343<a name='SkPaint_getLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004344## getLooper
4345
Cary Clark682c58d2018-05-16 07:07:07 -04004346<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4347<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004348</pre>
4349
Cary Clark682c58d2018-05-16 07:07:07 -04004350Deprecated.
4351
Cary Clark12799e12017-07-28 15:18:29 -04004352---
4353
Cary Clark682c58d2018-05-16 07:07:07 -04004354<a name='SkPaint_setDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004355## setDrawLooper
4356
Cary Clark682c58d2018-05-16 07:07:07 -04004357<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4358void <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 -04004359</pre>
4360
Cary Clark682c58d2018-05-16 07:07:07 -04004361Sets <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
4362<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 -04004363drawing unaltered.
4364
Cary Clark682c58d2018-05-16 07:07:07 -04004365Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004366
4367### Parameters
4368
Cary Clark682c58d2018-05-16 07:07:07 -04004369<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
4370 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004371 </tr>
4372</table>
4373
4374### Example
4375
4376<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
4377
4378---
4379
Cary Clark682c58d2018-05-16 07:07:07 -04004380<a name='SkPaint_setLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004381## setLooper
4382
Cary Clark682c58d2018-05-16 07:07:07 -04004383<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4384void <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 -04004385</pre>
4386
Cary Clark682c58d2018-05-16 07:07:07 -04004387Deprecated.
4388
Cary Clark12799e12017-07-28 15:18:29 -04004389---
4390
Cary Clark682c58d2018-05-16 07:07:07 -04004391## <a name='Text_Align'>Text Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004392
Cary Clark682c58d2018-05-16 07:07:07 -04004393## <a name='SkPaint_Align'>Enum SkPaint::Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004394
Cary Clarka560c472017-11-27 10:44:06 -05004395<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004396 enum <a href='#SkPaint_Align'>Align</a> {
4397 <a href='#SkPaint_kLeft_Align'>kLeft Align</a>,
4398 <a href='#SkPaint_kCenter_Align'>kCenter Align</a>,
4399 <a href='#SkPaint_kRight_Align'>kRight Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004400 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04004401
Cary Clark682c58d2018-05-16 07:07:07 -04004402 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05004403</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004404
Cary Clark682c58d2018-05-16 07:07:07 -04004405<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
4406<a href='#SkPaint_Align'>Align</a> affects <a href='undocumented#Glyph'>Glyphs</a> drawn with: <a href='SkCanvas_Reference#SkCanvas_drawText'>SkCanvas::drawText</a>, <a href='SkCanvas_Reference#SkCanvas_drawPosText'>SkCanvas::drawPosText</a>,
Cary Clark153e76d2018-08-28 11:48:28 -04004407<a href='SkCanvas_Reference#SkCanvas_drawPosTextH'>SkCanvas::drawPosTextH</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextRSXform'>SkCanvas::drawTextRSXform</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextBlob'>SkCanvas::drawTextBlob</a>,
Cary Clark682c58d2018-05-16 07:07:07 -04004408and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
4409as 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 -04004410
4411The text position is set by the font for both horizontal and vertical text.
4412Typically, for horizontal text, the position is to the left side of the glyph on the
4413base line; and for vertical text, the position is the horizontal center of the glyph
4414at the caps height.
4415
Cary Clark682c58d2018-05-16 07:07:07 -04004416<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 -04004417using the metrics returned by the font.
4418
Cary Clark682c58d2018-05-16 07:07:07 -04004419<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004420
4421### Constants
4422
Cary Clark682c58d2018-05-16 07:07:07 -04004423<table style='border-collapse: collapse; width: 62.5em'>
4424 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4425<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4426<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4427 <tr style='background-color: #f0f0f0; '>
4428 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
4429 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4430 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4431Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05004432</td>
Cary Clark12799e12017-07-28 15:18:29 -04004433 </tr>
4434 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004435 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
4436 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4437 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4438Moves the glyph half its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear, and
4439half its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
4440</td>
4441 </tr>
4442 <tr style='background-color: #f0f0f0; '>
4443 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
4444 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4445 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4446Moves the glyph by its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear,
4447and 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 -05004448</td>
Cary Clark12799e12017-07-28 15:18:29 -04004449 </tr>
4450 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004451 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
4452 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4453 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04004454May be used to verify that <a href='#SkPaint_Align'>Align</a> is a legal value.
4455</td>
Cary Clark12799e12017-07-28 15:18:29 -04004456 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004457</table>
Cary Clark12799e12017-07-28 15:18:29 -04004458
4459### Example
4460
Cary Clark1a8d7622018-03-05 13:26:16 -05004461<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
4462</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004463
4464### Example
4465
Cary Clark682c58d2018-05-16 07:07:07 -04004466<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 -05004467</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004468
Cary Clark682c58d2018-05-16 07:07:07 -04004469<a name='SkPaint_getTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004470## getTextAlign
4471
Cary Clark682c58d2018-05-16 07:07:07 -04004472<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4473<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004474</pre>
4475
Cary Clark682c58d2018-05-16 07:07:07 -04004476Returns <a href='#Text_Align'>Text Align</a>.
4477Returns <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 -04004478
4479### Return Value
4480
4481text placement relative to position
4482
4483### Example
4484
4485<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
4486
4487#### Example Output
4488
4489~~~~
4490kLeft_Align == default
4491~~~~
4492
4493</fiddle-embed></div>
4494
4495---
4496
Cary Clark682c58d2018-05-16 07:07:07 -04004497<a name='SkPaint_setTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004498## setTextAlign
4499
Cary Clark682c58d2018-05-16 07:07:07 -04004500<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4501void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04004502</pre>
4503
Cary Clark682c58d2018-05-16 07:07:07 -04004504Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
4505Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04004506
4507### Parameters
4508
Cary Clark682c58d2018-05-16 07:07:07 -04004509<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
4510 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04004511 </tr>
4512</table>
4513
4514### Example
4515
Cary Clark682c58d2018-05-16 07:07:07 -04004516<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 -05004517alignment out of range has no effect.
4518</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004519
4520---
4521
Cary Clark682c58d2018-05-16 07:07:07 -04004522## <a name='Text_Size'>Text Size</a>
Cary Clark08895c42018-02-01 09:37:32 -05004523
Cary Clark682c58d2018-05-16 07:07:07 -04004524<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
4525<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
4526<a href='#Text_Size'>Text Size</a> defaults to 12.
4527Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04004528
4529### Example
4530
4531<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
4532
Cary Clark682c58d2018-05-16 07:07:07 -04004533<a name='SkPaint_getTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004534## getTextSize
4535
Cary Clark682c58d2018-05-16 07:07:07 -04004536<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4537<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004538</pre>
4539
Cary Clark682c58d2018-05-16 07:07:07 -04004540Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04004541
4542### Return Value
4543
4544typographic height of text
4545
4546### Example
4547
skia-bookmaker233c6522018-07-04 05:33:26 +00004548<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004549
4550---
4551
Cary Clark682c58d2018-05-16 07:07:07 -04004552<a name='SkPaint_setTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004553## setTextSize
4554
Cary Clark682c58d2018-05-16 07:07:07 -04004555<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4556void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04004557</pre>
4558
Cary Clark682c58d2018-05-16 07:07:07 -04004559Sets <a href='#Text_Size'>Text Size</a> in points.
4560Has 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 -04004561
4562### Parameters
4563
Cary Clark682c58d2018-05-16 07:07:07 -04004564<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
4565 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004566 </tr>
4567</table>
4568
4569### Example
4570
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004571<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004572
4573---
4574
Cary Clark682c58d2018-05-16 07:07:07 -04004575## <a name='Text_Scale_X'>Text Scale X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004576
Cary Clark682c58d2018-05-16 07:07:07 -04004577<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
4578<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004579is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004580<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
4581<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04004582
4583### Example
4584
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004585<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004586
Cary Clark682c58d2018-05-16 07:07:07 -04004587<a name='SkPaint_getTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004588## getTextScaleX
4589
Cary Clark682c58d2018-05-16 07:07:07 -04004590<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4591<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004592</pre>
4593
Cary Clark682c58d2018-05-16 07:07:07 -04004594Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004595Default value is 1.
4596
4597### Return Value
4598
4599text horizontal scale
4600
4601### Example
4602
4603<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
4604
4605---
4606
Cary Clark682c58d2018-05-16 07:07:07 -04004607<a name='SkPaint_setTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004608## setTextScaleX
4609
Cary Clark682c58d2018-05-16 07:07:07 -04004610<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4611void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04004612</pre>
4613
Cary Clark682c58d2018-05-16 07:07:07 -04004614Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004615Default value is 1.
4616
4617### Parameters
4618
Cary Clark682c58d2018-05-16 07:07:07 -04004619<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
4620 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04004621 </tr>
4622</table>
4623
4624### Example
4625
4626<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
4627
4628---
4629
Cary Clark682c58d2018-05-16 07:07:07 -04004630## <a name='Text_Skew_X'>Text Skew X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004631
Cary Clark682c58d2018-05-16 07:07:07 -04004632<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
4633<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004634is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004635<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
4636<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04004637
4638### Example
4639
4640<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
4641
Cary Clark682c58d2018-05-16 07:07:07 -04004642<a name='SkPaint_getTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004643## getTextSkewX
4644
Cary Clark682c58d2018-05-16 07:07:07 -04004645<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4646<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004647</pre>
4648
Cary Clark682c58d2018-05-16 07:07:07 -04004649Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004650Default value is zero.
4651
4652### Return Value
4653
4654additional shear in x-axis relative to y-axis
4655
4656### Example
4657
Cary Clark7f644ec2018-07-19 10:50:44 -04004658<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004659
4660---
4661
Cary Clark682c58d2018-05-16 07:07:07 -04004662<a name='SkPaint_setTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004663## setTextSkewX
4664
Cary Clark682c58d2018-05-16 07:07:07 -04004665<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4666void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04004667</pre>
4668
Cary Clark682c58d2018-05-16 07:07:07 -04004669Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004670Default value is zero.
4671
4672### Parameters
4673
Cary Clark682c58d2018-05-16 07:07:07 -04004674<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
4675 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04004676 </tr>
4677</table>
4678
4679### Example
4680
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004681<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004682
4683---
4684
Cary Clark682c58d2018-05-16 07:07:07 -04004685## <a name='Text_Encoding'>Text Encoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004686
Cary Clark682c58d2018-05-16 07:07:07 -04004687## <a name='SkPaint_TextEncoding'>Enum SkPaint::TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004688
Cary Clarka560c472017-11-27 10:44:06 -05004689<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004690 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
4691 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>,
4692 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>,
4693 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>,
4694 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004695 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004696</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004697
Cary Clark682c58d2018-05-16 07:07:07 -04004698<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
4699size, 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 -04004700
Cary Clarka560c472017-11-27 10:44:06 -05004701Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004702All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04004703in the total storage required.
4704
Cary Clark682c58d2018-05-16 07:07:07 -04004705<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 -04004706
Cary Clark682c58d2018-05-16 07:07:07 -04004707<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 -04004708
Cary Clark682c58d2018-05-16 07:07:07 -04004709<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 -04004710
Cary Clark682c58d2018-05-16 07:07:07 -04004711<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 -04004712A glyph index is a 16-bit word.
4713
Cary Clark682c58d2018-05-16 07:07:07 -04004714<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 -04004715
4716### Constants
4717
Cary Clark682c58d2018-05-16 07:07:07 -04004718<table style='border-collapse: collapse; width: 62.5em'>
4719 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4720<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4721<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4722 <tr style='background-color: #f0f0f0; '>
4723 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
4724 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4725 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4726uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04004727 </tr>
4728 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004729 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
4730 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4731 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4732uses two byte words to represent most of Unicode</td>
4733 </tr>
4734 <tr style='background-color: #f0f0f0; '>
4735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
4736 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4737 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4738uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04004739 </tr>
4740 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004741 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
4742 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4744uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04004745 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004746</table>
Cary Clark12799e12017-07-28 15:18:29 -04004747
4748### Example
4749
Cary Clarka560c472017-11-27 10:44:06 -05004750<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4751Second line is encoded in UTF-16.
4752Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04004753Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05004754</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004755
Cary Clark682c58d2018-05-16 07:07:07 -04004756<a name='SkPaint_getTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004757## getTextEncoding
4758
Cary Clark682c58d2018-05-16 07:07:07 -04004759<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4760<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004761</pre>
4762
Cary Clark682c58d2018-05-16 07:07:07 -04004763Returns <a href='#Text_Encoding'>Text Encoding</a>.
4764<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 -04004765
4766### Return Value
4767
Cary Clark682c58d2018-05-16 07:07:07 -04004768one 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
4769<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004770
4771### Example
4772
skia-bookmaker525f9a92018-05-03 06:27:39 +00004773<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004774
4775#### Example Output
4776
4777~~~~
4778kUTF8_TextEncoding == text encoding
4779kGlyphID_TextEncoding == text encoding
4780~~~~
4781
4782</fiddle-embed></div>
4783
4784---
4785
Cary Clark682c58d2018-05-16 07:07:07 -04004786<a name='SkPaint_setTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004787## setTextEncoding
4788
Cary Clark682c58d2018-05-16 07:07:07 -04004789<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4790void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004791</pre>
4792
Cary Clark682c58d2018-05-16 07:07:07 -04004793Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4794<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4795Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004796
4797### Parameters
4798
Cary Clark682c58d2018-05-16 07:07:07 -04004799<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4800 <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
4801<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004802 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004803#
4804
Cary Clark12799e12017-07-28 15:18:29 -04004805</table>
4806
4807### Example
4808
Cary Clark75fd4492018-06-20 12:45:16 -04004809<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004810
4811#### Example Output
4812
4813~~~~
48144 != text encoding
4815~~~~
4816
4817</fiddle-embed></div>
4818
4819---
4820
Cary Clark682c58d2018-05-16 07:07:07 -04004821## <a name='Font_Metrics'>Font Metrics</a>
Cary Clark08895c42018-02-01 09:37:32 -05004822
Cary Clark682c58d2018-05-16 07:07:07 -04004823<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>.
4824The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4825<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004826
Cary Clark682c58d2018-05-16 07:07:07 -04004827<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 -04004828X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4829are positive.
4830Y-axis values above the baseline are negative, and below the baseline are positive.
4831
4832### Example
4833
Ben Wagnere5806492017-11-09 12:08:31 -05004834<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004835
Cary Clark682c58d2018-05-16 07:07:07 -04004836# <a name='SkPaint_FontMetrics'>Struct SkPaint::FontMetrics</a>
4837
4838## <a name='Font_Metrics_Constant'>Constant</a>
4839
4840
Cary Clarkd2ca79c2018-08-10 13:09:13 -04004841SkPaint::FontMetrics related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
Cary Clark682c58d2018-05-16 07:07:07 -04004842<table style='border-collapse: collapse; width: 62.5em'>
4843 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4844<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4845 <tr style='background-color: #f0f0f0; '>
4846 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a></td>
4847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>valid <a href='#Font_Metrics'>Font Metrics</a></td>
4848 </tr>
4849 <tr>
4850 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a></td>
4851 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is valid</td>
4852 </tr>
4853 <tr style='background-color: #f0f0f0; '>
4854 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a></td>
4855 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is valid</td>
4856 </tr>
4857 <tr>
4858 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a></td>
4859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is valid</td>
4860 </tr>
4861 <tr style='background-color: #f0f0f0; '>
4862 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a></td>
4863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is valid</td>
4864 </tr>
4865</table>
4866
Cary Clark682c58d2018-05-16 07:07:07 -04004867## <a name='Font_Metrics_Member_Function'>Member_Function</a>
4868
4869
Cary Clarkd2ca79c2018-08-10 13:09:13 -04004870SkPaint::FontMetrics member functions read and modify the structure properties.
Cary Clark682c58d2018-05-16 07:07:07 -04004871<table style='border-collapse: collapse; width: 62.5em'>
4872 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4873<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4874 <tr style='background-color: #f0f0f0; '>
4875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a></td>
4876 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout position if set</td>
4877 </tr>
4878 <tr>
4879 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a></td>
4880 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout thickness if set</td>
4881 </tr>
4882 <tr style='background-color: #f0f0f0; '>
4883 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a></td>
4884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline position if set</td>
4885 </tr>
4886 <tr>
4887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a></td>
4888 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline thickness if set</td>
4889 </tr>
4890</table>
4891
Cary Clark682c58d2018-05-16 07:07:07 -04004892## <a name='Font_Metrics_Member'>Member</a>
4893
4894
Cary Clarkd2ca79c2018-08-10 13:09:13 -04004895SkPaint::FontMetrics members may be read and written directly without using a member function.
Cary Clark682c58d2018-05-16 07:07:07 -04004896<table style='border-collapse: collapse; width: 62.5em'>
4897 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4898<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4899 <tr style='background-color: #f0f0f0; '>
4900 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAscent'>fAscent</a></td>
4901 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve above baseline</td>
4902 </tr>
4903 <tr>
4904 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a></td>
4905 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>average character width</td>
4906 </tr>
4907 <tr style='background-color: #f0f0f0; '>
4908 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fBottom'>fBottom</a></td>
4909 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent below baseline</td>
4910 </tr>
4911 <tr>
4912 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a></td>
4913 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of an upper-case letter</td>
4914 </tr>
4915 <tr style='background-color: #f0f0f0; '>
4916 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fDescent'>fDescent</a></td>
4917 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve below baseline</td>
4918 </tr>
4919 <tr>
4920 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fFlags'>fFlags</a></td>
4921 <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>
4922 </tr>
4923 <tr style='background-color: #f0f0f0; '>
4924 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fLeading'>fLeading</a></td>
4925 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to add between lines</td>
4926 </tr>
4927 <tr>
4928 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a></td>
4929 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum character width</td>
4930 </tr>
4931 <tr style='background-color: #f0f0f0; '>
4932 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a></td>
4933 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout position relative to baseline</td>
4934 </tr>
4935 <tr>
4936 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a></td>
4937 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout thickness</td>
4938 </tr>
4939 <tr style='background-color: #f0f0f0; '>
4940 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fTop'>fTop</a></td>
4941 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent above baseline</td>
4942 </tr>
4943 <tr>
4944 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a></td>
4945 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline position relative to baseline</td>
4946 </tr>
4947 <tr style='background-color: #f0f0f0; '>
4948 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a></td>
4949 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline thickness</td>
4950 </tr>
4951 <tr>
4952 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a></td>
4953 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of lower-case 'x'</td>
4954 </tr>
4955 <tr style='background-color: #f0f0f0; '>
4956 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMax'>fXMax</a></td>
4957 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum x</td>
4958 </tr>
4959 <tr>
4960 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMin'>fXMin</a></td>
4961 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimum x</td>
4962 </tr>
4963</table>
4964
Cary Clarka560c472017-11-27 10:44:06 -05004965<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004966 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4967 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4968 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4969 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4970 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4971 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004972 };
Cary Clark12799e12017-07-28 15:18:29 -04004973
Cary Clark682c58d2018-05-16 07:07:07 -04004974 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4975 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4976 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4977 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4978 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4979 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4980 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4981 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4982 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4983 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4984 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4985 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4986 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4987 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4988 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4989 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004990
Cary Clark682c58d2018-05-16 07:07:07 -04004991 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness(SkScalar* thickness)</a> const;
4992 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition(SkScalar* position)</a> const;
4993 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness(SkScalar* thickness)</a> const;
4994 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark186d08f2018-04-03 08:43:27 -04004995 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004996</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004997
Cary Clark682c58d2018-05-16 07:07:07 -04004998<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
4999computed 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 -04005000not available.
5001
Cary Clark5538c132018-06-14 12:28:14 -04005002All vertical values are relative to the baseline, on a y-axis pointing down.
5003Zero is on the baseline, negative values are above the baseline, and positive
5004values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05005005
Cary Clark682c58d2018-05-16 07:07:07 -04005006<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 -04005007are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05005008
Cary Clark682c58d2018-05-16 07:07:07 -04005009<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 -04005010are valid, since their value may be zero.
5011
Cary Clark682c58d2018-05-16 07:07:07 -04005012## <a name='SkPaint_FontMetrics_FontMetricsFlags'>Enum SkPaint::FontMetrics::FontMetricsFlags</a>
Cary Clark12799e12017-07-28 15:18:29 -04005013
Cary Clarka560c472017-11-27 10:44:06 -05005014<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04005015 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
5016 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
5017 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
5018 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
5019 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04005020 };
Cary Clark1a8d7622018-03-05 13:26:16 -05005021</pre>
Cary Clark12799e12017-07-28 15:18:29 -04005022
Cary Clark682c58d2018-05-16 07:07:07 -04005023<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 -04005024the underline or strikeout metric may be valid and zero.
5025Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
5026
Cary Clark12799e12017-07-28 15:18:29 -04005027### Constants
5028
Cary Clark682c58d2018-05-16 07:07:07 -04005029<table style='border-collapse: collapse; width: 62.5em'>
5030 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
5031<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
5032<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
5033 <tr style='background-color: #f0f0f0; '>
5034 <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>
5035 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
5036 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5037set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005038 </tr>
5039 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005040 <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>
5041 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
5042 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5043set if fUnderlinePosition is valid</td>
5044 </tr>
5045 <tr style='background-color: #f0f0f0; '>
5046 <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>
5047 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
5048 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5049set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005050 </tr>
5051 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005052 <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>
5053 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
5054 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5055set if fStrikeoutPosition is valid</td>
5056 </tr>
5057</table>
5058
5059### Members
5060
5061<table style='border-collapse: collapse; width: 62.5em'>
5062 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
5063<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Name</th>
5064<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
5065 <tr style='background-color: #f0f0f0; '>
5066 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
5067 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
5068 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5069is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005070 </tr>
5071 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005072 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5073 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
5074 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005075Greatest extent above the baseline for any glyph.
5076Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005077</td>
5078 </tr>
5079 <tr style='background-color: #f0f0f0; '>
5080 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5081 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
5082 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005083Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005084Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005085</td>
5086 </tr>
5087 <tr>
5088 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5089 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
5090 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005091Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005092Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005093</td>
5094 </tr>
5095 <tr style='background-color: #f0f0f0; '>
5096 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5097 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
5098 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005099Greatest extent below the baseline for any glyph.
5100Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005101</td>
5102 </tr>
5103 <tr>
5104 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5105 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
5106 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005107Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005108Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005109</td>
5110 </tr>
5111 <tr style='background-color: #f0f0f0; '>
5112 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5113 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
5114 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005115Average character width, if it is available.
5116Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005117</td>
5118 </tr>
5119 <tr>
5120 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5121 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
5122 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5123maximum character width</td>
5124 </tr>
5125 <tr style='background-color: #f0f0f0; '>
5126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5127 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
5128 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005129Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005130Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005131</td>
5132 </tr>
5133 <tr>
5134 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5135 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
5136 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005137Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005138Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005139</td>
5140 </tr>
5141 <tr style='background-color: #f0f0f0; '>
5142 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5143 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
5144 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005145May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005146</td>
5147 </tr>
5148 <tr>
5149 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5150 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
5151 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005152May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005153</td>
5154 </tr>
5155 <tr style='background-color: #f0f0f0; '>
5156 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
5158 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5159If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5160If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
5161</td>
5162 </tr>
5163 <tr>
5164 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5165 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
5166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005167Position of the top of the underline stroke relative to the baseline.
5168Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005169
Cary Clark682c58d2018-05-16 07:07:07 -04005170If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5171If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
5172</td>
5173 </tr>
5174 <tr style='background-color: #f0f0f0; '>
5175 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5176 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
5177 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5178If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5179If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
5180</td>
5181 </tr>
5182 <tr>
5183 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5184 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
5185 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005186Position of the bottom of the strikeout stroke relative to the baseline.
5187Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005188
Cary Clark682c58d2018-05-16 07:07:07 -04005189If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5190If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
5191</td>
5192 </tr>
5193</table>
Cary Clark12799e12017-07-28 15:18:29 -04005194
Cary Clark682c58d2018-05-16 07:07:07 -04005195<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005196## hasUnderlineThickness
5197
Cary Clark682c58d2018-05-16 07:07:07 -04005198<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5199bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005200</pre>
5201
Cary Clark80247e52018-07-11 16:18:41 -04005202Returns 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 -04005203<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,
5204return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005205
5206### Parameters
5207
Cary Clark682c58d2018-05-16 07:07:07 -04005208<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
5209 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005210 </tr>
5211</table>
5212
5213### Return Value
5214
5215true if font specifies underline width
5216
5217---
5218
Cary Clark682c58d2018-05-16 07:07:07 -04005219<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005220## hasUnderlinePosition
5221
Cary Clark682c58d2018-05-16 07:07:07 -04005222<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5223bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005224</pre>
5225
Cary Clark80247e52018-07-11 16:18:41 -04005226Returns 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 -04005227<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,
5228return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005229
5230### Parameters
5231
Cary Clark682c58d2018-05-16 07:07:07 -04005232<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
5233 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005234 </tr>
5235</table>
5236
5237### Return Value
5238
Cary Clark682c58d2018-05-16 07:07:07 -04005239true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005240
5241---
5242
Cary Clark682c58d2018-05-16 07:07:07 -04005243<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005244## hasStrikeoutThickness
5245
Cary Clark682c58d2018-05-16 07:07:07 -04005246<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5247bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005248</pre>
5249
Cary Clark80247e52018-07-11 16:18:41 -04005250Returns 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 -04005251<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,
5252return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005253
5254### Parameters
5255
Cary Clark682c58d2018-05-16 07:07:07 -04005256<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
5257 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005258 </tr>
5259</table>
5260
5261### Return Value
5262
5263true if font specifies strikeout width
5264
5265---
5266
Cary Clark682c58d2018-05-16 07:07:07 -04005267<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005268## hasStrikeoutPosition
5269
Cary Clark682c58d2018-05-16 07:07:07 -04005270<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5271bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005272</pre>
5273
Cary Clark80247e52018-07-11 16:18:41 -04005274Returns 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 -04005275<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,
5276return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005277
5278### Parameters
5279
Cary Clark682c58d2018-05-16 07:07:07 -04005280<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
5281 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005282 </tr>
5283</table>
5284
5285### Return Value
5286
Cary Clark682c58d2018-05-16 07:07:07 -04005287true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005288
5289---
5290
Cary Clark682c58d2018-05-16 07:07:07 -04005291<a name='SkPaint_getFontMetrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005292## getFontMetrics
5293
Cary Clark682c58d2018-05-16 07:07:07 -04005294<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5295<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 -04005296</pre>
5297
Cary Clark682c58d2018-05-16 07:07:07 -04005298Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
5299The 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 -04005300descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005301If <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>.
5302Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5303dimensions 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>,
5304<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
5305Results 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 -04005306is ignored.
5307
5308### Parameters
5309
Cary Clark682c58d2018-05-16 07:07:07 -04005310<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
5311 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
5312 </tr>
5313 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
5314 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04005315 </tr>
5316</table>
5317
5318### Return Value
5319
5320recommended spacing between lines
5321
5322### Example
5323
5324<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
5325
5326### See Also
5327
Cary Clark682c58d2018-05-16 07:07:07 -04005328<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 -04005329
5330---
5331
Cary Clark682c58d2018-05-16 07:07:07 -04005332<a name='SkPaint_getFontSpacing'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005333## getFontSpacing
5334
Cary Clark682c58d2018-05-16 07:07:07 -04005335<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5336<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005337</pre>
5338
5339Returns the recommended spacing between lines: the sum of metrics
5340descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005341Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5342dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
5343Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005344
5345### Return Value
5346
5347recommended spacing between lines
5348
5349### Example
5350
5351<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
5352
5353#### Example Output
5354
5355~~~~
5356textSize: 12 fontSpacing: 13.9688
5357textSize: 18 fontSpacing: 20.9531
5358textSize: 24 fontSpacing: 27.9375
5359textSize: 32 fontSpacing: 37.25
5360~~~~
5361
5362</fiddle-embed></div>
5363
5364---
5365
Cary Clark682c58d2018-05-16 07:07:07 -04005366<a name='SkPaint_getFontBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005367## getFontBounds
5368
Cary Clark682c58d2018-05-16 07:07:07 -04005369<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5370<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005371</pre>
5372
Cary Clark682c58d2018-05-16 07:07:07 -04005373Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
5374Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
5375ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
5376and <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 -04005377
Cary Clark682c58d2018-05-16 07:07:07 -04005378If <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,
5379returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
5380<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 -04005381
5382### Return Value
5383
Cary Clark682c58d2018-05-16 07:07:07 -04005384union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04005385
5386### Example
5387
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005388<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04005389
5390#### Example Output
5391
5392~~~~
5393metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5394font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5395~~~~
5396
5397</fiddle-embed></div>
5398
5399---
5400
Cary Clark682c58d2018-05-16 07:07:07 -04005401<a name='SkPaint_textToGlyphs'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005402## textToGlyphs
5403
Cary Clark682c58d2018-05-16 07:07:07 -04005404<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5405int <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 -04005406</pre>
5407
Cary Clark682c58d2018-05-16 07:07:07 -04005408Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
5409Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
5410<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>.
5411<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04005412
Cary Clark682c58d2018-05-16 07:07:07 -04005413Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04005414
Cary Clark682c58d2018-05-16 07:07:07 -04005415If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
5416If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04005417
Cary Clark682c58d2018-05-16 07:07:07 -04005418If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
5419<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04005420
5421### Parameters
5422
Cary Clark682c58d2018-05-16 07:07:07 -04005423<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
5424 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5425 </tr>
5426 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
5427 <td>length of character storage in bytes</td>
5428 </tr>
5429 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
5430 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005431 </tr>
5432</table>
5433
5434### Return Value
5435
Cary Clark682c58d2018-05-16 07:07:07 -04005436number 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 -04005437
5438### Example
5439
5440<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
5441
5442---
5443
Cary Clark682c58d2018-05-16 07:07:07 -04005444<a name='SkPaint_countText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005445## countText
5446
Cary Clark682c58d2018-05-16 07:07:07 -04005447<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5448int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005449</pre>
5450
Cary Clark682c58d2018-05-16 07:07:07 -04005451Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
5452Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
5453Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005454
5455### Parameters
5456
Cary Clark682c58d2018-05-16 07:07:07 -04005457<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
5458 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5459 </tr>
5460 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
5461 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04005462 </tr>
5463</table>
5464
5465### Return Value
5466
Cary Clark682c58d2018-05-16 07:07:07 -04005467number 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 -04005468
5469### Example
5470
Cary Clarkf9603982018-07-17 08:20:27 -04005471<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04005472
5473#### Example Output
5474
5475~~~~
5476count = 5
5477~~~~
5478
5479</fiddle-embed></div>
5480
5481---
5482
Cary Clark682c58d2018-05-16 07:07:07 -04005483<a name='SkPaint_containsText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005484## containsText
5485
Cary Clark682c58d2018-05-16 07:07:07 -04005486<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5487bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005488</pre>
5489
Cary Clark682c58d2018-05-16 07:07:07 -04005490Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
5491Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
5492<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005493
Cary Clark682c58d2018-05-16 07:07:07 -04005494If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
5495returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
5496does 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 -04005497
Cary Clark682c58d2018-05-16 07:07:07 -04005498Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04005499
5500### Parameters
5501
Cary Clark682c58d2018-05-16 07:07:07 -04005502<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
5503 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
5504 </tr>
5505 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
5506 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04005507 </tr>
5508</table>
5509
5510### Return Value
5511
Cary Clark682c58d2018-05-16 07:07:07 -04005512true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04005513
Ruiqi Mao94d57c42018-07-02 15:20:10 -04005514<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05005515corresponding to the Unicode surrogate code point.
5516</div>
Cary Clark12799e12017-07-28 15:18:29 -04005517
5518#### Example Output
5519
5520~~~~
55210x00b0 == has char
55220xd800 != has char
5523~~~~
5524
Cary Clark12799e12017-07-28 15:18:29 -04005525### Example
5526
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00005527<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 -04005528that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05005529</div>
Cary Clark12799e12017-07-28 15:18:29 -04005530
5531#### Example Output
5532
5533~~~~
55340x01ff == has glyph
55350x0000 != has glyph
55360xffff == has glyph
5537~~~~
5538
5539</fiddle-embed></div>
5540
5541### See Also
5542
Cary Clark682c58d2018-05-16 07:07:07 -04005543<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04005544
5545---
5546
Cary Clark682c58d2018-05-16 07:07:07 -04005547<a name='SkPaint_glyphsToUnichars'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005548## glyphsToUnichars
5549
Cary Clark682c58d2018-05-16 07:07:07 -04005550<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5551void <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 -04005552</pre>
5553
Cary Clark682c58d2018-05-16 07:07:07 -04005554Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
5555<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
5556Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
5557by <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 -04005558
Cary Clark682c58d2018-05-16 07:07:07 -04005559Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005560
5561### Parameters
5562
Cary Clark682c58d2018-05-16 07:07:07 -04005563<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
5564 <td>array of indices into font</td>
5565 </tr>
5566 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
5567 <td>length of glyph array</td>
5568 </tr>
5569 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
5570 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04005571 </tr>
5572</table>
5573
5574### Example
5575
skia-bookmakerb95bbba2018-07-06 05:23:23 +00005576<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 -05005577</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005578
5579---
5580
Cary Clark682c58d2018-05-16 07:07:07 -04005581## <a name='Measure_Text'>Measure Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005582
Cary Clark682c58d2018-05-16 07:07:07 -04005583<a name='SkPaint_measureText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005584## measureText
5585
Cary Clark682c58d2018-05-16 07:07:07 -04005586<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5587<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 -04005588</pre>
5589
Cary Clark682c58d2018-05-16 07:07:07 -04005590Returns the advance width of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5591and the height of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5592The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
5593Uses <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,
5594and <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
5595<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
5596Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
5597The 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 -04005598
5599### Parameters
5600
Cary Clark682c58d2018-05-16 07:07:07 -04005601<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
5602 <td>character codes or glyph indices to be measured</td>
5603 </tr>
5604 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
5605 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
5606 </tr>
5607 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
5608 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005609 </tr>
5610</table>
5611
5612### Return Value
5613
5614advance width or height
5615
5616### Example
5617
Cary Clark83647062018-07-18 16:21:51 -04005618<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005619
5620---
5621
Cary Clark682c58d2018-05-16 07:07:07 -04005622<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05005623
Cary Clark682c58d2018-05-16 07:07:07 -04005624<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5625<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 -04005626</pre>
5627
Cary Clark682c58d2018-05-16 07:07:07 -04005628Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5629and the height of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5630The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
5631Uses <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,
5632and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5633Does 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 -04005634
5635### Parameters
5636
Cary Clark682c58d2018-05-16 07:07:07 -04005637<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
5638 <td>character codes or glyph indices to be measured</td>
5639 </tr>
5640 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
5641 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04005642 </tr>
5643</table>
5644
5645### Return Value
5646
5647advance width or height
5648
5649### Example
5650
5651<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
5652
5653#### Example Output
5654
5655~~~~
5656default width = 5
5657double width = 10
5658~~~~
5659
5660</fiddle-embed></div>
5661
5662---
5663
Cary Clark682c58d2018-05-16 07:07:07 -04005664<a name='SkPaint_breakText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005665## breakText
5666
Cary Clark682c58d2018-05-16 07:07:07 -04005667<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5668size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
5669 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04005670</pre>
5671
Cary Clark682c58d2018-05-16 07:07:07 -04005672Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5673If <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
5674equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5675If <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
5676equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5677Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5678Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
5679Uses <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,
5680and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5681Does 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 -04005682
5683### Parameters
5684
Cary Clark682c58d2018-05-16 07:07:07 -04005685<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
5686 <td>character codes or glyph indices to be measured</td>
5687 </tr>
5688 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
5689 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
5690 </tr>
5691 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
5692 <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>
5693 </tr>
5694 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
5695 <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 -04005696 </tr>
5697</table>
5698
5699### Return Value
5700
Cary Clark682c58d2018-05-16 07:07:07 -04005701bytes 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 -04005702
5703### Example
5704
Cary Clark682c58d2018-05-16 07:07:07 -04005705<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
5706<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 -05005707</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005708
5709---
5710
Cary Clark682c58d2018-05-16 07:07:07 -04005711<a name='SkPaint_getTextWidths'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005712## getTextWidths
5713
Cary Clark682c58d2018-05-16 07:07:07 -04005714<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5715int <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 -04005716</pre>
5717
Cary Clark682c58d2018-05-16 07:07:07 -04005718Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
5719the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
5720Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
5721If <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.
5722if <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.
5723If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the horizontal advance.
5724If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the vertical advance.
5725Uses <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,
5726and <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>.
5727Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
5728Does 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 -04005729
5730### Parameters
5731
Cary Clark682c58d2018-05-16 07:07:07 -04005732<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
5733 <td>character codes or glyph indices to be measured</td>
5734 </tr>
5735 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
5736 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
5737 </tr>
5738 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
5739 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
5740 </tr>
5741 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
5742 <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 -04005743 </tr>
5744</table>
5745
5746### Return Value
5747
Cary Clark682c58d2018-05-16 07:07:07 -04005748glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005749
5750### Example
5751
Cary Clarkf9603982018-07-17 08:20:27 -04005752<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href='undocumented#Glyph'>Glyphs</a> increase for stroked <a href='#SkPaint_getTextWidths_text'>text</a>, but <a href='#SkPaint_getTextWidths_text'>text</a> advance remains the same.
Cary Clark682c58d2018-05-16 07:07:07 -04005753The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05005754</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005755
5756---
5757
Cary Clark682c58d2018-05-16 07:07:07 -04005758## <a name='Text_Path'>Text Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05005759
Cary Clark682c58d2018-05-16 07:07:07 -04005760<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 -04005761
Cary Clark682c58d2018-05-16 07:07:07 -04005762<a name='SkPaint_getTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005763## getTextPath
5764
Cary Clark682c58d2018-05-16 07:07:07 -04005765<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5766void <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 -04005767</pre>
5768
Cary Clark682c58d2018-05-16 07:07:07 -04005769Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
5770Uses <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,
5771and <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.
5772All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
5773Uses <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 -04005774
5775### Parameters
5776
Cary Clark682c58d2018-05-16 07:07:07 -04005777<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
5778 <td>character codes or glyph indices</td>
5779 </tr>
5780 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
5781 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
5782 </tr>
5783 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005784 <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 -04005785 </tr>
5786 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005787 <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 -04005788 </tr>
5789 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
5790 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005791 </tr>
5792</table>
5793
5794### Example
5795
Cary Clark682c58d2018-05-16 07:07:07 -04005796<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 -05005797the offset location. The result is rendered with one draw call.
5798</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005799
5800---
5801
Cary Clark682c58d2018-05-16 07:07:07 -04005802<a name='SkPaint_getPosTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005803## getPosTextPath
5804
Cary Clark682c58d2018-05-16 07:07:07 -04005805<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5806void <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 -04005807</pre>
5808
Cary Clark682c58d2018-05-16 07:07:07 -04005809Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
5810Uses <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,
5811and <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.
5812All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
5813Uses <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>.
5814<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04005815
5816### Parameters
5817
Cary Clark682c58d2018-05-16 07:07:07 -04005818<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
5819 <td>character codes or glyph indices</td>
5820 </tr>
5821 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
5822 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
5823 </tr>
5824 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
5825 <td>positions of each glyph</td>
5826 </tr>
5827 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
5828 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005829 </tr>
5830</table>
5831
5832### Example
5833
Cary Clark682c58d2018-05-16 07:07:07 -04005834<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 -05005835</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005836
5837---
5838
Cary Clark682c58d2018-05-16 07:07:07 -04005839## <a name='Text_Intercepts'>Text Intercepts</a>
Cary Clark08895c42018-02-01 09:37:32 -05005840
Cary Clark682c58d2018-05-16 07:07:07 -04005841<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
5842of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04005843underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005844
Cary Clark682c58d2018-05-16 07:07:07 -04005845<a name='SkPaint_getTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005846## getTextIntercepts
5847
Cary Clark682c58d2018-05-16 07:07:07 -04005848<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5849int <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,
5850 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005851</pre>
5852
Cary Clark682c58d2018-05-16 07:07:07 -04005853Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
5854<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
5855The 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 -05005856the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005857Uses <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,
5858and <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.
5859Uses <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 +00005860
Cary Clark682c58d2018-05-16 07:07:07 -04005861Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005862
Cary Clark682c58d2018-05-16 07:07:07 -04005863<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005864
5865### Parameters
5866
Cary Clark682c58d2018-05-16 07:07:07 -04005867<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
5868 <td>character codes or glyph indices</td>
5869 </tr>
5870 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
5871 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5872 </tr>
5873 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005874 <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 -04005875 </tr>
5876 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005877 <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 -04005878 </tr>
5879 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5880 <td>lower and upper line parallel to the advance</td>
5881 </tr>
5882 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5883 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005884 </tr>
5885</table>
5886
5887### Return Value
5888
5889number of intersections; may be zero
5890
5891### Example
5892
Cary Clark1a8d7622018-03-05 13:26:16 -05005893<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
5894</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005895
5896---
5897
Cary Clark682c58d2018-05-16 07:07:07 -04005898<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005899## getPosTextIntercepts
5900
Cary Clark682c58d2018-05-16 07:07:07 -04005901<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5902int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
5903 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005904</pre>
5905
Cary Clark682c58d2018-05-16 07:07:07 -04005906Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5907<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5908The 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 -05005909the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005910Uses <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,
5911and <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.
5912Uses <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 +00005913
Cary Clark682c58d2018-05-16 07:07:07 -04005914Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005915
Cary Clark682c58d2018-05-16 07:07:07 -04005916<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005917
5918### Parameters
5919
Cary Clark682c58d2018-05-16 07:07:07 -04005920<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5921 <td>character codes or glyph indices</td>
5922 </tr>
5923 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5924 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5925 </tr>
5926 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5927 <td>positions of each glyph</td>
5928 </tr>
5929 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5930 <td>lower and upper line parallel to the advance</td>
5931 </tr>
5932 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5933 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005934 </tr>
5935</table>
5936
5937### Return Value
5938
Cary Clarka523d2d2017-08-30 08:58:10 -04005939number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005940
5941### Example
5942
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00005943<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 -05005944</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005945
5946---
5947
Cary Clark682c58d2018-05-16 07:07:07 -04005948<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005949## getPosTextHIntercepts
5950
Cary Clark682c58d2018-05-16 07:07:07 -04005951<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5952int <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,
5953 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005954</pre>
5955
Cary Clark682c58d2018-05-16 07:07:07 -04005956Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5957<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5958The 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 -05005959the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005960Uses <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,
5961and <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.
5962Uses <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 +00005963
Cary Clark682c58d2018-05-16 07:07:07 -04005964Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005965
Cary Clark682c58d2018-05-16 07:07:07 -04005966<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005967
5968### Parameters
5969
Cary Clark682c58d2018-05-16 07:07:07 -04005970<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5971 <td>character codes or glyph indices</td>
5972 </tr>
5973 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5974 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5975 </tr>
5976 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5977 <td>positions of each glyph in x</td>
5978 </tr>
5979 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5980 <td>position of each glyph in y</td>
5981 </tr>
5982 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5983 <td>lower and upper line parallel to the advance</td>
5984 </tr>
5985 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5986 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005987 </tr>
5988</table>
5989
5990### Return Value
5991
5992number of intersections; may be zero
5993
5994### Example
5995
Cary Clark80247e52018-07-11 16:18:41 -04005996<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 -05005997</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005998
5999---
6000
Cary Clark682c58d2018-05-16 07:07:07 -04006001<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006002## getTextBlobIntercepts
6003
Cary Clark682c58d2018-05-16 07:07:07 -04006004<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkd2ca79c2018-08-10 13:09:13 -04006005int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='SkTextBlob_Reference#SkTextBlob'>SkTextBlob</a>* blob, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04006006</pre>
6007
Cary Clark682c58d2018-05-16 07:07:07 -04006008Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
6009<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
6010The 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 -05006011the string.
Cary Clark682c58d2018-05-16 07:07:07 -04006012Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
6013and <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.
6014Uses 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 +00006015
Cary Clark682c58d2018-05-16 07:07:07 -04006016<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 -05006017
Cary Clark682c58d2018-05-16 07:07:07 -04006018Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00006019
Cary Clark682c58d2018-05-16 07:07:07 -04006020<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04006021
6022### Parameters
6023
Cary Clark682c58d2018-05-16 07:07:07 -04006024<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
6025 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
6026 </tr>
6027 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
6028 <td>lower and upper line parallel to the advance</td>
6029 </tr>
6030 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
6031 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04006032 </tr>
6033</table>
6034
6035### Return Value
6036
6037number of intersections; may be zero
6038
6039### Example
6040
skia-bookmaker44bad2e2018-07-05 05:35:27 +00006041<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04006042
6043---
6044
Cary Clark682c58d2018-05-16 07:07:07 -04006045<a name='SkPaint_nothingToDraw'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006046## nothingToDraw
6047
Cary Clark682c58d2018-05-16 07:07:07 -04006048<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6049bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04006050</pre>
6051
Cary Clark682c58d2018-05-16 07:07:07 -04006052Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
6053otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04006054
Cary Clark224c7002018-06-27 11:00:21 -04006055Returns 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 -04006056new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04006057
6058### Return Value
6059
Cary Clark682c58d2018-05-16 07:07:07 -04006060true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04006061
6062### Example
6063
Cary Clark83647062018-07-18 16:21:51 -04006064<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04006065
6066#### Example Output
6067
6068~~~~
6069initial nothing to draw: false
6070blend dst nothing to draw: true
6071blend src over nothing to draw: false
6072alpha 0 nothing to draw: true
6073~~~~
6074
6075</fiddle-embed></div>
6076
6077---
6078
Cary Clark682c58d2018-05-16 07:07:07 -04006079## <a name='Fast_Bounds'>Fast Bounds</a>
Cary Clark08895c42018-02-01 09:37:32 -05006080
Cary Clark682c58d2018-05-16 07:07:07 -04006081<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
6082<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04006083
Cary Clark682c58d2018-05-16 07:07:07 -04006084<a name='SkPaint_canComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006085## canComputeFastBounds
6086
Cary Clark682c58d2018-05-16 07:07:07 -04006087<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6088bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04006089</pre>
6090
Cary Clark682c58d2018-05-16 07:07:07 -04006091Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
6092to 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 -04006093always returns false.
6094
6095### Return Value
6096
Cary Clark682c58d2018-05-16 07:07:07 -04006097true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04006098
6099---
6100
Cary Clark682c58d2018-05-16 07:07:07 -04006101<a name='SkPaint_computeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006102## computeFastBounds
6103
Cary Clark682c58d2018-05-16 07:07:07 -04006104<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6105const <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 -04006106</pre>
6107
Cary Clark682c58d2018-05-16 07:07:07 -04006108Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04006109raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04006110effects 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 -04006111parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04006112for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04006113
Cary Clark682c58d2018-05-16 07:07:07 -04006114The 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
6115should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
6116use 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
6117<a href='SkRect_Reference#Rect'>Rect</a>.
6118
Cary Clark12799e12017-07-28 15:18:29 -04006119### Parameters
6120
Cary Clark682c58d2018-05-16 07:07:07 -04006121<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6122 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6123 </tr>
6124 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6125 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04006126 </tr>
6127</table>
6128
6129### Return Value
6130
6131fast computed bounds
6132
6133---
6134
Cary Clark682c58d2018-05-16 07:07:07 -04006135<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006136## computeFastStrokeBounds
6137
Cary Clark682c58d2018-05-16 07:07:07 -04006138<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6139const <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 -04006140</pre>
6141
6142### Parameters
6143
Cary Clark682c58d2018-05-16 07:07:07 -04006144<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
6145 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6146 </tr>
6147 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
6148 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04006149 </tr>
6150</table>
6151
6152### Return Value
6153
6154fast computed bounds
6155
6156---
6157
Cary Clark682c58d2018-05-16 07:07:07 -04006158<a name='SkPaint_doComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006159## doComputeFastBounds
6160
Cary Clark682c58d2018-05-16 07:07:07 -04006161<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6162const <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 -04006163</pre>
6164
Cary Clark682c58d2018-05-16 07:07:07 -04006165Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
6166account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
6167altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04006168
6169### Parameters
6170
Cary Clark682c58d2018-05-16 07:07:07 -04006171<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6172 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6173 </tr>
6174 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6175 <td>computed bounds of geometry</td>
6176 </tr>
6177 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
6178 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04006179 </tr>
6180</table>
6181
6182### Return Value
6183
6184fast computed bounds
6185
6186---
6187
Cary Clark682c58d2018-05-16 07:07:07 -04006188## <a name='Utility'>Utility</a>
Cary Clark78de7512018-02-07 07:27:09 -05006189
Cary Clark78de7512018-02-07 07:27:09 -05006190
Cary Clark682c58d2018-05-16 07:07:07 -04006191<table style='border-collapse: collapse; width: 62.5em'>
6192 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
6193<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
6194 <tr style='background-color: #f0f0f0; '>
6195 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
6196 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
6197 </tr>
6198 <tr>
6199 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
6200 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
6201 </tr>
6202 <tr style='background-color: #f0f0f0; '>
6203 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
6204 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
6205 </tr>
6206 <tr>
6207 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
6208 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
6209 </tr>
6210 <tr style='background-color: #f0f0f0; '>
6211 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
6212 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
6213 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04006214</table>
Cary Clark224c7002018-06-27 11:00:21 -04006215