blob: 66204867f9e97a335c30ece61590fc19eead15df [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
Cary Clark682c58d2018-05-16 07:07:07 -04004# <a name='Paint'>Paint</a>
Cary Clarke4aa3712017-09-15 02:56:12 -04005
Cary Clark682c58d2018-05-16 07:07:07 -04006# <a name='SkPaint'>Class SkPaint</a>
7<a href='#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='#Paint'>Paint</a> collects all
8options outside of the <a href='SkCanvas_Reference#Clip'>Canvas Clip</a> and <a href='SkCanvas_Reference#Matrix'>Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -04009
Cary Clark7cfcbca2018-01-04 16:11:51 -050010Various options apply to text, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -040011
12Some options may not be implemented on all platforms; in these cases, setting
Cary Clark682c58d2018-05-16 07:07:07 -040013the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040014functionality; for instance, text size is identical to matrix scale.
15
Cary Clark682c58d2018-05-16 07:07:07 -040016<a href='#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
17pipeline and multiple pipeline stages may be affected by a single <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040018
Cary Clark682c58d2018-05-16 07:07:07 -040019<a href='#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040020algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark682c58d2018-05-16 07:07:07 -040021<a href='#Paint'>Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -040022
Cary Clark682c58d2018-05-16 07:07:07 -040023The objects contained by <a href='#Paint'>Paint</a> are opaque, and cannot be edited outside of the <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -040024to affect it. The implementation is free to defer computations associated with the
Cary Clark682c58d2018-05-16 07:07:07 -040025<a href='#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
Cary Clarkffb3d682018-05-17 12:17:28 -040026<a href='SkPath_Reference#Path'>Path</a> geometries with <a href='#Anti_Alias'>Anti Aliasing</a>, regardless of how <a href='#SkPaint_kAntiAlias_Flag'>SkPaint::kAntiAlias Flag</a>
Cary Clark682c58d2018-05-16 07:07:07 -040027is set in <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040028
Cary Clark682c58d2018-05-16 07:07:07 -040029<a href='#Paint'>Paint</a> describes a single color, a single font, a single image quality, and so on.
Cary Clark12799e12017-07-28 15:18:29 -040030Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark682c58d2018-05-16 07:07:07 -040031<a href='undocumented#Shader'>Shader</a> attached to <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040032
Cary Clark682c58d2018-05-16 07:07:07 -040033## Overview
Cary Clark5081eed2018-01-22 07:55:48 -050034
Cary Clark682c58d2018-05-16 07:07:07 -040035<table style='border-collapse: collapse; width: 62.5em'>
36 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
37<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
38 <tr style='background-color: #f0f0f0; '>
39 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constant'>Constants</a></td>
40 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>enum and enum class, and their const values</td>
41 </tr>
42 <tr>
43 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constructor'>Constructors</a></td>
44 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>functions that construct <a href='#SkPaint'>SkPaint</a></td>
45 </tr>
46 <tr style='background-color: #f0f0f0; '>
47 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Member_Function'>Functions</a></td>
48 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>global and class member functions</td>
49 </tr>
50 <tr>
51 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Operator'>Operators</a></td>
52 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>operator overloading methods</td>
53 </tr>
54 <tr style='background-color: #f0f0f0; '>
55 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Related_Function'>Related Functions</a></td>
56 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>similar member functions grouped together</td>
57 </tr>
58 <tr>
59 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Struct'>Struct Declarations</a></td>
60 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>embedded struct members</td>
61 </tr>
62</table>
Cary Clark12799e12017-07-28 15:18:29 -040063
Cary Clark12799e12017-07-28 15:18:29 -040064
Cary Clark682c58d2018-05-16 07:07:07 -040065## <a name='Related_Function'>Related Function</a>
Cary Clark12799e12017-07-28 15:18:29 -040066
Cary Clark12799e12017-07-28 15:18:29 -040067
Cary Clark682c58d2018-05-16 07:07:07 -040068SkPaint global, <code>struct</code>, and <code>class</code> related member functions share a topic.
69<table style='border-collapse: collapse; width: 62.5em'>
70 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
71<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
72 <tr style='background-color: #f0f0f0; '>
73 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Alpha_Methods'>Alpha Methods</a></td>
74 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkColor_Reference#Alpha'>Alpha</a></td>
75 </tr>
76 <tr>
Cary Clarkffb3d682018-05-17 12:17:28 -040077 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -040078 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximating coverage with transparency</td>
79 </tr>
80 <tr style='background-color: #f0f0f0; '>
81 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Automatic_Hinting'>Automatic Hinting</a></td>
82 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>always adjust glyph paths</td>
83 </tr>
84 <tr>
85 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Methods'>Blend Mode Methods</a></td>
86 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Blend_Mode'>Blend Mode</a></td>
87 </tr>
88 <tr style='background-color: #f0f0f0; '>
89 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Filter_Methods'>Color Filter Methods</a></td>
90 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Color_Filter'>Color Filter</a></td>
91 </tr>
92 <tr>
93 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Methods'>Color Methods</a></td>
94 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkColor_Reference#Color'>Color</a></td>
95 </tr>
96 <tr style='background-color: #f0f0f0; '>
97 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Device_Text'>Device Text</a></td>
98 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>increase precision of glyph position</td>
99 </tr>
100 <tr>
101 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Dither'>Dither</a></td>
102 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distributing color error</td>
103 </tr>
104 <tr style='background-color: #f0f0f0; '>
105 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Draw_Looper_Methods'>Draw Looper Methods</a></td>
106 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Draw_Looper'>Draw Looper</a></td>
107 </tr>
108 <tr>
109 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fake_Bold'>Fake Bold</a></td>
110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximate font styles</td>
111 </tr>
112 <tr style='background-color: #f0f0f0; '>
113 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fast_Bounds'>Fast Bounds</a></td>
114 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximate area required by <a href='#Paint'>Paint</a></td>
115 </tr>
116 <tr>
117 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fill_Path'>Fill Path</a></td>
118 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>make <a href='SkPath_Reference#Path'>Path</a> from <a href='undocumented#Path_Effect'>Path Effect</a>, stroking</td>
119 </tr>
120 <tr style='background-color: #f0f0f0; '>
121 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Filter_Quality_Methods'>Filter Quality Methods</a></td>
122 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Filter_Quality'>Filter Quality</a></td>
123 </tr>
124 <tr>
125 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>attributes represented by single bits</td>
127 </tr>
128 <tr style='background-color: #f0f0f0; '>
129 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
130 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a></td>
131 </tr>
132 <tr>
133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Font_Metrics'>Font Metrics</a></td>
134 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>common glyph dimensions</td>
135 </tr>
136 <tr style='background-color: #f0f0f0; '>
137 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a></td>
138 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph spacing affected by hinting</td>
139 </tr>
140 <tr>
141 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
142 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outline adjustment</td>
143 </tr>
144 <tr style='background-color: #f0f0f0; '>
145 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Image_Filter_Methods'>Image Filter Methods</a></td>
146 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Image_Filter'>Image Filter</a></td>
147 </tr>
148 <tr>
149 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Initializers'>Initializers</a></td>
150 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructors and initialization</td>
151 </tr>
152 <tr style='background-color: #f0f0f0; '>
153 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#LCD_Text'>LCD Text</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400154 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text relying on the order of RGB stripes</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400155 </tr>
156 <tr>
157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Linear_Text'>Linear Text</a></td>
158 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>selects text rendering as <a href='undocumented#Glyph'>Glyph</a> or <a href='SkPath_Reference#Path'>Path</a></td>
159 </tr>
160 <tr style='background-color: #f0f0f0; '>
161 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Management'>Management</a></td>
162 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>paint copying, moving, comparing</td>
163 </tr>
164 <tr>
165 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Mask_Filter_Methods'>Mask Filter Methods</a></td>
166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Mask_Filter'>Mask Filter</a></td>
167 </tr>
168 <tr style='background-color: #f0f0f0; '>
169 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Measure_Text'>Measure Text</a></td>
170 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>width, height, bounds of text</td>
171 </tr>
172 <tr>
173 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Miter_Limit'>Miter Limit</a></td>
174 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum length of stroked corners</td>
175 </tr>
176 <tr style='background-color: #f0f0f0; '>
177 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Path_Effect_Methods'>Path Effect Methods</a></td>
178 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Path_Effect'>Path Effect</a></td>
179 </tr>
180 <tr>
181 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Shader_Methods'>Shader Methods</a></td>
182 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Shader'>Shader</a></td>
183 </tr>
184 <tr style='background-color: #f0f0f0; '>
185 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Cap'>Stroke Cap</a></td>
186 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decorations at ends of open strokes</td>
187 </tr>
188 <tr>
189 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Join'>Stroke Join</a></td>
190 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decoration at corners of strokes</td>
191 </tr>
192 <tr style='background-color: #f0f0f0; '>
193 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Width'>Stroke Width</a></td>
194 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>thickness perpendicular to geometry</td>
195 </tr>
196 <tr>
197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
198 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>geometry filling, stroking</td>
199 </tr>
200 <tr style='background-color: #f0f0f0; '>
201 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Fill'>Style Fill</a></td>
202 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>fill and stroke</td>
203 </tr>
204 <tr>
205 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Hairline'>Style Hairline</a></td>
206 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lines and curves with minimal width</td>
207 </tr>
208 <tr style='background-color: #f0f0f0; '>
209 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Stroke'>Style Stroke</a></td>
210 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lines and curves with width</td>
211 </tr>
212 <tr>
213 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Subpixel_Text'>Subpixel Text</a></td>
214 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses pixel transparency to represent fractional offset</td>
215 </tr>
216 <tr style='background-color: #f0f0f0; '>
217 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Align'>Text Align</a></td>
218 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text placement relative to position</td>
219 </tr>
220 <tr>
221 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Encoding'>Text Encoding</a></td>
222 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text encoded as characters or <a href='undocumented#Glyph'>Glyphs</a></td>
223 </tr>
224 <tr style='background-color: #f0f0f0; '>
225 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Intercepts'>Text Intercepts</a></td>
226 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>advanced underline, strike through</td>
227 </tr>
228 <tr>
229 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Path'>Text Path</a></td>
230 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>geometry of <a href='undocumented#Glyph'>Glyphs</a></td>
231 </tr>
232 <tr style='background-color: #f0f0f0; '>
233 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Scale_X'>Text Scale X</a></td>
234 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text horizontal scale</td>
235 </tr>
236 <tr>
237 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Size'>Text Size</a></td>
238 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>overall height in points</td>
239 </tr>
240 <tr style='background-color: #f0f0f0; '>
241 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Skew_X'>Text Skew X</a></td>
242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text horizontal slant</td>
243 </tr>
244 <tr>
245 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Typeface_Methods'>Typeface Methods</a></td>
246 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Typeface'>Typeface</a></td>
247 </tr>
248 <tr style='background-color: #f0f0f0; '>
249 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Utility'>Utility</a></td>
250 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>rarely called management functions</td>
251 </tr>
252 <tr>
253 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Vertical_Text'>Vertical Text</a></td>
254 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>orient text from top to bottom</td>
255 </tr>
256</table>
Cary Clark12799e12017-07-28 15:18:29 -0400257
Cary Clark12799e12017-07-28 15:18:29 -0400258
Cary Clark682c58d2018-05-16 07:07:07 -0400259## <a name='Constant'>Constant</a>
Cary Clark12799e12017-07-28 15:18:29 -0400260
Cary Clark12799e12017-07-28 15:18:29 -0400261
Cary Clark682c58d2018-05-16 07:07:07 -0400262SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
263<table style='border-collapse: collapse; width: 62.5em'>
264 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
265<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
266 <tr style='background-color: #f0f0f0; '>
267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Align'>Align</a></td>
268 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph locations relative to text position</td>
269 </tr>
270 <tr>
271 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Cap'>Cap</a></td>
272 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>start and end geometry on stroked shapes</td>
273 </tr>
274 <tr style='background-color: #f0f0f0; '>
275 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
276 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values described by bits and masks</td>
277 </tr>
278 <tr>
279 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
280 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>level of glyph outline adjustment</td>
281 </tr>
282 <tr style='background-color: #f0f0f0; '>
283 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Join'>Join</a></td>
284 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>corner geometry on stroked shapes</td>
285 </tr>
286 <tr>
287 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
288 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>stroke, fill, or both</td>
289 </tr>
290 <tr style='background-color: #f0f0f0; '>
291 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_TextEncoding'>TextEncoding</a></td>
292 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>character or glyph encoded size</td>
293 </tr>
294 <tr>
295 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAlignCount'>kAlignCount</a></td>
296 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Text_Align'>Text Align</a> values defined</td>
297 </tr>
298 <tr style='background-color: #f0f0f0; '>
299 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAllFlags'>kAllFlags</a></td>
300 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask of all <a href='#SkPaint_Flags'>Flags</a></td>
301 </tr>
302 <tr>
303 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400304 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400305 </tr>
306 <tr style='background-color: #f0f0f0; '>
307 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
308 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Automatic_Hinting'>Automatic Hinting</a></td>
309 </tr>
310 <tr>
311 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kBevel_Join'>kBevel Join</a></td>
312 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>connects outside edges</td>
313 </tr>
314 <tr style='background-color: #f0f0f0; '>
315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
316 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>no stroke extension</td>
317 </tr>
318 <tr>
319 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCapCount'>kCapCount</a></td>
320 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Cap'>Stroke Cap</a> values defined</td>
321 </tr>
322 <tr style='background-color: #f0f0f0; '>
323 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCenter_Align'>kCenter Align</a></td>
324 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>centers line of glyphs by its width or height</td>
325 </tr>
326 <tr>
327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Cap'>kDefault Cap</a></td>
328 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
329 </tr>
330 <tr style='background-color: #f0f0f0; '>
331 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Join'>kDefault Join</a></td>
332 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
333 </tr>
334 <tr>
335 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
336 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Dither'>Dither</a></td>
337 </tr>
338 <tr style='background-color: #f0f0f0; '>
339 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
340 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
341 </tr>
342 <tr>
343 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
344 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Fake_Bold'>Fake Bold</a></td>
345 </tr>
346 <tr style='background-color: #f0f0f0; '>
347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFill_Style'>kFill Style</a></td>
348 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to fill geometry</td>
349 </tr>
350 <tr>
351 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFull_Hinting'>kFull Hinting</a></td>
352 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>modifies glyph outlines for maxiumum constrast</td>
353 </tr>
354 <tr style='background-color: #f0f0f0; '>
355 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
356 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent glyph indices</td>
357 </tr>
358 <tr>
359 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kJoinCount'>kJoinCount</a></td>
360 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Join'>Stroke Join</a> values defined</td>
361 </tr>
362 <tr style='background-color: #f0f0f0; '>
363 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
364 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#LCD_Text'>LCD Text</a></td>
365 </tr>
366 <tr>
367 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Cap'>kLast Cap</a></td>
368 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>largest <a href='#Stroke_Cap'>Stroke Cap</a> value</td>
369 </tr>
370 <tr style='background-color: #f0f0f0; '>
371 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Join'>kLast Join</a></td>
372 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to the largest value for <a href='#Stroke_Join'>Stroke Join</a></td>
373 </tr>
374 <tr>
375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLeft_Align'>kLeft Align</a></td>
376 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>positions glyph by computed font offset</td>
377 </tr>
378 <tr style='background-color: #f0f0f0; '>
379 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
380 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Linear_Text'>Linear Text</a></td>
381 </tr>
382 <tr>
383 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
384 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extends to <a href='#Miter_Limit'>Miter Limit</a></td>
385 </tr>
386 <tr style='background-color: #f0f0f0; '>
387 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNo_Hinting'>kNo Hinting</a></td>
388 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines unchanged</td>
389 </tr>
390 <tr>
391 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a></td>
392 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines modified to improve constrast</td>
393 </tr>
394 <tr style='background-color: #f0f0f0; '>
395 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRight_Align'>kRight Align</a></td>
396 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves lines of glyphs by its width or height</td>
397 </tr>
398 <tr>
399 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Cap'>kRound Cap</a></td>
400 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
401 </tr>
402 <tr style='background-color: #f0f0f0; '>
403 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Join'>kRound Join</a></td>
404 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
405 </tr>
406 <tr>
407 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a></td>
408 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimal modification to improve constrast</td>
409 </tr>
410 <tr style='background-color: #f0f0f0; '>
411 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSquare_Cap'>kSquare Cap</a></td>
412 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds square</td>
413 </tr>
414 <tr>
415 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a></td>
416 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to stroke and fill geometry</td>
417 </tr>
418 <tr style='background-color: #f0f0f0; '>
419 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStroke_Style'>kStroke Style</a></td>
420 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to stroke geometry</td>
421 </tr>
422 <tr>
423 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStyleCount'>kStyleCount</a></td>
424 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#SkPaint_Style'>Style</a> values defined</td>
425 </tr>
426 <tr style='background-color: #f0f0f0; '>
427 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
428 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Subpixel_Text'>Subpixel Text</a></td>
429 </tr>
430 <tr>
431 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a></td>
432 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent most of Unicode</td>
433 </tr>
434 <tr style='background-color: #f0f0f0; '>
435 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a></td>
436 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses four byte words to represent all of Unicode</td>
437 </tr>
438 <tr>
439 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a></td>
440 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses bytes to represent UTF-8 or ASCII</td>
441 </tr>
442 <tr style='background-color: #f0f0f0; '>
443 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
444 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Vertical_Text'>Vertical Text</a></td>
445 </tr>
446</table>
Cary Clark12799e12017-07-28 15:18:29 -0400447
Cary Clark12799e12017-07-28 15:18:29 -0400448
Cary Clark682c58d2018-05-16 07:07:07 -0400449## <a name='Struct'>Struct</a>
Cary Clark12799e12017-07-28 15:18:29 -0400450
Cary Clark12799e12017-07-28 15:18:29 -0400451
Cary Clark682c58d2018-05-16 07:07:07 -0400452SkPaint uses C++ structs to declare the public data structures and interfaces.
453<table style='border-collapse: collapse; width: 62.5em'>
454 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
455<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
456 <tr style='background-color: #f0f0f0; '>
457 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics'>FontMetrics</a></td>
458 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values computed by <a href='undocumented#Font_Manager'>Font Manager</a> using <a href='undocumented#Typeface'>Typeface</a></td>
459 </tr>
460</table>
461
462
463## <a name='Constructor'>Constructor</a>
464
465
466SkPaint can be constructed or initialized by these functions, including C++ class constructors.
467<table style='border-collapse: collapse; width: 62.5em'>
468 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
469<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
470 <tr style='background-color: #f0f0f0; '>
471 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_empty_constructor'>SkPaint()</a></td>
472 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructs with default values</td>
473 </tr>
474 <tr>
475 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_SkPaint'>SkPaint(SkPaint&& paint)</a></td>
476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
477 </tr>
478 <tr style='background-color: #f0f0f0; '>
479 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_const_SkPaint'>SkPaint(const SkPaint& paint)</a></td>
480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
481 </tr>
482 <tr>
483 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_destructor'>~SkPaint()</a></td>
484 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decreases <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects</td>
485 </tr>
486</table>
487
488
489## <a name='Operator'>Operator</a>
490
491
492SkPaint operators inline class member functions with arithmetic equivalents.
493<table style='border-collapse: collapse; width: 62.5em'>
494 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
495<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
496 <tr style='background-color: #f0f0f0; '>
497 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a></td>
498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for inequality</td>
499 </tr>
500 <tr>
501 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a></td>
502 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
503 </tr>
504 <tr style='background-color: #f0f0f0; '>
505 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a></td>
506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
507 </tr>
508 <tr>
509 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a></td>
510 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for equality</td>
511 </tr>
512</table>
513
514
515## <a name='Member_Function'>Member Function</a>
516
517
518SkPaint member functions read and modify the structure properties.
519<table style='border-collapse: collapse; width: 62.5em'>
520 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
521<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
522 <tr style='background-color: #f0f0f0; '>
523 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_breakText'>breakText</a></td>
524 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text that fits in a width</td>
525 </tr>
526 <tr>
527 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a></td>
528 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if settings allow for fast bounds computation</td>
529 </tr>
530 <tr style='background-color: #f0f0f0; '>
531 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastBounds'>computeFastBounds</a></td>
532 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill bounds for quick reject tests</td>
533 </tr>
534 <tr>
535 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a></td>
536 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns stroke bounds for quick reject tests</td>
537 </tr>
538 <tr style='background-color: #f0f0f0; '>
539 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
540 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
541 </tr>
542 <tr>
543 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
544 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
545 </tr>
546 <tr style='background-color: #f0f0f0; '>
547 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a></td>
548 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns bounds for quick reject tests</td>
549 </tr>
550 <tr>
551 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getAlpha'>getAlpha</a></td>
552 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
553 </tr>
554 <tr style='background-color: #f0f0f0; '>
555 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getBlendMode'>getBlendMode</a></td>
556 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Blend_Mode'>Blend Mode</a>, how colors combine with <a href='undocumented#Device'>Device</a></td>
557 </tr>
558 <tr>
559 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColor'>getColor</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400560 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400561 </tr>
562 <tr style='background-color: #f0f0f0; '>
563 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColorFilter'>getColorFilter</a></td>
564 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Color_Filter'>Color Filter</a>, how colors are altered</td>
565 </tr>
566 <tr>
567 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getDrawLooper'>getDrawLooper</a></td>
568 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
569 </tr>
570 <tr style='background-color: #f0f0f0; '>
571 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFillPath'>getFillPath</a></td>
572 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill path equivalent to stroke</td>
573 </tr>
574 <tr>
575 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFilterQuality'>getFilterQuality</a></td>
576 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, image filtering level</td>
577 </tr>
578 <tr style='background-color: #f0f0f0; '>
579 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFlags'>getFlags</a></td>
580 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Flags'>Flags</a> stored in a bit field</td>
581 </tr>
582 <tr>
583 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontBounds'>getFontBounds</a></td>
584 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns union all glyph bounds</td>
585 </tr>
586 <tr style='background-color: #f0f0f0; '>
587 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontMetrics'>getFontMetrics</a></td>
588 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a> metrics scaled by text size</td>
589 </tr>
590 <tr>
591 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontSpacing'>getFontSpacing</a></td>
592 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns recommended spacing between lines</td>
593 </tr>
594 <tr style='background-color: #f0f0f0; '>
595 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHash'>getHash</a></td>
596 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns a shallow hash for equality checks</td>
597 </tr>
598 <tr>
599 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHinting'>getHinting</a></td>
600 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
601 </tr>
602 <tr style='background-color: #f0f0f0; '>
603 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getImageFilter'>getImageFilter</a></td>
604 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
605 </tr>
606 <tr>
607 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getMaskFilter'>getMaskFilter</a></td>
608 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
609 </tr>
610 <tr style='background-color: #f0f0f0; '>
611 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPathEffect'>getPathEffect</a></td>
612 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
613 </tr>
614 <tr>
615 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a></td>
616 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect horizontally positioned text; underlines</td>
617 </tr>
618 <tr style='background-color: #f0f0f0; '>
619 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a></td>
620 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect positioned text; underlines</td>
621 </tr>
622 <tr>
623 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextPath'>getPosTextPath</a></td>
624 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to positioned text</td>
625 </tr>
626 <tr style='background-color: #f0f0f0; '>
627 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getShader'>getShader</a></td>
628 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
629 </tr>
630 <tr>
631 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeCap'>getStrokeCap</a></td>
632 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Cap'>Cap</a>, the area drawn at path ends</td>
633 </tr>
634 <tr style='background-color: #f0f0f0; '>
635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a></td>
636 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
637 </tr>
638 <tr>
639 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a></td>
640 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
641 </tr>
642 <tr style='background-color: #f0f0f0; '>
643 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a></td>
644 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns thickness of the stroke</td>
645 </tr>
646 <tr>
647 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStyle'>getStyle</a></td>
648 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
649 </tr>
650 <tr style='background-color: #f0f0f0; '>
651 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextAlign'>getTextAlign</a></td>
652 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
653 </tr>
654 <tr>
655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a></td>
656 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect <a href='undocumented#Text_Blob'>Text Blob</a>; underlines</td>
657 </tr>
658 <tr style='background-color: #f0f0f0; '>
659 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextEncoding'>getTextEncoding</a></td>
660 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns character or glyph encoded size</td>
661 </tr>
662 <tr>
663 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a></td>
664 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect text; underlines</td>
665 </tr>
666 <tr style='background-color: #f0f0f0; '>
667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextPath'>getTextPath</a></td>
668 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to text</td>
669 </tr>
670 <tr>
671 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextScaleX'>getTextScaleX</a></td>
672 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal scale; condensed text</td>
673 </tr>
674 <tr style='background-color: #f0f0f0; '>
675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSize'>getTextSize</a></td>
676 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text size in points</td>
677 </tr>
678 <tr>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSkewX'>getTextSkewX</a></td>
680 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal skew; oblique text</td>
681 </tr>
682 <tr style='background-color: #f0f0f0; '>
683 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextWidths'>getTextWidths</a></td>
684 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance and bounds for each glyph in text</td>
685 </tr>
686 <tr>
687 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTypeface'>getTypeface</a></td>
688 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a>, font description</td>
689 </tr>
690 <tr style='background-color: #f0f0f0; '>
691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
692 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
693 </tr>
694 <tr>
695 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAntiAlias'>isAntiAlias</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400696 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Anti_Alias'>Anti Alias</a> is set</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400697 </tr>
698 <tr style='background-color: #f0f0f0; '>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAutohinted'>isAutohinted</a></td>
700 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Glyph'>Glyphs</a> are always hinted</td>
701 </tr>
702 <tr>
703 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isDither'>isDither</a></td>
704 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Dither'>Dither</a> is set</td>
705 </tr>
706 <tr style='background-color: #f0f0f0; '>
707 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a></td>
708 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is set</td>
709 </tr>
710 <tr>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a></td>
712 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Fake_Bold'>Fake Bold</a> is set</td>
713 </tr>
714 <tr style='background-color: #f0f0f0; '>
715 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a></td>
716 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#LCD_Text'>LCD Text</a> is set</td>
717 </tr>
718 <tr>
719 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLinearText'>isLinearText</a></td>
720 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a></td>
721 </tr>
722 <tr style='background-color: #f0f0f0; '>
723 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSrcOver'>isSrcOver</a></td>
724 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a></td>
725 </tr>
726 <tr>
727 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSubpixelText'>isSubpixelText</a></td>
728 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Subpixel_Text'>Subpixel Text</a> is set</td>
729 </tr>
730 <tr style='background-color: #f0f0f0; '>
731 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isVerticalText'>isVerticalText</a></td>
732 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Vertical_Text'>Vertical Text</a> is set</td>
733 </tr>
734 <tr>
735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_measureText'>measureText</a></td>
736 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance width and bounds of text</td>
737 </tr>
738 <tr style='background-color: #f0f0f0; '>
739 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
740 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
741 </tr>
742 <tr>
743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refColorFilter'>refColorFilter</a></td>
744 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Color_Filter'>Color Filter</a>, how colors are altered</td>
745 </tr>
746 <tr style='background-color: #f0f0f0; '>
747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refDrawLooper'>refDrawLooper</a></td>
748 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
749 </tr>
750 <tr>
751 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refImageFilter'>refImageFilter</a></td>
752 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
753 </tr>
754 <tr style='background-color: #f0f0f0; '>
755 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refMaskFilter'>refMaskFilter</a></td>
756 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
757 </tr>
758 <tr>
759 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refPathEffect'>refPathEffect</a></td>
760 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
761 </tr>
762 <tr style='background-color: #f0f0f0; '>
763 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refShader'>refShader</a></td>
764 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
765 </tr>
766 <tr>
767 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refTypeface'>refTypeface</a></td>
768 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Typeface'>Typeface</a>, font description</td>
769 </tr>
770 <tr style='background-color: #f0f0f0; '>
771 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_reset'>reset</a></td>
772 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to default values</td>
773 </tr>
774 <tr>
775 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setARGB'>setARGB</a></td>
776 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets color by component</td>
777 </tr>
778 <tr style='background-color: #f0f0f0; '>
779 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAlpha'>setAlpha</a></td>
780 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
781 </tr>
782 <tr>
783 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAntiAlias'>setAntiAlias</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400784 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400785 </tr>
786 <tr style='background-color: #f0f0f0; '>
787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAutohinted'>setAutohinted</a></td>
788 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Glyph'>Glyphs</a> to always be hinted</td>
789 </tr>
790 <tr>
791 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setBlendMode'>setBlendMode</a></td>
792 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Blend_Mode'>Blend Mode</a>, how colors combine with destination</td>
793 </tr>
794 <tr style='background-color: #f0f0f0; '>
795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColor'>setColor</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400796 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400797 </tr>
798 <tr>
799 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColorFilter'>setColorFilter</a></td>
800 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Color_Filter'>Color Filter</a>, alters color</td>
801 </tr>
802 <tr style='background-color: #f0f0f0; '>
803 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDither'>setDither</a></td>
804 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Dither'>Dither</a></td>
805 </tr>
806 <tr>
807 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDrawLooper'>setDrawLooper</a></td>
808 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
809 </tr>
810 <tr style='background-color: #f0f0f0; '>
811 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a></td>
812 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
813 </tr>
814 <tr>
815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a></td>
816 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Fake_Bold'>Fake Bold</a></td>
817 </tr>
818 <tr style='background-color: #f0f0f0; '>
819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFilterQuality'>setFilterQuality</a></td>
820 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level</td>
821 </tr>
822 <tr>
823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFlags'>setFlags</a></td>
824 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets multiple <a href='#SkPaint_Flags'>Flags</a> in a bit field</td>
825 </tr>
826 <tr style='background-color: #f0f0f0; '>
827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setHinting'>setHinting</a></td>
828 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
829 </tr>
830 <tr>
831 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setImageFilter'>setImageFilter</a></td>
832 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
833 </tr>
834 <tr style='background-color: #f0f0f0; '>
835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a></td>
836 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#LCD_Text'>LCD Text</a></td>
837 </tr>
838 <tr>
839 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLinearText'>setLinearText</a></td>
840 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts to <a href='SkPath_Reference#Path'>Path</a> before draw or measure</td>
841 </tr>
842 <tr style='background-color: #f0f0f0; '>
843 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setMaskFilter'>setMaskFilter</a></td>
844 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
845 </tr>
846 <tr>
847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setPathEffect'>setPathEffect</a></td>
848 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
849 </tr>
850 <tr style='background-color: #f0f0f0; '>
851 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setShader'>setShader</a></td>
852 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
853 </tr>
854 <tr>
855 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeCap'>setStrokeCap</a></td>
856 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Cap'>Cap</a>, the area drawn at path ends</td>
857 </tr>
858 <tr style='background-color: #f0f0f0; '>
859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a></td>
860 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
861 </tr>
862 <tr>
863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a></td>
864 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
865 </tr>
866 <tr style='background-color: #f0f0f0; '>
867 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a></td>
868 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets thickness of the stroke</td>
869 </tr>
870 <tr>
871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStyle'>setStyle</a></td>
872 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
873 </tr>
874 <tr style='background-color: #f0f0f0; '>
875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setSubpixelText'>setSubpixelText</a></td>
876 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Subpixel_Text'>Subpixel Text</a></td>
877 </tr>
878 <tr>
879 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextAlign'>setTextAlign</a></td>
880 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
881 </tr>
882 <tr style='background-color: #f0f0f0; '>
883 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextEncoding'>setTextEncoding</a></td>
884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets character or glyph encoded size</td>
885 </tr>
886 <tr>
887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextScaleX'>setTextScaleX</a></td>
888 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal scale; condensed text</td>
889 </tr>
890 <tr style='background-color: #f0f0f0; '>
891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSize'>setTextSize</a></td>
892 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets text size in points</td>
893 </tr>
894 <tr>
895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSkewX'>setTextSkewX</a></td>
896 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal skew; oblique text</td>
897 </tr>
898 <tr style='background-color: #f0f0f0; '>
899 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTypeface'>setTypeface</a></td>
900 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Typeface'>Typeface</a>, font description</td>
901 </tr>
902 <tr>
903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setVerticalText'>setVerticalText</a></td>
904 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Vertical_Text'>Vertical Text</a></td>
905 </tr>
906 <tr style='background-color: #f0f0f0; '>
907 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
908 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
909 </tr>
910 <tr>
911 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_toString'>toString</a></td>
912 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='#Paint'>Paint</a> to machine readable form</td>
913 </tr>
914</table>
915
916
917## <a name='Initializers'>Initializers</a>
918
919<a name='SkPaint_empty_constructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400920## SkPaint
921
Cary Clark682c58d2018-05-16 07:07:07 -0400922<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
923<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400924</pre>
925
Cary Clark682c58d2018-05-16 07:07:07 -0400926Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400927
928| attribute | default value |
929| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400930| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark682c58d2018-05-16 07:07:07 -0400931| <a href='undocumented#Blend_Mode'>Blend Mode</a> | <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
932| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
933| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
934| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
935| <a href='#Dither'>Dither</a> | false |
936| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
937| <a href='#Fake_Bold'>Fake Bold</a> | false |
938| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
939| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
940| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
941| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
942| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
943| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
944| <a href='#LCD_Text'>LCD Text</a> | false |
945| <a href='#Linear_Text'>Linear Text</a> | false |
946| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
947| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
948| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
949| <a href='undocumented#Shader'>Shader</a> | nullptr |
950| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
951| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
952| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
953| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
954| <a href='#Text_Size'>Text Size</a> | 12 |
955| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
956| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
957| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
958| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
959| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
960| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
961| <a href='#Vertical_Text'>Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400962
963The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500964paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400965build system.
966
967### Return Value
968
Cary Clark682c58d2018-05-16 07:07:07 -0400969default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400970
971### Example
972
973<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
974
975---
976
Cary Clark682c58d2018-05-16 07:07:07 -0400977<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400978## SkPaint
979
Cary Clark682c58d2018-05-16 07:07:07 -0400980<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
981<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400982</pre>
983
Cary Clark682c58d2018-05-16 07:07:07 -0400984Makes 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>,
985<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
986between 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 -0400987their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400988
Cary Clark682c58d2018-05-16 07:07:07 -0400989The 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>,
990<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
991This 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 -0400992
993### Parameters
994
Cary Clark682c58d2018-05-16 07:07:07 -0400995<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
996 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400997 </tr>
998</table>
999
1000### Return Value
1001
Cary Clark682c58d2018-05-16 07:07:07 -04001002shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001003
1004### Example
1005
1006<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
1007
1008#### Example Output
1009
1010~~~~
1011SK_ColorRED == paint1.getColor()
1012SK_ColorBLUE == paint2.getColor()
1013~~~~
1014
1015</fiddle-embed></div>
1016
1017---
1018
Cary Clark682c58d2018-05-16 07:07:07 -04001019<a name='SkPaint_move_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001020## SkPaint
1021
Cary Clark682c58d2018-05-16 07:07:07 -04001022<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1023<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -04001024</pre>
1025
Cary Clarkd0530ba2017-09-14 11:25:39 -04001026Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -04001027of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001028
Cary Clark682c58d2018-05-16 07:07:07 -04001029After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001030
1031### Parameters
1032
Cary Clark682c58d2018-05-16 07:07:07 -04001033<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
1034 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001035 </tr>
1036</table>
1037
1038### Return Value
1039
Cary Clark682c58d2018-05-16 07:07:07 -04001040content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001041
1042### Example
1043
1044<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
1045
1046#### Example Output
1047
1048~~~~
1049path effect unique: true
1050~~~~
1051
1052</fiddle-embed></div>
1053
1054---
1055
Cary Clark682c58d2018-05-16 07:07:07 -04001056<a name='SkPaint_reset'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001057## reset
1058
Cary Clark682c58d2018-05-16 07:07:07 -04001059<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1060void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001061</pre>
1062
Cary Clark682c58d2018-05-16 07:07:07 -04001063Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
1064<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001065
1066### Example
1067
1068<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
1069
1070#### Example Output
1071
1072~~~~
1073paint1 == paint2
1074~~~~
1075
1076</fiddle-embed></div>
1077
1078---
1079
Cary Clark682c58d2018-05-16 07:07:07 -04001080<a name='SkPaint_destructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001081## ~SkPaint
1082
Cary Clark682c58d2018-05-16 07:07:07 -04001083<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1084<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001085</pre>
1086
Cary Clark682c58d2018-05-16 07:07:07 -04001087Decreases <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>,
1088<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
1089objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -04001090
1091---
1092
Cary Clark682c58d2018-05-16 07:07:07 -04001093## <a name='Management'>Management</a>
Cary Clark12799e12017-07-28 15:18:29 -04001094
Cary Clark682c58d2018-05-16 07:07:07 -04001095<a name='SkPaint_copy_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001096## operator=
1097
Cary Clark682c58d2018-05-16 07:07:07 -04001098<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1099<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001100</pre>
1101
Cary Clark682c58d2018-05-16 07:07:07 -04001102Makes 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>,
1103<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
1104between 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 -04001105prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -04001106resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
1107are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -04001108
1109### Parameters
1110
Cary Clark682c58d2018-05-16 07:07:07 -04001111<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
1112 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -04001113 </tr>
1114</table>
1115
1116### Return Value
1117
Cary Clark682c58d2018-05-16 07:07:07 -04001118content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001119
1120### Example
1121
1122<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
1123
1124#### Example Output
1125
1126~~~~
1127SK_ColorRED == paint1.getColor()
1128SK_ColorRED == paint2.getColor()
1129~~~~
1130
1131</fiddle-embed></div>
1132
1133---
1134
Cary Clark682c58d2018-05-16 07:07:07 -04001135<a name='SkPaint_move_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001136## operator=
1137
Cary Clark682c58d2018-05-16 07:07:07 -04001138<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1139<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001140</pre>
1141
Cary Clark682c58d2018-05-16 07:07:07 -04001142Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
1143of 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 -04001144prior destination are decreased by one; those objects are deleted if the resulting count
1145is zero.
Cary Clark12799e12017-07-28 15:18:29 -04001146
Cary Clark682c58d2018-05-16 07:07:07 -04001147After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001148
1149### Parameters
1150
Cary Clark682c58d2018-05-16 07:07:07 -04001151<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
1152 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001153 </tr>
1154</table>
1155
1156### Return Value
1157
Cary Clark682c58d2018-05-16 07:07:07 -04001158content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001159
1160### Example
1161
1162<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
1163
1164#### Example Output
1165
1166~~~~
1167SK_ColorRED == paint2.getColor()
1168~~~~
1169
1170</fiddle-embed></div>
1171
1172---
1173
Cary Clark682c58d2018-05-16 07:07:07 -04001174<a name='SkPaint_equal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001175## operator==
1176
Cary Clark682c58d2018-05-16 07:07:07 -04001177<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1178bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001179</pre>
1180
Cary Clark682c58d2018-05-16 07:07:07 -04001181Compares <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
1182if <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>,
1183<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 -04001184
1185### Parameters
1186
Cary Clark682c58d2018-05-16 07:07:07 -04001187<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
1188 <td><a href='#Paint'>Paint</a> to compare</td>
1189 </tr>
1190 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
1191 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001192 </tr>
1193</table>
1194
1195### Return Value
1196
Cary Clark682c58d2018-05-16 07:07:07 -04001197true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001198
1199### Example
1200
1201<div><fiddle-embed name="7481a948e34672720337a631830586dd">
1202
1203#### Example Output
1204
1205~~~~
1206paint1 == paint2
1207paint1 != paint2
1208~~~~
1209
1210</fiddle-embed></div>
1211
Cary Clark06c20f32018-03-20 15:53:27 -04001212### See Also
1213
Cary Clark682c58d2018-05-16 07:07:07 -04001214<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001215
Cary Clark12799e12017-07-28 15:18:29 -04001216---
1217
Cary Clark682c58d2018-05-16 07:07:07 -04001218<a name='SkPaint_notequal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001219## operator!=
1220
Cary Clark682c58d2018-05-16 07:07:07 -04001221<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1222bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001223</pre>
1224
Cary Clark682c58d2018-05-16 07:07:07 -04001225Compares <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
1226if <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>,
1227<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 -04001228
1229### Parameters
1230
Cary Clark682c58d2018-05-16 07:07:07 -04001231<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
1232 <td><a href='#Paint'>Paint</a> to compare</td>
1233 </tr>
1234 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
1235 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001236 </tr>
1237</table>
1238
1239### Return Value
1240
Cary Clark682c58d2018-05-16 07:07:07 -04001241true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001242
1243### Example
1244
1245<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
1246
1247#### Example Output
1248
1249~~~~
1250paint1 == paint2
1251paint1 == paint2
1252~~~~
1253
1254</fiddle-embed></div>
1255
Cary Clark06c20f32018-03-20 15:53:27 -04001256### See Also
1257
Cary Clark682c58d2018-05-16 07:07:07 -04001258<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001259
Cary Clark12799e12017-07-28 15:18:29 -04001260---
1261
Cary Clark682c58d2018-05-16 07:07:07 -04001262<a name='SkPaint_getHash'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001263## getHash
1264
Cary Clark682c58d2018-05-16 07:07:07 -04001265<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1266uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001267</pre>
1268
Cary Clark682c58d2018-05-16 07:07:07 -04001269Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001270Identical hashes guarantee that the paints are
1271equivalent, but differing hashes do not guarantee that the paints have differing
1272contents.
1273
Cary Clark682c58d2018-05-16 07:07:07 -04001274If <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 -04001275their hashes are also equal.
1276
1277The hash returned is platform and implementation specific.
1278
1279### Return Value
1280
1281a shallow hash
1282
1283### Example
1284
1285<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
1286
1287#### Example Output
1288
1289~~~~
1290paint1 == paint2
1291paint1.getHash() == paint2.getHash()
1292~~~~
1293
1294</fiddle-embed></div>
1295
1296---
1297
Cary Clark682c58d2018-05-16 07:07:07 -04001298## <a name='Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001299
Cary Clark682c58d2018-05-16 07:07:07 -04001300## <a name='SkPaint_Hinting'>Enum SkPaint::Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001301
Cary Clarka560c472017-11-27 10:44:06 -05001302<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001303 enum <a href='#SkPaint_Hinting'>Hinting</a> {
1304 <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> = 0,
1305 <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> = 1,
1306 <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> = 2,
1307 <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -04001308 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001309</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001310
Cary Clark682c58d2018-05-16 07:07:07 -04001311<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
1312look 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 -04001313muted effect or no effect at all depending on the platform.
1314
Cary Clark7cfcbca2018-01-04 16:11:51 -05001315The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -04001316as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001317
1318### Constants
1319
Cary Clark682c58d2018-05-16 07:07:07 -04001320<table style='border-collapse: collapse; width: 62.5em'>
1321 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1322<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1323<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1324 <tr style='background-color: #f0f0f0; '>
1325 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
1326 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1328Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001329With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
1330bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -04001331outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -05001332to 26.6 fractional pixels.
1333</td>
Cary Clark12799e12017-07-28 15:18:29 -04001334 </tr>
1335 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001336 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
1337 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1338 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1339Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001340With FreeType, this is equivalent in spirit to the
1341FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -04001342lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -04001343Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05001344</td>
Cary Clark12799e12017-07-28 15:18:29 -04001345 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001346 <tr style='background-color: #f0f0f0; '>
1347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
1348 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1349 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1350Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001351With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
1352choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -05001353gray-level rendering.
1354</td>
Cary Clark12799e12017-07-28 15:18:29 -04001355 </tr>
1356 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001357 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
1358 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1359 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1360Modifies glyph outlines for maxiumum constrast. With FreeType, this selects
1361FT_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 -05001362FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
1363horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -05001364variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
1365</td>
Cary Clark12799e12017-07-28 15:18:29 -04001366 </tr>
1367</table>
1368
Cary Clark682c58d2018-05-16 07:07:07 -04001369On <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
1370to account for LCD text. No hinting uses <a href='undocumented#Core_Text'>Core Text</a> gray scale output.
1371Normal hinting uses <a href='undocumented#Core_Text'>Core Text</a> LCD output. If <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is clear,
1372the LCD output is reduced to a single grayscale channel.
Cary Clark12799e12017-07-28 15:18:29 -04001373
Cary Clark682c58d2018-05-16 07:07:07 -04001374On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -04001375
Cary Clark682c58d2018-05-16 07:07:07 -04001376<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1377Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04001378
Cary Clark682c58d2018-05-16 07:07:07 -04001379<a name='SkPaint_getHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001380## getHinting
1381
Cary Clark682c58d2018-05-16 07:07:07 -04001382<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1383<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001384</pre>
1385
1386Returns level of glyph outline adjustment.
1387
1388### Return Value
1389
Cary Clark682c58d2018-05-16 07:07:07 -04001390one 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 -04001391
1392### Example
1393
1394<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
1395
1396#### Example Output
1397
1398~~~~
1399SkPaint::kNormal_Hinting == paint.getHinting()
1400~~~~
1401
1402</fiddle-embed></div>
1403
1404---
1405
Cary Clark682c58d2018-05-16 07:07:07 -04001406<a name='SkPaint_setHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001407## setHinting
1408
Cary Clark682c58d2018-05-16 07:07:07 -04001409<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1410void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -04001411</pre>
1412
1413Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -04001414Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001415
Cary Clark682c58d2018-05-16 07:07:07 -04001416| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -04001417| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -04001418| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
1419| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
1420| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
1421| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -04001422
1423### Parameters
1424
Cary Clark682c58d2018-05-16 07:07:07 -04001425<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
1426 <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 -04001427 </tr>
1428</table>
1429
1430### Example
1431
1432<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
1433
1434#### Example Output
1435
1436~~~~
1437paint1 == paint2
1438~~~~
1439
1440</fiddle-embed></div>
1441
1442---
1443
Cary Clark682c58d2018-05-16 07:07:07 -04001444## <a name='Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001445
Cary Clark682c58d2018-05-16 07:07:07 -04001446## <a name='SkPaint_Flags'>Enum SkPaint::Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001447
Cary Clarka560c472017-11-27 10:44:06 -05001448<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001449 enum <a href='#SkPaint_Flags'>Flags</a> {
1450 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> = 0x01,
1451 <a href='#SkPaint_kDither_Flag'>kDither Flag</a> = 0x04,
1452 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> = 0x20,
1453 <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> = 0x40,
1454 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> = 0x80,
1455 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> = 0x200,
1456 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> = 0x400,
1457 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> = 0x800,
1458 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -04001459
Cary Clark682c58d2018-05-16 07:07:07 -04001460 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -04001461 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001462
Cary Clark12799e12017-07-28 15:18:29 -04001463</pre>
1464
Cary Clark682c58d2018-05-16 07:07:07 -04001465The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
1466The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
1467with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
1468All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -04001469multiple settings at once.
1470
1471### Constants
1472
Cary Clark682c58d2018-05-16 07:07:07 -04001473<table style='border-collapse: collapse; width: 62.5em'>
1474 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1475<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1476<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1477 <tr style='background-color: #f0f0f0; '>
1478 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
1479 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
1480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -04001481mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -04001482 </tr>
1483 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001484 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
1485 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
1486 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1487mask for setting Dither</td>
1488 </tr>
1489 <tr style='background-color: #f0f0f0; '>
1490 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
1491 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
1492 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1493mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -04001494 </tr>
1495 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001496 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
1497 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
1498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1499mask for setting Linear_Text</td>
1500 </tr>
1501 <tr style='background-color: #f0f0f0; '>
1502 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
1503 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
1504 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1505mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001506 </tr>
1507 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001508 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
1509 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
1510 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1511mask for setting LCD_Text</td>
1512 </tr>
1513 <tr style='background-color: #f0f0f0; '>
1514 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
1515 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
1516 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1517mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -04001518 </tr>
1519 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001520 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
1521 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
1522 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1523mask for setting Automatic_Hinting</td>
1524 </tr>
1525 <tr style='background-color: #f0f0f0; '>
1526 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kVerticalText_Flag'><code>SkPaint::kVerticalText_Flag</code></a></td>
1527 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x1000</td>
1528 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1529mask for setting Vertical_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001530 </tr>
1531 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001532 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
1533 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
1534 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1535mask 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 -04001536 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001537<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
1538</table>
Cary Clark12799e12017-07-28 15:18:29 -04001539
Cary Clark682c58d2018-05-16 07:07:07 -04001540## <a name='SkPaint_ReserveFlags'>Enum SkPaint::ReserveFlags</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001541
Cary Clark682c58d2018-05-16 07:07:07 -04001542Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04001543
Cary Clark4855f782018-02-06 09:41:53 -05001544soonOnly valid for Android framework.
1545
Cary Clarka560c472017-11-27 10:44:06 -05001546<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001547 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
1548 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText ReserveFlag</a> = 0x08,
1549 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -04001550 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001551</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001552
1553### Constants
1554
Cary Clark682c58d2018-05-16 07:07:07 -04001555<table style='border-collapse: collapse; width: 62.5em'>
1556 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1557<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1558<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1559 <tr style='background-color: #f0f0f0; '>
1560 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
1561 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
1562 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1563Deprecated.
1564
1565soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001566 </tr>
1567 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001568 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
1569 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
1570 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1571Deprecated.
1572
1573soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001574 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001575</table>
Cary Clark4855f782018-02-06 09:41:53 -05001576
Cary Clark682c58d2018-05-16 07:07:07 -04001577<a name='SkPaint_getFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001578## getFlags
1579
Cary Clark682c58d2018-05-16 07:07:07 -04001580<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1581uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001582</pre>
1583
Cary Clark682c58d2018-05-16 07:07:07 -04001584Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
1585bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -04001586
1587### Return Value
1588
Cary Clark682c58d2018-05-16 07:07:07 -04001589zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001590
1591### Example
1592
1593<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
1594
1595#### Example Output
1596
1597~~~~
1598(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
1599~~~~
1600
1601</fiddle-embed></div>
1602
1603---
1604
Cary Clark682c58d2018-05-16 07:07:07 -04001605<a name='SkPaint_setFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001606## setFlags
1607
Cary Clark682c58d2018-05-16 07:07:07 -04001608<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1609void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -04001610</pre>
1611
Cary Clark682c58d2018-05-16 07:07:07 -04001612Replaces <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.
1613All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -04001614
1615### Parameters
1616
Cary Clark682c58d2018-05-16 07:07:07 -04001617<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
1618 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001619 </tr>
1620</table>
1621
1622### Example
1623
1624<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
1625
1626#### Example Output
1627
1628~~~~
1629paint.isAntiAlias()
1630paint.isDither()
1631~~~~
1632
1633</fiddle-embed></div>
1634
1635---
1636
Cary Clarkffb3d682018-05-17 12:17:28 -04001637## <a name='Anti_Alias'>Anti Alias</a>
Cary Clark08895c42018-02-01 09:37:32 -05001638
Cary Clarkffb3d682018-05-17 12:17:28 -04001639<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -04001640If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
1641If <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 -04001642
Cary Clark682c58d2018-05-16 07:07:07 -04001643The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -04001644passing through the pixel center may, but is not required to, draw the pixel.
1645
Cary Clark682c58d2018-05-16 07:07:07 -04001646<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
1647active <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 -04001648
Cary Clarkffb3d682018-05-17 12:17:28 -04001649A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
1650<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 -04001651<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001652
Cary Clarkffb3d682018-05-17 12:17:28 -04001653The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -04001654
Cary Clarkffb3d682018-05-17 12:17:28 -04001655<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
1656<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 -04001657at compile time.
1658
1659### Example
1660
1661<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
1662A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -04001663The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
1664<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001665</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001666
Cary Clark682c58d2018-05-16 07:07:07 -04001667<a name='SkPaint_isAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001668## isAntiAlias
1669
Cary Clark682c58d2018-05-16 07:07:07 -04001670<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1671bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001672</pre>
1673
Cary Clark682c58d2018-05-16 07:07:07 -04001674If true, pixels on the active edges of <a href='SkPath_Reference#Path'>Path</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -04001675
Cary Clark682c58d2018-05-16 07:07:07 -04001676Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001677
1678### Return Value
1679
Cary Clark682c58d2018-05-16 07:07:07 -04001680<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001681
1682### Example
1683
1684<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
1685
1686#### Example Output
1687
1688~~~~
1689paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1690paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1691~~~~
1692
1693</fiddle-embed></div>
1694
1695---
1696
Cary Clark682c58d2018-05-16 07:07:07 -04001697<a name='SkPaint_setAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001698## setAntiAlias
1699
Cary Clark682c58d2018-05-16 07:07:07 -04001700<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1701void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001702</pre>
1703
Cary Clark682c58d2018-05-16 07:07:07 -04001704Requests, 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 -04001705partial transparency.
1706
Cary Clark682c58d2018-05-16 07:07:07 -04001707Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1708Clears <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 -04001709
1710### Parameters
1711
Cary Clark682c58d2018-05-16 07:07:07 -04001712<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1713 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001714 </tr>
1715</table>
1716
1717### Example
1718
1719<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1720
1721#### Example Output
1722
1723~~~~
1724paint1 == paint2
1725~~~~
1726
1727</fiddle-embed></div>
1728
1729---
1730
Cary Clark682c58d2018-05-16 07:07:07 -04001731## <a name='Dither'>Dither</a>
Cary Clark08895c42018-02-01 09:37:32 -05001732
Cary Clark682c58d2018-05-16 07:07:07 -04001733<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001734This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001735Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1736and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1737and 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 -04001738
1739Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001740<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>.
1741<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
1742<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 -04001743
Cary Clark682c58d2018-05-16 07:07:07 -04001744<a href='#Dither'>Dither</a> is disabled by default.
1745<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 -04001746at compile time.
1747
Cary Clark682c58d2018-05-16 07:07:07 -04001748Some 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 -04001749
1750### Example
1751
1752<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 -05001753alternating nearby colors from pixel to pixel.
1754</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001755
1756### Example
1757
1758<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001759Drawing the gradient repeatedly with <a href='undocumented#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001760dither, making it easier to see.
1761</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001762
Cary Clark682c58d2018-05-16 07:07:07 -04001763<a name='SkPaint_isDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001764## isDither
1765
Cary Clark682c58d2018-05-16 07:07:07 -04001766<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1767bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001768</pre>
1769
1770If true, color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001771
Cary Clark682c58d2018-05-16 07:07:07 -04001772Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001773
1774### Return Value
1775
Cary Clark682c58d2018-05-16 07:07:07 -04001776<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001777
1778### Example
1779
1780<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1781
1782#### Example Output
1783
1784~~~~
1785paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1786paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1787~~~~
1788
1789</fiddle-embed></div>
1790
1791---
1792
Cary Clark682c58d2018-05-16 07:07:07 -04001793<a name='SkPaint_setDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001794## setDither
1795
Cary Clark682c58d2018-05-16 07:07:07 -04001796<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1797void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001798</pre>
1799
1800Requests, but does not require, to distribute color error.
1801
Cary Clark682c58d2018-05-16 07:07:07 -04001802Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1803Clears <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 -04001804
1805### Parameters
1806
Cary Clark682c58d2018-05-16 07:07:07 -04001807<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1808 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001809 </tr>
1810</table>
1811
1812### Example
1813
1814<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1815
1816#### Example Output
1817
1818~~~~
1819paint1 == paint2
1820~~~~
1821
1822</fiddle-embed></div>
1823
1824### See Also
1825
Cary Clark682c58d2018-05-16 07:07:07 -04001826<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001827
1828---
1829
1830### See Also
1831
Cary Clarkffb3d682018-05-17 12:17:28 -04001832Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001833
Cary Clark682c58d2018-05-16 07:07:07 -04001834## <a name='Device_Text'>Device Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05001835
Cary Clark682c58d2018-05-16 07:07:07 -04001836<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 -04001837
Cary Clarkffb3d682018-05-17 12:17:28 -04001838When 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 -04001839create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001840on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001841<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 -04001842the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001843
Cary Clark682c58d2018-05-16 07:07:07 -04001844<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 -04001845As the opaqueness
1846of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1847
1848Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001849<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1850<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
1851<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 -04001852
1853### Example
1854
Cary Clark682c58d2018-05-16 07:07:07 -04001855<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>.
1856When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1857When <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 -05001858</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001859
Cary Clark682c58d2018-05-16 07:07:07 -04001860## <a name='Linear_Text'>Linear Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001861
Cary Clark682c58d2018-05-16 07:07:07 -04001862<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>.
1863If <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>.
1864If <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 -04001865
Cary Clark682c58d2018-05-16 07:07:07 -04001866<a name='SkPaint_isLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001867## isLinearText
1868
Cary Clark682c58d2018-05-16 07:07:07 -04001869<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1870bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001871</pre>
1872
Cary Clark682c58d2018-05-16 07:07:07 -04001873If true, text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001874
Cary Clark682c58d2018-05-16 07:07:07 -04001875Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001876
1877### Return Value
1878
Cary Clark682c58d2018-05-16 07:07:07 -04001879<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001880
1881### Example
1882
1883<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1884
1885### See Also
1886
Cary Clark682c58d2018-05-16 07:07:07 -04001887<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001888
1889---
1890
Cary Clark682c58d2018-05-16 07:07:07 -04001891<a name='SkPaint_setLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001892## setLinearText
1893
Cary Clark682c58d2018-05-16 07:07:07 -04001894<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1895void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001896</pre>
1897
Cary Clark682c58d2018-05-16 07:07:07 -04001898If true, text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
1899By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001900
Cary Clark682c58d2018-05-16 07:07:07 -04001901Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1902Clears <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 -04001903
1904### Parameters
1905
Cary Clark682c58d2018-05-16 07:07:07 -04001906<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1907 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001908 </tr>
1909</table>
1910
1911### Example
1912
1913<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1914
1915### See Also
1916
Cary Clark682c58d2018-05-16 07:07:07 -04001917<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001918
1919---
1920
Cary Clark682c58d2018-05-16 07:07:07 -04001921## <a name='Subpixel_Text'>Subpixel Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001922
Cary Clark682c58d2018-05-16 07:07:07 -04001923<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 -04001924As the opaqueness
1925of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1926
Cary Clark682c58d2018-05-16 07:07:07 -04001927<a name='SkPaint_isSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001928## isSubpixelText
1929
Cary Clark682c58d2018-05-16 07:07:07 -04001930<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1931bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001932</pre>
1933
Cary Clark682c58d2018-05-16 07:07:07 -04001934If true, <a href='undocumented#Glyph'>Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001935
Cary Clark682c58d2018-05-16 07:07:07 -04001936Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001937
1938### Return Value
1939
Cary Clark682c58d2018-05-16 07:07:07 -04001940<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001941
1942### Example
1943
1944<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1945
1946#### Example Output
1947
1948~~~~
1949paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1950paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1951~~~~
1952
1953</fiddle-embed></div>
1954
1955---
1956
Cary Clark682c58d2018-05-16 07:07:07 -04001957<a name='SkPaint_setSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001958## setSubpixelText
1959
Cary Clark682c58d2018-05-16 07:07:07 -04001960<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1961void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001962</pre>
1963
Cary Clark682c58d2018-05-16 07:07:07 -04001964Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001965
Cary Clark682c58d2018-05-16 07:07:07 -04001966Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1967Clears <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 -04001968
1969### Parameters
1970
Cary Clark682c58d2018-05-16 07:07:07 -04001971<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1972 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001973 </tr>
1974</table>
1975
1976### Example
1977
1978<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1979
1980#### Example Output
1981
1982~~~~
1983paint1 == paint2
1984~~~~
1985
1986</fiddle-embed></div>
1987
1988---
1989
Cary Clark682c58d2018-05-16 07:07:07 -04001990## <a name='LCD_Text'>LCD Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001991
Cary Clarkffb3d682018-05-17 12:17:28 -04001992When 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 -04001993create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001994on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001995<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 -04001996the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001997
Cary Clark682c58d2018-05-16 07:07:07 -04001998<a name='SkPaint_isLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001999## isLCDRenderText
2000
Cary Clark682c58d2018-05-16 07:07:07 -04002001<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2002bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002003</pre>
2004
Cary Clark682c58d2018-05-16 07:07:07 -04002005If true, <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002006
Cary Clark682c58d2018-05-16 07:07:07 -04002007Returns 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 -04002008
2009### Return Value
2010
Cary Clark682c58d2018-05-16 07:07:07 -04002011<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002012
2013### Example
2014
2015<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
2016
2017#### Example Output
2018
2019~~~~
2020paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2021paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2022~~~~
2023
2024</fiddle-embed></div>
2025
2026---
2027
Cary Clark682c58d2018-05-16 07:07:07 -04002028<a name='SkPaint_setLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002029## setLCDRenderText
2030
Cary Clark682c58d2018-05-16 07:07:07 -04002031<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2032void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04002033</pre>
2034
Cary Clark682c58d2018-05-16 07:07:07 -04002035Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002036
Cary Clark682c58d2018-05-16 07:07:07 -04002037Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
2038Clears <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 -04002039
2040### Parameters
2041
Cary Clark682c58d2018-05-16 07:07:07 -04002042<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
2043 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002044 </tr>
2045</table>
2046
2047### Example
2048
2049<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
2050
2051#### Example Output
2052
2053~~~~
2054paint1 == paint2
2055~~~~
2056
2057</fiddle-embed></div>
2058
2059---
2060
Cary Clark682c58d2018-05-16 07:07:07 -04002061## <a name='Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a>
Cary Clark08895c42018-02-01 09:37:32 -05002062
Cary Clark682c58d2018-05-16 07:07:07 -04002063<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
2064<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 -05002065in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04002066
Cary Clark682c58d2018-05-16 07:07:07 -04002067FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
2068the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002069Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04002070<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04002071
Cary Clark682c58d2018-05-16 07:07:07 -04002072<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
2073<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
2074<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002075
2076### Example
2077
Cary Clarka560c472017-11-27 10:44:06 -05002078<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05002079<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05002080 includes an embedded bitmap Glyph at odd font sizes. This example works
2081 on platforms that use FreeType as their Font_Engine.
2082 Windows may, but is not required to, return a bitmap glyph if
2083 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
2084 bitmap.allocN32Pixels(30, 15);
2085 bitmap.eraseColor(0);
2086 SkCanvas offscreen(bitmap);
2087 SkPaint paint;
2088 paint.setAntiAlias(true);
2089 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05002090 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05002091 for (bool embedded : { false, true}) {
2092 paint.setEmbeddedBitmapText(embedded);
2093 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
2094 }
2095 canvas->drawBitmap(bitmap, 0, 0);
2096 canvas->scale(10, 10);
2097 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05002098
Cary Clarka560c472017-11-27 10:44:06 -05002099</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002100
Cary Clark682c58d2018-05-16 07:07:07 -04002101<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002102## isEmbeddedBitmapText
2103
Cary Clark682c58d2018-05-16 07:07:07 -04002104<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2105bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002106</pre>
2107
Cary Clark682c58d2018-05-16 07:07:07 -04002108If true, <a href='undocumented#Engine'>Font Engine</a> may return <a href='undocumented#Glyph'>Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04002109
Cary Clark682c58d2018-05-16 07:07:07 -04002110Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002111
2112### Return Value
2113
Cary Clark682c58d2018-05-16 07:07:07 -04002114<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002115
2116### Example
2117
2118<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
2119
2120#### Example Output
2121
2122~~~~
2123paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2124paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2125~~~~
2126
2127</fiddle-embed></div>
2128
2129---
2130
Cary Clark682c58d2018-05-16 07:07:07 -04002131<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002132## setEmbeddedBitmapText
2133
Cary Clark682c58d2018-05-16 07:07:07 -04002134<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2135void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04002136</pre>
2137
2138Requests, but does not require, to use bitmaps in fonts instead of outlines.
2139
Cary Clark682c58d2018-05-16 07:07:07 -04002140Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
2141Clears <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 -04002142
2143### Parameters
2144
Cary Clark682c58d2018-05-16 07:07:07 -04002145<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
2146 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002147 </tr>
2148</table>
2149
2150### Example
2151
2152<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
2153
2154#### Example Output
2155
2156~~~~
2157paint1 == paint2
2158~~~~
2159
2160</fiddle-embed></div>
2161
2162---
2163
Cary Clark682c58d2018-05-16 07:07:07 -04002164## <a name='Automatic_Hinting'>Automatic Hinting</a>
Cary Clark08895c42018-02-01 09:37:32 -05002165
Cary Clark682c58d2018-05-16 07:07:07 -04002166If <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>
2167instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2168<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
2169<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002170
Cary Clark682c58d2018-05-16 07:07:07 -04002171<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 -04002172
Cary Clark682c58d2018-05-16 07:07:07 -04002173<a name='SkPaint_isAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002174## isAutohinted
2175
Cary Clark682c58d2018-05-16 07:07:07 -04002176<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2177bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002178</pre>
2179
Cary Clark682c58d2018-05-16 07:07:07 -04002180If true, and if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, and if
2181platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>, instruct the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint
2182<a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002183
Cary Clark682c58d2018-05-16 07:07:07 -04002184Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002185
2186### Return Value
2187
Cary Clark682c58d2018-05-16 07:07:07 -04002188<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002189
2190### Example
2191
2192<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
2193
2194#### Example Output
2195
2196~~~~
2197paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2198paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2199~~~~
2200
2201</fiddle-embed></div>
2202
2203### See Also
2204
Cary Clark682c58d2018-05-16 07:07:07 -04002205<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002206
2207---
2208
Cary Clark682c58d2018-05-16 07:07:07 -04002209<a name='SkPaint_setAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002210## setAutohinted
2211
Cary Clark682c58d2018-05-16 07:07:07 -04002212<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2213void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04002214</pre>
2215
Cary Clark682c58d2018-05-16 07:07:07 -04002216If <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,
2217instruct the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2218<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
2219<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002220
Cary Clark682c58d2018-05-16 07:07:07 -04002221Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002222
Cary Clark682c58d2018-05-16 07:07:07 -04002223Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
2224Clears <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 -04002225
2226### Parameters
2227
Cary Clark682c58d2018-05-16 07:07:07 -04002228<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
2229 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002230 </tr>
2231</table>
2232
2233### Example
2234
2235<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
2236
2237### See Also
2238
Cary Clark682c58d2018-05-16 07:07:07 -04002239<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002240
2241---
2242
Cary Clark682c58d2018-05-16 07:07:07 -04002243## <a name='Vertical_Text'>Vertical Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05002244
Cary Clark682c58d2018-05-16 07:07:07 -04002245<a href='undocumented#Text'>Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
2246using <a href='undocumented#Advance'>Font Advance</a> to position subsequent <a href='undocumented#Glyph'>Glyphs</a>. By default, each successive glyph
2247is positioned to the right of the preceding glyph. <a href='#Vertical_Text'>Vertical Text</a> sets successive
2248<a href='undocumented#Glyph'>Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04002249
Cary Clark682c58d2018-05-16 07:07:07 -04002250Skia 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 -05002251font substitution,
2252textual substitution, line layout, or contextual spacing like Kerning pairs. Use
Cary Clark682c58d2018-05-16 07:07:07 -04002253a text shaping engine like <a href='https://harfbuzz.org/'>HarfBuzz</a></a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04002254into glyph series.
2255
Cary Clark682c58d2018-05-16 07:07:07 -04002256<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 -04002257
Cary Clark682c58d2018-05-16 07:07:07 -04002258<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if clear draws text left to right.
2259<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 -04002260
Cary Clark682c58d2018-05-16 07:07:07 -04002261<a href='#Vertical_Text'>Vertical Text</a> is clear by default.
2262<a href='#Vertical_Text'>Vertical Text</a> can be set by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
2263<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002264
2265### Example
2266
2267<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
2268
Cary Clark682c58d2018-05-16 07:07:07 -04002269<a name='SkPaint_isVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002270## isVerticalText
2271
Cary Clark682c58d2018-05-16 07:07:07 -04002272<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2273bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002274</pre>
2275
Cary Clark682c58d2018-05-16 07:07:07 -04002276If true, <a href='undocumented#Glyph'>Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04002277
Cary Clark682c58d2018-05-16 07:07:07 -04002278Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002279
2280### Return Value
2281
Cary Clark682c58d2018-05-16 07:07:07 -04002282<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002283
2284### Example
2285
2286<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
2287
2288#### Example Output
2289
2290~~~~
2291paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2292paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2293~~~~
2294
2295</fiddle-embed></div>
2296
2297---
2298
Cary Clark682c58d2018-05-16 07:07:07 -04002299<a name='SkPaint_setVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002300## setVerticalText
2301
Cary Clark682c58d2018-05-16 07:07:07 -04002302<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2303void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText)
Cary Clark12799e12017-07-28 15:18:29 -04002304</pre>
2305
2306If true, text advance positions the next glyph below the previous glyph instead of to the
2307right of previous glyph.
2308
Cary Clark682c58d2018-05-16 07:07:07 -04002309Sets <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is true.
2310Clears <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04002311
2312### Parameters
2313
Cary Clark682c58d2018-05-16 07:07:07 -04002314<table> <tr> <td><a name='SkPaint_setVerticalText_verticalText'><code><strong>verticalText</strong></code></a></td>
2315 <td>setting for <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002316 </tr>
2317</table>
2318
2319### Example
2320
2321<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
2322
2323#### Example Output
2324
2325~~~~
2326paint1 == paint2
2327~~~~
2328
2329</fiddle-embed></div>
2330
2331---
2332
Cary Clark682c58d2018-05-16 07:07:07 -04002333## <a name='Fake_Bold'>Fake Bold</a>
Cary Clark08895c42018-02-01 09:37:32 -05002334
Cary Clark682c58d2018-05-16 07:07:07 -04002335<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 -05002336is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04002337bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002338
Cary Clark682c58d2018-05-16 07:07:07 -04002339Use <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 -04002340is not available.
2341
Cary Clark7cfcbca2018-01-04 16:11:51 -05002342A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04002343the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
2344by 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 -04002345
Cary Clark682c58d2018-05-16 07:07:07 -04002346<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04002347
2348### Example
2349
2350<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
2351
Cary Clark682c58d2018-05-16 07:07:07 -04002352<a name='SkPaint_isFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002353## isFakeBoldText
2354
Cary Clark682c58d2018-05-16 07:07:07 -04002355<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2356bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002357</pre>
2358
2359If true, approximate bold by increasing the stroke width when creating glyph bitmaps
2360from outlines.
2361
Cary Clark682c58d2018-05-16 07:07:07 -04002362Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002363
2364### Return Value
2365
Cary Clark682c58d2018-05-16 07:07:07 -04002366<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002367
2368### Example
2369
2370<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
2371
2372#### Example Output
2373
2374~~~~
2375paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2376paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2377~~~~
2378
2379</fiddle-embed></div>
2380
2381---
2382
Cary Clark682c58d2018-05-16 07:07:07 -04002383<a name='SkPaint_setFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002384## setFakeBoldText
2385
Cary Clark682c58d2018-05-16 07:07:07 -04002386<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2387void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04002388</pre>
2389
Cary Clarkce101242017-09-01 15:51:02 -04002390Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04002391
Cary Clark682c58d2018-05-16 07:07:07 -04002392Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
2393Clears <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 -04002394
2395### Parameters
2396
Cary Clark682c58d2018-05-16 07:07:07 -04002397<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
2398 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002399 </tr>
2400</table>
2401
2402### Example
2403
2404<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
2405
2406#### Example Output
2407
2408~~~~
2409paint1 == paint2
2410~~~~
2411
2412</fiddle-embed></div>
2413
2414---
2415
Cary Clark682c58d2018-05-16 07:07:07 -04002416## <a name='Full_Hinting_Spacing'>Full Hinting Spacing</a>
Cary Clark08895c42018-02-01 09:37:32 -05002417
Cary Clark682c58d2018-05-16 07:07:07 -04002418if <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
2419spacing by the difference of the hinted and Unhinted <a href='undocumented#Left_Side_Bearing'>Left Side Bearing</a> and
2420<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
2421FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002422
Cary Clark682c58d2018-05-16 07:07:07 -04002423<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text Kerning, where the space between
Cary Clark7cfcbca2018-01-04 16:11:51 -05002424a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04002425
Cary Clark682c58d2018-05-16 07:07:07 -04002426<a name='SkPaint_isDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002427## isDevKernText
2428
Cary Clark682c58d2018-05-16 07:07:07 -04002429<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2430bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002431</pre>
2432
Cary Clark682c58d2018-05-16 07:07:07 -04002433Deprecated.
2434
Cary Clark12799e12017-07-28 15:18:29 -04002435---
2436
Cary Clark682c58d2018-05-16 07:07:07 -04002437<a name='SkPaint_setDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002438## setDevKernText
2439
Cary Clark682c58d2018-05-16 07:07:07 -04002440<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2441void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04002442</pre>
2443
Cary Clark682c58d2018-05-16 07:07:07 -04002444Deprecated.
2445
Cary Clark12799e12017-07-28 15:18:29 -04002446---
2447
Cary Clark682c58d2018-05-16 07:07:07 -04002448## <a name='Filter_Quality_Methods'>Filter Quality Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05002449
Cary Clark682c58d2018-05-16 07:07:07 -04002450<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
2451A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
2452A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
2453If 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 -04002454in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04002455
Cary Clark682c58d2018-05-16 07:07:07 -04002456<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 -04002457
2458<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002459 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
2460 </tr> <tr>
2461 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
2462 </tr> <tr>
2463 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
2464 </tr> <tr>
2465 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
2466 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002467</table>
2468
Cary Clark682c58d2018-05-16 07:07:07 -04002469and 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 -04002470
Cary Clark682c58d2018-05-16 07:07:07 -04002471<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 -04002472
2473### Example
2474
skia-bookmaker525f9a92018-05-03 06:27:39 +00002475<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002476
Cary Clark682c58d2018-05-16 07:07:07 -04002477<a name='SkPaint_getFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002478## getFilterQuality
2479
Cary Clark682c58d2018-05-16 07:07:07 -04002480<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2481<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002482</pre>
2483
Cary Clark682c58d2018-05-16 07:07:07 -04002484Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002485draws faster; a higher setting looks better when the image is scaled.
2486
2487### Return Value
2488
Cary Clark682c58d2018-05-16 07:07:07 -04002489one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2490<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04002491
2492### Example
2493
2494<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
2495
2496#### Example Output
2497
2498~~~~
2499kNone_SkFilterQuality == paint.getFilterQuality()
2500~~~~
2501
2502</fiddle-embed></div>
2503
2504---
2505
Cary Clark682c58d2018-05-16 07:07:07 -04002506<a name='SkPaint_setFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002507## setFilterQuality
2508
Cary Clark682c58d2018-05-16 07:07:07 -04002509<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2510void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04002511</pre>
2512
Cary Clark682c58d2018-05-16 07:07:07 -04002513Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002514draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04002515Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04002516
2517### Parameters
2518
Cary Clark682c58d2018-05-16 07:07:07 -04002519<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
2520 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2521<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002522 </tr>
2523</table>
2524
2525### Example
2526
2527<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
2528
2529#### Example Output
2530
2531~~~~
2532kHigh_SkFilterQuality == paint.getFilterQuality()
2533~~~~
2534
2535</fiddle-embed></div>
2536
2537### See Also
2538
Cary Clark682c58d2018-05-16 07:07:07 -04002539<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04002540
2541---
2542
Cary Clark682c58d2018-05-16 07:07:07 -04002543## <a name='Color_Methods'>Color Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002544
Cary Clarkab2621d2018-01-30 10:08:57 -05002545| name | description |
2546| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04002547| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
2548| <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 -04002549
Cary Clarkffb3d682018-05-17 12:17:28 -04002550<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 -05002551values used to draw a filled or stroked shape in a 32-bit value. Each component
2552occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
2553All values in any combination are valid.
2554
Cary Clark682c58d2018-05-16 07:07:07 -04002555<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 -04002556RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05002557
Cary Clarkffb3d682018-05-17 12:17:28 -04002558The 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 -05002559positions on the output device, which may have more or fewer bits, and may have
2560a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04002561
Cary Clarkffb3d682018-05-17 12:17:28 -04002562| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04002563| --- | --- | --- | --- | --- |
2564| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
2565
2566### Example
2567
2568<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
2569
Cary Clark682c58d2018-05-16 07:07:07 -04002570<a name='SkPaint_getColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002571## getColor
2572
Cary Clark682c58d2018-05-16 07:07:07 -04002573<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2574<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002575</pre>
2576
Cary Clarkffb3d682018-05-17 12:17:28 -04002577Retrieves <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 -04002578Use 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 -04002579a color component.
2580
2581### Return Value
2582
Cary Clarkffb3d682018-05-17 12:17:28 -04002583<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04002584
2585### Example
2586
2587<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
2588
2589#### Example Output
2590
2591~~~~
2592Yellow is 100% red, 100% green, and 0% blue.
2593~~~~
2594
2595</fiddle-embed></div>
2596
2597### See Also
2598
Cary Clark682c58d2018-05-16 07:07:07 -04002599<a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04002600
2601---
2602
Cary Clark682c58d2018-05-16 07:07:07 -04002603<a name='SkPaint_setColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002604## setColor
2605
Cary Clark682c58d2018-05-16 07:07:07 -04002606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2607void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04002608</pre>
2609
Cary Clarkffb3d682018-05-17 12:17:28 -04002610Sets <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,
2611<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 -04002612
2613### Parameters
2614
Cary Clark682c58d2018-05-16 07:07:07 -04002615<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002616 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04002617 </tr>
2618</table>
2619
2620### Example
2621
2622<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
2623
2624#### Example Output
2625
2626~~~~
2627green1 == green2
2628~~~~
2629
2630</fiddle-embed></div>
2631
2632### See Also
2633
Cary Clark682c58d2018-05-16 07:07:07 -04002634<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002635
2636---
2637
Cary Clark682c58d2018-05-16 07:07:07 -04002638## <a name='Alpha_Methods'>Alpha Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002639
Cary Clarkffb3d682018-05-17 12:17:28 -04002640<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 -04002641
Cary Clark682c58d2018-05-16 07:07:07 -04002642<a name='SkPaint_getAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002643## getAlpha
2644
Cary Clark682c58d2018-05-16 07:07:07 -04002645<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2646uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002647</pre>
2648
Cary Clark682c58d2018-05-16 07:07:07 -04002649Retrieves <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 -04002650
2651### Return Value
2652
Cary Clark682c58d2018-05-16 07:07:07 -04002653<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04002654
2655### Example
2656
2657<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
2658
2659#### Example Output
2660
2661~~~~
2662255 == paint.getAlpha()
2663~~~~
2664
2665</fiddle-embed></div>
2666
2667---
2668
Cary Clark682c58d2018-05-16 07:07:07 -04002669<a name='SkPaint_setAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002670## setAlpha
2671
Cary Clark682c58d2018-05-16 07:07:07 -04002672<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2673void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04002674</pre>
2675
Cary Clarkffb3d682018-05-17 12:17:28 -04002676Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04002677unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04002678build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
2679<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 -04002680fully opaque.
2681
2682### Parameters
2683
Cary Clark682c58d2018-05-16 07:07:07 -04002684<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
2685 <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 -04002686 </tr>
2687</table>
2688
2689### Example
2690
2691<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
2692
2693#### Example Output
2694
2695~~~~
26960x44112233 == paint.getColor()
2697~~~~
2698
2699</fiddle-embed></div>
2700
2701---
2702
Cary Clark682c58d2018-05-16 07:07:07 -04002703<a name='SkPaint_setARGB'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002704## setARGB
2705
Cary Clark682c58d2018-05-16 07:07:07 -04002706<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2707void <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 -04002708</pre>
2709
Cary Clark682c58d2018-05-16 07:07:07 -04002710Sets <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 -04002711The 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 -04002712
2713### Parameters
2714
Cary Clark682c58d2018-05-16 07:07:07 -04002715<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2716 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2717 </tr>
2718 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002719 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002720 </tr>
2721 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002722 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002723 </tr>
2724 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002725 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002726 </tr>
2727</table>
2728
2729### Example
2730
2731<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2732
2733#### Example Output
2734
2735~~~~
2736transRed1 == transRed2
2737~~~~
2738
2739</fiddle-embed></div>
2740
2741### See Also
2742
Cary Clark682c58d2018-05-16 07:07:07 -04002743<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002744
2745---
2746
Cary Clark682c58d2018-05-16 07:07:07 -04002747## <a name='Style'>Style</a>
Cary Clark08895c42018-02-01 09:37:32 -05002748
Cary Clark682c58d2018-05-16 07:07:07 -04002749<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2750Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002751
Cary Clark682c58d2018-05-16 07:07:07 -04002752Set <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 -04002753The fill covers the area inside the geometry for most shapes.
2754
Cary Clark682c58d2018-05-16 07:07:07 -04002755Set <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 -04002756
Cary Clark682c58d2018-05-16 07:07:07 -04002757## <a name='Style_Fill'>Style Fill</a>
Cary Clark12799e12017-07-28 15:18:29 -04002758
2759### See Also
2760
Cary Clark682c58d2018-05-16 07:07:07 -04002761<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002762
Cary Clark682c58d2018-05-16 07:07:07 -04002763## <a name='Style_Stroke'>Style Stroke</a>
Cary Clark12799e12017-07-28 15:18:29 -04002764
Cary Clarkbc5697d2017-10-04 14:31:33 -04002765The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002766<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>.
2767The 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 -04002768The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002769
Cary Clark682c58d2018-05-16 07:07:07 -04002770As <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
2771may 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 -04002772
Cary Clark682c58d2018-05-16 07:07:07 -04002773## <a name='Style_Hairline'>Style Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002774
Cary Clark682c58d2018-05-16 07:07:07 -04002775<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Style_Hairline'>Hairline</a>.
2776<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 -05002777flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002778
Cary Clark682c58d2018-05-16 07:07:07 -04002779<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
2780two 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
2781pixel. 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 -05002782GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002783while stroking.
2784
Cary Clark682c58d2018-05-16 07:07:07 -04002785## <a name='SkPaint_Style'>Enum SkPaint::Style</a>
Cary Clark12799e12017-07-28 15:18:29 -04002786
Cary Clarka560c472017-11-27 10:44:06 -05002787<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002788 enum <a href='#SkPaint_Style'>Style</a> {
2789 <a href='#SkPaint_kFill_Style'>kFill Style</a>,
2790 <a href='#SkPaint_kStroke_Style'>kStroke Style</a>,
2791 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002792 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002793
Cary Clark682c58d2018-05-16 07:07:07 -04002794 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 -05002795</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002796
Cary Clark682c58d2018-05-16 07:07:07 -04002797Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002798The stroke and fill
2799share all paint attributes; for instance, they are drawn with the same color.
2800
Cary Clark682c58d2018-05-16 07:07:07 -04002801Use <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 -04002802a fill draw.
2803
2804### Constants
2805
Cary Clark682c58d2018-05-16 07:07:07 -04002806<table style='border-collapse: collapse; width: 62.5em'>
2807 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2808<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2809<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2810 <tr style='background-color: #f0f0f0; '>
2811 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2812 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2813 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2814Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Round_Rect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
2815<a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkImage_Reference#Image'>Image</a>, <a href='undocumented#Patch'>Patches</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Sprite'>Sprites</a>, and <a href='undocumented#Vertices'>Vertices</a> are painted as if
2816<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2817The <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 -04002818and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002819<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 -05002820</td>
Cary Clark12799e12017-07-28 15:18:29 -04002821 </tr>
2822 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2824 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2825 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2826Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Round_Rect'>Round Rect</a>, <a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
2827<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,
2828and ignore the set <a href='#SkPaint_Style'>Style</a>.
2829The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2830</td>
2831 </tr>
2832 <tr style='background-color: #f0f0f0; '>
2833 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2834 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2836Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Round_Rect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
2837<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>,
2838and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002839</td>
Cary Clark12799e12017-07-28 15:18:29 -04002840 </tr>
2841 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002842 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2843 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2844 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2845May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002846</td>
Cary Clark12799e12017-07-28 15:18:29 -04002847 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002848</table>
Cary Clark12799e12017-07-28 15:18:29 -04002849
Cary Clark682c58d2018-05-16 07:07:07 -04002850<a name='SkPaint_getStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002851## getStyle
2852
Cary Clark682c58d2018-05-16 07:07:07 -04002853<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2854<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002855</pre>
2856
2857Whether the geometry is filled, stroked, or filled and stroked.
2858
2859### Return Value
2860
Cary Clark682c58d2018-05-16 07:07:07 -04002861one 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 -04002862
2863### Example
2864
2865<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2866
2867#### Example Output
2868
2869~~~~
2870SkPaint::kFill_Style == paint.getStyle()
2871~~~~
2872
2873</fiddle-embed></div>
2874
2875### See Also
2876
Cary Clark682c58d2018-05-16 07:07:07 -04002877<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002878
2879---
2880
Cary Clark682c58d2018-05-16 07:07:07 -04002881<a name='SkPaint_setStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002882## setStyle
2883
Cary Clark682c58d2018-05-16 07:07:07 -04002884<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2885void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002886</pre>
2887
2888Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002889Has 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 -04002890
2891### Parameters
2892
Cary Clark682c58d2018-05-16 07:07:07 -04002893<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2894 <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 -04002895 </tr>
2896</table>
2897
2898### Example
2899
2900<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2901
2902### See Also
2903
Cary Clark682c58d2018-05-16 07:07:07 -04002904<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002905
2906---
2907
2908### See Also
2909
Cary Clark682c58d2018-05-16 07:07:07 -04002910<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 -04002911
Cary Clark682c58d2018-05-16 07:07:07 -04002912## <a name='Stroke_Width'>Stroke Width</a>
Cary Clark08895c42018-02-01 09:37:32 -05002913
Cary Clark682c58d2018-05-16 07:07:07 -04002914<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002915of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002916set 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 -04002917
2918When width is greater than zero, the stroke encompasses as many pixels partially
2919or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002920the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002921
Cary Clark682c58d2018-05-16 07:07:07 -04002922The stroke dimensions are scaled by the canvas matrix, but <a href='#Style_Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002923remains one pixel wide regardless of scaling.
2924
2925The default width for the paint is zero.
2926
2927### Example
2928
skia-bookmaker525f9a92018-05-03 06:27:39 +00002929<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 -05002930line and the platform implementation.
2931</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002932
Cary Clark682c58d2018-05-16 07:07:07 -04002933<a name='SkPaint_getStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002934## getStrokeWidth
2935
Cary Clark682c58d2018-05-16 07:07:07 -04002936<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2937<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002938</pre>
2939
Cary Clark682c58d2018-05-16 07:07:07 -04002940Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002941outline the shape.
2942
2943### Return Value
2944
Cary Clark682c58d2018-05-16 07:07:07 -04002945zero for <a href='#Style_Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002946
2947### Example
2948
2949<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2950
2951#### Example Output
2952
2953~~~~
29540 == paint.getStrokeWidth()
2955~~~~
2956
2957</fiddle-embed></div>
2958
2959---
2960
Cary Clark682c58d2018-05-16 07:07:07 -04002961<a name='SkPaint_setStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002962## setStrokeWidth
2963
Cary Clark682c58d2018-05-16 07:07:07 -04002964<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2965void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002966</pre>
2967
2968Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002969outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002970Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002971
2972### Parameters
2973
Cary Clark682c58d2018-05-16 07:07:07 -04002974<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
2975 <td>zero thickness for <a href='#Style_Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002976 </tr>
2977</table>
2978
2979### Example
2980
2981<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2982
2983#### Example Output
2984
2985~~~~
29865 == paint.getStrokeWidth()
2987~~~~
2988
2989</fiddle-embed></div>
2990
2991---
2992
Cary Clark682c58d2018-05-16 07:07:07 -04002993## <a name='Miter_Limit'>Miter Limit</a>
Cary Clark08895c42018-02-01 09:37:32 -05002994
Cary Clark682c58d2018-05-16 07:07:07 -04002995<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002996relative to the stroke width.
2997
Cary Clark682c58d2018-05-16 07:07:07 -04002998<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2999is 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>
3000or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003001
Cary Clark682c58d2018-05-16 07:07:07 -04003002If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
3003is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003004
Cary Clark682c58d2018-05-16 07:07:07 -04003005<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04003006
Cary Clark682c58d2018-05-16 07:07:07 -04003007miter limit = 1 / sin ( angle / 2 )<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
3008The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003009in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04003010
3011Here are some miter limits and the angles that triggers them.
3012
3013| miter limit | angle in degrees |
3014| --- | --- |
3015| 10 | 11.48 |
3016| 9 | 12.76 |
3017| 8 | 14.36 |
3018| 7 | 16.43 |
3019| 6 | 19.19 |
3020| 5 | 23.07 |
3021| 4 | 28.96 |
3022| 3 | 38.94 |
3023| 2 | 60 |
3024| 1 | 180 |
3025
3026### Example
3027
3028<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
3029When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05003030by a bevel join.
3031</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003032
Cary Clark682c58d2018-05-16 07:07:07 -04003033<a name='SkPaint_getStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003034## getStrokeMiter
3035
Cary Clark682c58d2018-05-16 07:07:07 -04003036<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3037<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003038</pre>
3039
3040The limit at which a sharp corner is drawn beveled.
3041
3042### Return Value
3043
Cary Clark682c58d2018-05-16 07:07:07 -04003044zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003045
3046### Example
3047
3048<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
3049
3050#### Example Output
3051
3052~~~~
3053default miter limit == 4
3054~~~~
3055
3056</fiddle-embed></div>
3057
3058### See Also
3059
Cary Clark682c58d2018-05-16 07:07:07 -04003060<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 -04003061
3062---
3063
Cary Clark682c58d2018-05-16 07:07:07 -04003064<a name='SkPaint_setStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003065## setStrokeMiter
3066
Cary Clark682c58d2018-05-16 07:07:07 -04003067<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3068void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04003069</pre>
3070
3071The limit at which a sharp corner is drawn beveled.
3072Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04003073Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04003074
3075### Parameters
3076
Cary Clark682c58d2018-05-16 07:07:07 -04003077<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
3078 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003079 </tr>
3080</table>
3081
3082### Example
3083
3084<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
3085
3086#### Example Output
3087
3088~~~~
3089default miter limit == 8
3090~~~~
3091
3092</fiddle-embed></div>
3093
3094### See Also
3095
Cary Clark682c58d2018-05-16 07:07:07 -04003096<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 -04003097
3098---
3099
Cary Clark682c58d2018-05-16 07:07:07 -04003100## <a name='Stroke_Cap'>Stroke Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003101
Cary Clark682c58d2018-05-16 07:07:07 -04003102## <a name='SkPaint_Cap'>Enum SkPaint::Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003103
Cary Clarka560c472017-11-27 10:44:06 -05003104<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003105 enum <a href='#SkPaint_Cap'>Cap</a> {
3106 <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
3107 <a href='#SkPaint_kRound_Cap'>kRound Cap</a>,
3108 <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003109
Cary Clark682c58d2018-05-16 07:07:07 -04003110 <a href='#SkPaint_kLast_Cap'>kLast Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
3111 <a href='#SkPaint_kDefault_Cap'>kDefault Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003112 };
Cary Clark6fc50412017-09-21 12:31:06 -04003113
Cary Clark682c58d2018-05-16 07:07:07 -04003114 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 -05003115</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003116
Cary Clark682c58d2018-05-16 07:07:07 -04003117<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 -04003118
3119### Constants
3120
Cary Clark682c58d2018-05-16 07:07:07 -04003121<table style='border-collapse: collapse; width: 62.5em'>
3122 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3123<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3124<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3125 <tr style='background-color: #f0f0f0; '>
3126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
3127 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3128 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3129Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05003130</td>
Cary Clark12799e12017-07-28 15:18:29 -04003131 </tr>
3132 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
3134 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3135 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3136Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05003137and end.
3138</td>
Cary Clark12799e12017-07-28 15:18:29 -04003139 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003140 <tr style='background-color: #f0f0f0; '>
3141 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
3142 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3143 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3144Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04003145and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05003146of the stroke.
3147</td>
Cary Clark12799e12017-07-28 15:18:29 -04003148 </tr>
3149 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003150 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
3151 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3152 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3153Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
3154</td>
3155 </tr>
3156 <tr style='background-color: #f0f0f0; '>
3157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
3158 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3159 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3160<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 -05003161</td>
Cary Clark12799e12017-07-28 15:18:29 -04003162 </tr>
3163 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003164 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
3165 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3167May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003168</td>
Cary Clark12799e12017-07-28 15:18:29 -04003169 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003170</table>
Cary Clark12799e12017-07-28 15:18:29 -04003171
Cary Clark682c58d2018-05-16 07:07:07 -04003172Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3173follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003174
Cary Clark682c58d2018-05-16 07:07:07 -04003175If 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 -04003176visible beginning and end.
3177
Cary Clark682c58d2018-05-16 07:07:07 -04003178<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 -04003179
Cary Clark682c58d2018-05-16 07:07:07 -04003180<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Reference#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
3181<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 -04003182at the contour point.
Cary Clark682c58d2018-05-16 07:07:07 -04003183<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
3184<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04003185
Cary Clark682c58d2018-05-16 07:07:07 -04003186<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 -04003187
Cary Clark12799e12017-07-28 15:18:29 -04003188### Example
3189
Cary Clark2ade9972017-11-02 17:49:34 -04003190<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003191
Cary Clark682c58d2018-05-16 07:07:07 -04003192<a name='SkPaint_getStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003193## getStrokeCap
3194
Cary Clark682c58d2018-05-16 07:07:07 -04003195<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3196<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003197</pre>
3198
3199The geometry drawn at the beginning and end of strokes.
3200
3201### Return Value
3202
Cary Clark682c58d2018-05-16 07:07:07 -04003203one 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 -04003204
3205### Example
3206
3207<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
3208
3209#### Example Output
3210
3211~~~~
3212kButt_Cap == default stroke cap
3213~~~~
3214
3215</fiddle-embed></div>
3216
3217### See Also
3218
Cary Clark682c58d2018-05-16 07:07:07 -04003219<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003220
3221---
3222
Cary Clark682c58d2018-05-16 07:07:07 -04003223<a name='SkPaint_setStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003224## setStrokeCap
3225
Cary Clark682c58d2018-05-16 07:07:07 -04003226<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3227void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04003228</pre>
3229
3230The geometry drawn at the beginning and end of strokes.
3231
3232### Parameters
3233
Cary Clark682c58d2018-05-16 07:07:07 -04003234<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
3235 <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>;
3236has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04003237 </tr>
3238</table>
3239
3240### Example
3241
3242<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
3243
3244#### Example Output
3245
3246~~~~
3247kRound_Cap == paint.getStrokeCap()
3248~~~~
3249
3250</fiddle-embed></div>
3251
3252### See Also
3253
Cary Clark682c58d2018-05-16 07:07:07 -04003254<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003255
3256---
3257
Cary Clark682c58d2018-05-16 07:07:07 -04003258## <a name='Stroke_Join'>Stroke Join</a>
Cary Clark08895c42018-02-01 09:37:32 -05003259
Cary Clark682c58d2018-05-16 07:07:07 -04003260<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 -04003261
Cary Clark682c58d2018-05-16 07:07:07 -04003262Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3263follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003264
3265If the contour direction changes abruptly, because the tangent direction leading
3266to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04003267the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003268
3269### Example
3270
Cary Clark2ade9972017-11-02 17:49:34 -04003271<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003272
Cary Clark682c58d2018-05-16 07:07:07 -04003273## <a name='SkPaint_Join'>Enum SkPaint::Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04003274
Cary Clarka560c472017-11-27 10:44:06 -05003275<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003276 enum <a href='#SkPaint_Join'>Join</a> {
3277 <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
3278 <a href='#SkPaint_kRound_Join'>kRound Join</a>,
3279 <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003280
Cary Clark682c58d2018-05-16 07:07:07 -04003281 <a href='#SkPaint_kLast_Join'>kLast Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
3282 <a href='#SkPaint_kDefault_Join'>kDefault Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003283 };
Cary Clark6fc50412017-09-21 12:31:06 -04003284
Cary Clark682c58d2018-05-16 07:07:07 -04003285 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 -05003286</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003287
Cary Clark682c58d2018-05-16 07:07:07 -04003288<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 -04003289affects the four corners of a stroked rectangle, and the connected segments in a
3290stroked path.
3291
3292Choose miter join to draw sharp corners. Choose round join to draw a circle with a
3293radius equal to the stroke width on top of the corner. Choose bevel join to minimally
3294connect the thick strokes.
3295
Cary Clark7cfcbca2018-01-04 16:11:51 -05003296The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04003297not contain the actual join. For instance, a fill path constructed with round joins does
3298not necessarily include circles at each connected segment.
3299
3300### Constants
3301
Cary Clark682c58d2018-05-16 07:07:07 -04003302<table style='border-collapse: collapse; width: 62.5em'>
3303 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3304<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3305<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3306 <tr style='background-color: #f0f0f0; '>
3307 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
3308 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3309 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3310Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
3311If 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 -05003312</td>
Cary Clark12799e12017-07-28 15:18:29 -04003313 </tr>
3314 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
3316 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3317 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3318Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
3319</td>
3320 </tr>
3321 <tr style='background-color: #f0f0f0; '>
3322 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
3323 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3324 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3325Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05003326</td>
Cary Clark12799e12017-07-28 15:18:29 -04003327 </tr>
3328 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003329 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
3330 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3331 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3332equivalent to the largest value for Stroke_Join</td>
3333 </tr>
3334 <tr style='background-color: #f0f0f0; '>
3335 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
3336 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3337 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3338<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 -05003339</td>
Cary Clark12799e12017-07-28 15:18:29 -04003340 </tr>
3341 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003342 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
3343 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3344 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3345May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003346</td>
Cary Clark12799e12017-07-28 15:18:29 -04003347 </tr>
3348</table>
3349
3350### Example
3351
3352<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
3353
3354### See Also
3355
Cary Clark682c58d2018-05-16 07:07:07 -04003356<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 -04003357
Cary Clark682c58d2018-05-16 07:07:07 -04003358<a name='SkPaint_getStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003359## getStrokeJoin
3360
Cary Clark682c58d2018-05-16 07:07:07 -04003361<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3362<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003363</pre>
3364
Cary Clark0c5f5462017-12-15 11:21:51 -05003365The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003366
3367### Return Value
3368
Cary Clark682c58d2018-05-16 07:07:07 -04003369one 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 -04003370
3371### Example
3372
3373<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
3374
3375#### Example Output
3376
3377~~~~
3378kMiter_Join == default stroke join
3379~~~~
3380
3381</fiddle-embed></div>
3382
3383### See Also
3384
Cary Clark682c58d2018-05-16 07:07:07 -04003385<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003386
3387---
3388
Cary Clark682c58d2018-05-16 07:07:07 -04003389<a name='SkPaint_setStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003390## setStrokeJoin
3391
Cary Clark682c58d2018-05-16 07:07:07 -04003392<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3393void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04003394</pre>
3395
Cary Clark0c5f5462017-12-15 11:21:51 -05003396The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003397
3398### Parameters
3399
Cary Clark682c58d2018-05-16 07:07:07 -04003400<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
3401 <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 -04003402otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04003403 </tr>
3404</table>
3405
3406### Example
3407
3408<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
3409
3410#### Example Output
3411
3412~~~~
3413kMiter_Join == paint.getStrokeJoin()
3414~~~~
3415
3416</fiddle-embed></div>
3417
3418### See Also
3419
Cary Clark682c58d2018-05-16 07:07:07 -04003420<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003421
3422---
3423
3424### See Also
3425
Cary Clark682c58d2018-05-16 07:07:07 -04003426<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003427
Cary Clark682c58d2018-05-16 07:07:07 -04003428## <a name='Fill_Path'>Fill Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05003429
Cary Clark682c58d2018-05-16 07:07:07 -04003430<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 -04003431
Cary Clark682c58d2018-05-16 07:07:07 -04003432If <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
3433replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
3434destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003435
Cary Clark682c58d2018-05-16 07:07:07 -04003436Fill <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
3437the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04003438
Cary Clark682c58d2018-05-16 07:07:07 -04003439If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
3440and <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>,
3441and <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 -04003442
Cary Clark682c58d2018-05-16 07:07:07 -04003443Fill <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 -04003444
Cary Clark682c58d2018-05-16 07:07:07 -04003445If 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>
3446returns false since <a href='#Style_Hairline'>Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04003447
Cary Clark682c58d2018-05-16 07:07:07 -04003448<a name='SkPaint_getFillPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003449## getFillPath
3450
Cary Clark682c58d2018-05-16 07:07:07 -04003451<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3452bool <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 -04003453</pre>
3454
3455The filled equivalent of the stroked path.
3456
3457### Parameters
3458
Cary Clark682c58d2018-05-16 07:07:07 -04003459<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
3460 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3461 </tr>
3462 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
3463 <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>
3464 </tr>
3465 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
3466 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
3467 </tr>
3468 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
3469 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04003470to favor speed and size</td>
3471 </tr>
3472</table>
3473
3474### Return Value
3475
Cary Clark682c58d2018-05-16 07:07:07 -04003476true 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 -04003477
3478### Example
3479
Cary Clark682c58d2018-05-16 07:07:07 -04003480<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.
3481At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05003482At the highest precision, the filled path has high fidelity compared to the original stroke.
3483</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003484
3485---
3486
Cary Clark682c58d2018-05-16 07:07:07 -04003487<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05003488
Cary Clark682c58d2018-05-16 07:07:07 -04003489<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3490bool <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 -04003491</pre>
3492
3493The filled equivalent of the stroked path.
3494
Cary Clark682c58d2018-05-16 07:07:07 -04003495Replaces <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>.
3496<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 -04003497
3498### Parameters
3499
Cary Clark682c58d2018-05-16 07:07:07 -04003500<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
3501 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3502 </tr>
3503 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
3504 <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 -04003505 </tr>
3506</table>
3507
3508### Return Value
3509
Cary Clark682c58d2018-05-16 07:07:07 -04003510true 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 -04003511
3512### Example
3513
3514<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
3515
3516---
3517
3518### See Also
3519
Cary Clark682c58d2018-05-16 07:07:07 -04003520<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 -04003521
Cary Clark682c58d2018-05-16 07:07:07 -04003522## <a name='Shader_Methods'>Shader Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003523
Cary Clark682c58d2018-05-16 07:07:07 -04003524<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
3525<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
3526If <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 -04003527
Cary Clark682c58d2018-05-16 07:07:07 -04003528<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>.
3529If <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 -04003530the fill.
3531
Cary Clark682c58d2018-05-16 07:07:07 -04003532The 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 -04003533
3534### Example
3535
3536<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
3537
Cary Clark682c58d2018-05-16 07:07:07 -04003538If <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 -04003539
3540### Example
3541
skia-bookmaker525f9a92018-05-03 06:27:39 +00003542<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003543
Cary Clark682c58d2018-05-16 07:07:07 -04003544<a name='SkPaint_getShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003545## getShader
3546
Cary Clark682c58d2018-05-16 07:07:07 -04003547<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3548<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003549</pre>
3550
3551Optional colors used when filling a path, such as a gradient.
3552
Cary Clark682c58d2018-05-16 07:07:07 -04003553Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003554
3555### Return Value
3556
Cary Clark682c58d2018-05-16 07:07:07 -04003557<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003558
3559### Example
3560
3561<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
3562
3563#### Example Output
3564
3565~~~~
3566nullptr == shader
3567nullptr != shader
3568~~~~
3569
3570</fiddle-embed></div>
3571
3572---
3573
Cary Clark682c58d2018-05-16 07:07:07 -04003574<a name='SkPaint_refShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003575## refShader
3576
Cary Clark682c58d2018-05-16 07:07:07 -04003577<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3578<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 -04003579</pre>
3580
3581Optional colors used when filling a path, such as a gradient.
3582
Cary Clark682c58d2018-05-16 07:07:07 -04003583Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003584
3585### Return Value
3586
Cary Clark682c58d2018-05-16 07:07:07 -04003587<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003588
3589### Example
3590
3591<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
3592
3593#### Example Output
3594
3595~~~~
3596shader unique: true
3597shader unique: false
3598~~~~
3599
3600</fiddle-embed></div>
3601
3602---
3603
Cary Clark682c58d2018-05-16 07:07:07 -04003604<a name='SkPaint_setShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003605## setShader
3606
Cary Clark682c58d2018-05-16 07:07:07 -04003607<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3608void <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 -04003609</pre>
3610
3611Optional colors used when filling a path, such as a gradient.
3612
Cary Clark682c58d2018-05-16 07:07:07 -04003613Sets <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>.
3614Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003615
3616### Parameters
3617
Cary Clark682c58d2018-05-16 07:07:07 -04003618<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
3619 <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 -04003620 </tr>
3621</table>
3622
3623### Example
3624
3625<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
3626
3627---
3628
Cary Clark682c58d2018-05-16 07:07:07 -04003629## <a name='Color_Filter_Methods'>Color Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003630
Cary Clark682c58d2018-05-16 07:07:07 -04003631<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
3632<a href='undocumented#Color_Filter'>Color Filter</a> may apply <a href='undocumented#Blend_Mode'>Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
3633If <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 -04003634
Cary Clark682c58d2018-05-16 07:07:07 -04003635The 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 -04003636
3637### Example
3638
3639<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
3640
Cary Clark682c58d2018-05-16 07:07:07 -04003641<a name='SkPaint_getColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003642## getColorFilter
3643
Cary Clark682c58d2018-05-16 07:07:07 -04003644<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3645<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003646</pre>
3647
Cary Clark682c58d2018-05-16 07:07:07 -04003648Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3649Does 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 -04003650
3651### Return Value
3652
Cary Clark682c58d2018-05-16 07:07:07 -04003653<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003654
3655### Example
3656
3657<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
3658
3659#### Example Output
3660
3661~~~~
3662nullptr == color filter
3663nullptr != color filter
3664~~~~
3665
3666</fiddle-embed></div>
3667
3668---
3669
Cary Clark682c58d2018-05-16 07:07:07 -04003670<a name='SkPaint_refColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003671## refColorFilter
3672
Cary Clark682c58d2018-05-16 07:07:07 -04003673<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3674<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 -04003675</pre>
3676
Cary Clark682c58d2018-05-16 07:07:07 -04003677Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3678Increases <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 -04003679
3680### Return Value
3681
Cary Clark682c58d2018-05-16 07:07:07 -04003682<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04003683
3684### Example
3685
3686<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3687
3688#### Example Output
3689
3690~~~~
3691color filter unique: true
3692color filter unique: false
3693~~~~
3694
3695</fiddle-embed></div>
3696
3697---
3698
Cary Clark682c58d2018-05-16 07:07:07 -04003699<a name='SkPaint_setColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003700## setColorFilter
3701
Cary Clark682c58d2018-05-16 07:07:07 -04003702<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3703void <a href='#SkPaint_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 -04003704</pre>
3705
Cary Clark682c58d2018-05-16 07:07:07 -04003706Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3707<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 -04003708
Cary Clark682c58d2018-05-16 07:07:07 -04003709Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003710
3711### Parameters
3712
Cary Clark682c58d2018-05-16 07:07:07 -04003713<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3714 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003715 </tr>
3716</table>
3717
3718### Example
3719
3720<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
3721
3722---
3723
Cary Clark682c58d2018-05-16 07:07:07 -04003724## <a name='Blend_Mode_Methods'>Blend Mode Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003725
Cary Clark682c58d2018-05-16 07:07:07 -04003726<a href='undocumented#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3727The default setting, <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003728over the destination color.
3729
3730### Example
3731
3732<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
3733
3734### See Also
3735
Cary Clark682c58d2018-05-16 07:07:07 -04003736<a href='undocumented#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003737
Cary Clark682c58d2018-05-16 07:07:07 -04003738<a name='SkPaint_getBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003739## getBlendMode
3740
Cary Clark682c58d2018-05-16 07:07:07 -04003741<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3742<a href='undocumented#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003743</pre>
3744
Cary Clark682c58d2018-05-16 07:07:07 -04003745Returns <a href='undocumented#Blend_Mode'>Blend Mode</a>.
3746By default, returns <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003747
3748### Return Value
3749
3750mode used to combine source color with destination color
3751
3752### Example
3753
skia-bookmaker525f9a92018-05-03 06:27:39 +00003754<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003755
3756#### Example Output
3757
3758~~~~
3759kSrcOver == getBlendMode
3760kSrcOver != getBlendMode
3761~~~~
3762
3763</fiddle-embed></div>
3764
3765---
3766
Cary Clark682c58d2018-05-16 07:07:07 -04003767<a name='SkPaint_isSrcOver'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003768## isSrcOver
3769
Cary Clark682c58d2018-05-16 07:07:07 -04003770<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3771bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003772</pre>
3773
Cary Clark682c58d2018-05-16 07:07:07 -04003774Returns true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003775
3776### Return Value
3777
Cary Clark682c58d2018-05-16 07:07:07 -04003778true if <a href='undocumented#Blend_Mode'>Blend Mode</a> is <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003779
3780### Example
3781
3782<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3783
3784#### Example Output
3785
3786~~~~
3787isSrcOver == true
3788isSrcOver != true
3789~~~~
3790
3791</fiddle-embed></div>
3792
3793---
3794
Cary Clark682c58d2018-05-16 07:07:07 -04003795<a name='SkPaint_setBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003796## setBlendMode
3797
Cary Clark682c58d2018-05-16 07:07:07 -04003798<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3799void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='undocumented#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003800</pre>
3801
Cary Clark682c58d2018-05-16 07:07:07 -04003802Sets <a href='undocumented#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003803Does not check for valid input.
3804
3805### Parameters
3806
Cary Clark682c58d2018-05-16 07:07:07 -04003807<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
3808 <td><a href='undocumented#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003809 </tr>
3810</table>
3811
3812### Example
3813
3814<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3815
3816#### Example Output
3817
3818~~~~
3819isSrcOver == true
3820isSrcOver != true
3821~~~~
3822
3823</fiddle-embed></div>
3824
3825---
3826
Cary Clark682c58d2018-05-16 07:07:07 -04003827## <a name='Path_Effect_Methods'>Path Effect Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003828
Cary Clark682c58d2018-05-16 07:07:07 -04003829<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3830<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3831If <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 -04003832
3833### Example
3834
3835<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3836
3837### See Also
3838
Cary Clark682c58d2018-05-16 07:07:07 -04003839<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003840
Cary Clark682c58d2018-05-16 07:07:07 -04003841<a name='SkPaint_getPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003842## getPathEffect
3843
Cary Clark682c58d2018-05-16 07:07:07 -04003844<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3845<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003846</pre>
3847
Cary Clark682c58d2018-05-16 07:07:07 -04003848Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3849Does 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 -04003850
3851### Return Value
3852
Cary Clark682c58d2018-05-16 07:07:07 -04003853<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003854
3855### Example
3856
3857<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3858
3859#### Example Output
3860
3861~~~~
3862nullptr == path effect
3863nullptr != path effect
3864~~~~
3865
3866</fiddle-embed></div>
3867
3868---
3869
Cary Clark682c58d2018-05-16 07:07:07 -04003870<a name='SkPaint_refPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003871## refPathEffect
3872
Cary Clark682c58d2018-05-16 07:07:07 -04003873<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3874<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 -04003875</pre>
3876
Cary Clark682c58d2018-05-16 07:07:07 -04003877Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3878Increases <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 -04003879
3880### Return Value
3881
Cary Clark682c58d2018-05-16 07:07:07 -04003882<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003883
3884### Example
3885
Cary Clarka560c472017-11-27 10:44:06 -05003886<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003887
3888#### Example Output
3889
3890~~~~
3891path effect unique: true
3892path effect unique: false
3893~~~~
3894
3895</fiddle-embed></div>
3896
3897---
3898
Cary Clark682c58d2018-05-16 07:07:07 -04003899<a name='SkPaint_setPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003900## setPathEffect
3901
Cary Clark682c58d2018-05-16 07:07:07 -04003902<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3903void <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 -04003904</pre>
3905
Cary Clark682c58d2018-05-16 07:07:07 -04003906Sets <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
3907<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003908
Cary Clark682c58d2018-05-16 07:07:07 -04003909Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003910
3911### Parameters
3912
Cary Clark682c58d2018-05-16 07:07:07 -04003913<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3914 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003915 </tr>
3916</table>
3917
3918### Example
3919
3920<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3921
3922---
3923
Cary Clark682c58d2018-05-16 07:07:07 -04003924## <a name='Mask_Filter_Methods'>Mask Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003925
Cary Clark682c58d2018-05-16 07:07:07 -04003926<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3927<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003928
Cary Clark682c58d2018-05-16 07:07:07 -04003929<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3930creating 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 -04003931modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003932
3933### Example
3934
Cary Clark681287e2018-03-16 11:34:15 -04003935<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003936
Cary Clark682c58d2018-05-16 07:07:07 -04003937<a name='SkPaint_getMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003938## getMaskFilter
3939
Cary Clark682c58d2018-05-16 07:07:07 -04003940<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3941<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003942</pre>
3943
Cary Clark682c58d2018-05-16 07:07:07 -04003944Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
3945Does 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 -04003946
3947### Return Value
3948
Cary Clark682c58d2018-05-16 07:07:07 -04003949<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003950
3951### Example
3952
Cary Clark681287e2018-03-16 11:34:15 -04003953<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003954
3955#### Example Output
3956
3957~~~~
3958nullptr == mask filter
3959nullptr != mask filter
3960~~~~
3961
3962</fiddle-embed></div>
3963
3964---
3965
Cary Clark682c58d2018-05-16 07:07:07 -04003966<a name='SkPaint_refMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003967## refMaskFilter
3968
Cary Clark682c58d2018-05-16 07:07:07 -04003969<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3970<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 -04003971</pre>
3972
Cary Clark682c58d2018-05-16 07:07:07 -04003973Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003974
Cary Clark682c58d2018-05-16 07:07:07 -04003975Increases <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 -04003976
3977### Return Value
3978
Cary Clark682c58d2018-05-16 07:07:07 -04003979<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003980
3981### Example
3982
Cary Clark681287e2018-03-16 11:34:15 -04003983<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003984
3985#### Example Output
3986
3987~~~~
3988mask filter unique: true
3989mask filter unique: false
3990~~~~
3991
3992</fiddle-embed></div>
3993
3994---
3995
Cary Clark682c58d2018-05-16 07:07:07 -04003996<a name='SkPaint_setMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003997## setMaskFilter
3998
Cary Clark682c58d2018-05-16 07:07:07 -04003999<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4000void <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 -04004001</pre>
4002
Cary Clark682c58d2018-05-16 07:07:07 -04004003Sets <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
4004<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
4005<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04004006
Cary Clark682c58d2018-05-16 07:07:07 -04004007Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004008
4009### Parameters
4010
Cary Clark682c58d2018-05-16 07:07:07 -04004011<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
4012 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04004013 </tr>
4014</table>
4015
4016### Example
4017
Cary Clark681287e2018-03-16 11:34:15 -04004018<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004019
4020---
4021
Cary Clark682c58d2018-05-16 07:07:07 -04004022## <a name='Typeface_Methods'>Typeface Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004023
Cary Clark682c58d2018-05-16 07:07:07 -04004024<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
4025<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
4026The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04004027implementation.
4028
4029### Example
4030
Ben Wagner700ff172017-11-08 15:37:22 -05004031<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004032
Cary Clark682c58d2018-05-16 07:07:07 -04004033<a name='SkPaint_getTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004034## getTypeface
4035
Cary Clark682c58d2018-05-16 07:07:07 -04004036<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4037<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004038</pre>
4039
Cary Clark682c58d2018-05-16 07:07:07 -04004040Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
4041Increments <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004042
4043### Return Value
4044
Cary Clark682c58d2018-05-16 07:07:07 -04004045<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004046
4047### Example
4048
Cary Clark71961fb2018-01-05 14:21:59 -05004049<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04004050
4051#### Example Output
4052
4053~~~~
4054nullptr == typeface
4055nullptr != typeface
4056~~~~
4057
4058</fiddle-embed></div>
4059
4060---
4061
Cary Clark682c58d2018-05-16 07:07:07 -04004062<a name='SkPaint_refTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004063## refTypeface
4064
Cary Clark682c58d2018-05-16 07:07:07 -04004065<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4066<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 -04004067</pre>
4068
Cary Clark682c58d2018-05-16 07:07:07 -04004069Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004070
4071### Return Value
4072
Cary Clark682c58d2018-05-16 07:07:07 -04004073<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004074
4075### Example
4076
skia-bookmaker525f9a92018-05-03 06:27:39 +00004077<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04004078
4079#### Example Output
4080
4081~~~~
4082typeface1 != typeface2
4083typeface1 == typeface2
4084~~~~
4085
4086</fiddle-embed></div>
4087
4088---
4089
Cary Clark682c58d2018-05-16 07:07:07 -04004090<a name='SkPaint_setTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004091## setTypeface
4092
Cary Clark682c58d2018-05-16 07:07:07 -04004093<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4094void <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 -04004095</pre>
4096
Cary Clark682c58d2018-05-16 07:07:07 -04004097Sets <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>.
4098Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
4099<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004100
4101### Parameters
4102
Cary Clark682c58d2018-05-16 07:07:07 -04004103<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
4104 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004105 </tr>
4106</table>
4107
4108### Example
4109
Cary Clark71961fb2018-01-05 14:21:59 -05004110<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004111
4112---
4113
Cary Clark682c58d2018-05-16 07:07:07 -04004114## <a name='Image_Filter_Methods'>Image Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004115
Cary Clark682c58d2018-05-16 07:07:07 -04004116<a href='undocumented#Image_Filter'>Image Filter</a> operates on the pixel representation of the shape, as modified by <a href='#Paint'>Paint</a>
4117with <a href='undocumented#Blend_Mode'>Blend Mode</a> set to <a href='undocumented#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>. <a href='undocumented#Image_Filter'>Image Filter</a> creates a new bitmap,
4118which is drawn to the device using the set <a href='undocumented#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04004119
Cary Clark682c58d2018-05-16 07:07:07 -04004120<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>
4121can 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.
4122<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
4123<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004124
4125### Example
4126
Update Docs4410d7f2018-03-19 06:05:52 +00004127<div><fiddle-embed name="250e45c5935d54eac6aca775d1fe3475"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004128
Cary Clark682c58d2018-05-16 07:07:07 -04004129<a name='SkPaint_getImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004130## getImageFilter
4131
Cary Clark682c58d2018-05-16 07:07:07 -04004132<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4133<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004134</pre>
4135
Cary Clark682c58d2018-05-16 07:07:07 -04004136Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4137Does 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 -04004138
4139### Return Value
4140
Cary Clark682c58d2018-05-16 07:07:07 -04004141<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004142
4143### Example
4144
Cary Clarka560c472017-11-27 10:44:06 -05004145<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04004146
4147#### Example Output
4148
4149~~~~
4150nullptr == image filter
4151nullptr != image filter
4152~~~~
4153
4154</fiddle-embed></div>
4155
4156---
4157
Cary Clark682c58d2018-05-16 07:07:07 -04004158<a name='SkPaint_refImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004159## refImageFilter
4160
Cary Clark682c58d2018-05-16 07:07:07 -04004161<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4162<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 -04004163</pre>
4164
Cary Clark682c58d2018-05-16 07:07:07 -04004165Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4166Increases <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 -04004167
4168### Return Value
4169
Cary Clark682c58d2018-05-16 07:07:07 -04004170<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004171
4172### Example
4173
4174<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
4175
4176#### Example Output
4177
4178~~~~
4179image filter unique: true
4180image filter unique: false
4181~~~~
4182
4183</fiddle-embed></div>
4184
4185---
4186
Cary Clark682c58d2018-05-16 07:07:07 -04004187<a name='SkPaint_setImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004188## setImageFilter
4189
Cary Clark682c58d2018-05-16 07:07:07 -04004190<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4191void <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 -04004192</pre>
4193
Cary Clark682c58d2018-05-16 07:07:07 -04004194Sets <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
4195<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 -04004196on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04004197
Cary Clark682c58d2018-05-16 07:07:07 -04004198Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004199
4200### Parameters
4201
Cary Clark682c58d2018-05-16 07:07:07 -04004202<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
4203 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04004204 </tr>
4205</table>
4206
4207### Example
4208
4209<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
4210
4211---
4212
Cary Clark682c58d2018-05-16 07:07:07 -04004213## <a name='Draw_Looper_Methods'>Draw Looper Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004214
Cary Clark682c58d2018-05-16 07:07:07 -04004215<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 -04004216to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04004217
Cary Clark682c58d2018-05-16 07:07:07 -04004218<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
4219<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
4220Set <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 -04004221
4222### Example
4223
4224<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
4225
Cary Clark682c58d2018-05-16 07:07:07 -04004226<a name='SkPaint_getDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004227## getDrawLooper
4228
Cary Clark682c58d2018-05-16 07:07:07 -04004229<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4230<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004231</pre>
4232
Cary Clark682c58d2018-05-16 07:07:07 -04004233Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4234Does 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 -04004235
4236### Return Value
4237
Cary Clark682c58d2018-05-16 07:07:07 -04004238<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004239
4240### Example
4241
4242<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
4243
4244#### Example Output
4245
4246~~~~
4247nullptr == draw looper
4248nullptr != draw looper
4249~~~~
4250
4251</fiddle-embed></div>
4252
4253---
4254
Cary Clark682c58d2018-05-16 07:07:07 -04004255<a name='SkPaint_refDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004256## refDrawLooper
4257
Cary Clark682c58d2018-05-16 07:07:07 -04004258<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4259<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 -04004260</pre>
4261
Cary Clark682c58d2018-05-16 07:07:07 -04004262Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4263Increases <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 -04004264
4265### Return Value
4266
Cary Clark682c58d2018-05-16 07:07:07 -04004267<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004268
4269### Example
4270
4271<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
4272
4273#### Example Output
4274
4275~~~~
4276draw looper unique: true
4277draw looper unique: false
4278~~~~
4279
4280</fiddle-embed></div>
4281
4282---
4283
Cary Clark682c58d2018-05-16 07:07:07 -04004284<a name='SkPaint_getLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004285## getLooper
4286
Cary Clark682c58d2018-05-16 07:07:07 -04004287<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4288<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004289</pre>
4290
Cary Clark682c58d2018-05-16 07:07:07 -04004291Deprecated.
4292
Cary Clark12799e12017-07-28 15:18:29 -04004293---
4294
Cary Clark682c58d2018-05-16 07:07:07 -04004295<a name='SkPaint_setDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004296## setDrawLooper
4297
Cary Clark682c58d2018-05-16 07:07:07 -04004298<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4299void <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 -04004300</pre>
4301
Cary Clark682c58d2018-05-16 07:07:07 -04004302Sets <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
4303<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 -04004304drawing unaltered.
4305
Cary Clark682c58d2018-05-16 07:07:07 -04004306Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004307
4308### Parameters
4309
Cary Clark682c58d2018-05-16 07:07:07 -04004310<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
4311 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004312 </tr>
4313</table>
4314
4315### Example
4316
4317<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
4318
4319---
4320
Cary Clark682c58d2018-05-16 07:07:07 -04004321<a name='SkPaint_setLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004322## setLooper
4323
Cary Clark682c58d2018-05-16 07:07:07 -04004324<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4325void <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 -04004326</pre>
4327
Cary Clark682c58d2018-05-16 07:07:07 -04004328Deprecated.
4329
Cary Clark12799e12017-07-28 15:18:29 -04004330---
4331
Cary Clark682c58d2018-05-16 07:07:07 -04004332## <a name='Text_Align'>Text Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004333
Cary Clark682c58d2018-05-16 07:07:07 -04004334## <a name='SkPaint_Align'>Enum SkPaint::Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004335
Cary Clarka560c472017-11-27 10:44:06 -05004336<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004337 enum <a href='#SkPaint_Align'>Align</a> {
4338 <a href='#SkPaint_kLeft_Align'>kLeft Align</a>,
4339 <a href='#SkPaint_kCenter_Align'>kCenter Align</a>,
4340 <a href='#SkPaint_kRight_Align'>kRight Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004341 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04004342
Cary Clark682c58d2018-05-16 07:07:07 -04004343 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05004344</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004345
Cary Clark682c58d2018-05-16 07:07:07 -04004346<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
4347<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>,
4348<a href='SkCanvas_Reference#SkCanvas_drawPosTextH'>SkCanvas::drawPosTextH</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextOnPath'>SkCanvas::drawTextOnPath</a>,
4349<a href='SkCanvas_Reference#SkCanvas_drawTextOnPathHV'>SkCanvas::drawTextOnPathHV</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextRSXform'>SkCanvas::drawTextRSXform</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextBlob'>SkCanvas::drawTextBlob</a>,
4350and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
4351as 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 -04004352
4353The text position is set by the font for both horizontal and vertical text.
4354Typically, for horizontal text, the position is to the left side of the glyph on the
4355base line; and for vertical text, the position is the horizontal center of the glyph
4356at the caps height.
4357
Cary Clark682c58d2018-05-16 07:07:07 -04004358<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 -04004359using the metrics returned by the font.
4360
Cary Clark682c58d2018-05-16 07:07:07 -04004361<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004362
4363### Constants
4364
Cary Clark682c58d2018-05-16 07:07:07 -04004365<table style='border-collapse: collapse; width: 62.5em'>
4366 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4367<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4368<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4369 <tr style='background-color: #f0f0f0; '>
4370 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
4371 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4372 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4373Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05004374</td>
Cary Clark12799e12017-07-28 15:18:29 -04004375 </tr>
4376 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004377 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
4378 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4379 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4380Moves the glyph half its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear, and
4381half its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
4382</td>
4383 </tr>
4384 <tr style='background-color: #f0f0f0; '>
4385 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
4386 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4387 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4388Moves the glyph by its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear,
4389and 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 -05004390</td>
Cary Clark12799e12017-07-28 15:18:29 -04004391 </tr>
4392 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004393 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
4394 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4395 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4396number of different Text_Align values defined</td>
Cary Clark12799e12017-07-28 15:18:29 -04004397 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004398</table>
Cary Clark12799e12017-07-28 15:18:29 -04004399
4400### Example
4401
Cary Clark1a8d7622018-03-05 13:26:16 -05004402<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
4403</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004404
4405### Example
4406
Cary Clark682c58d2018-05-16 07:07:07 -04004407<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 -05004408</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004409
Cary Clark682c58d2018-05-16 07:07:07 -04004410<a name='SkPaint_getTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004411## getTextAlign
4412
Cary Clark682c58d2018-05-16 07:07:07 -04004413<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4414<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004415</pre>
4416
Cary Clark682c58d2018-05-16 07:07:07 -04004417Returns <a href='#Text_Align'>Text Align</a>.
4418Returns <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 -04004419
4420### Return Value
4421
4422text placement relative to position
4423
4424### Example
4425
4426<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
4427
4428#### Example Output
4429
4430~~~~
4431kLeft_Align == default
4432~~~~
4433
4434</fiddle-embed></div>
4435
4436---
4437
Cary Clark682c58d2018-05-16 07:07:07 -04004438<a name='SkPaint_setTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004439## setTextAlign
4440
Cary Clark682c58d2018-05-16 07:07:07 -04004441<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4442void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04004443</pre>
4444
Cary Clark682c58d2018-05-16 07:07:07 -04004445Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
4446Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04004447
4448### Parameters
4449
Cary Clark682c58d2018-05-16 07:07:07 -04004450<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
4451 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04004452 </tr>
4453</table>
4454
4455### Example
4456
Cary Clark682c58d2018-05-16 07:07:07 -04004457<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 -05004458alignment out of range has no effect.
4459</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004460
4461---
4462
Cary Clark682c58d2018-05-16 07:07:07 -04004463## <a name='Text_Size'>Text Size</a>
Cary Clark08895c42018-02-01 09:37:32 -05004464
Cary Clark682c58d2018-05-16 07:07:07 -04004465<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
4466<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
4467<a href='#Text_Size'>Text Size</a> defaults to 12.
4468Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04004469
4470### Example
4471
4472<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
4473
Cary Clark682c58d2018-05-16 07:07:07 -04004474<a name='SkPaint_getTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004475## getTextSize
4476
Cary Clark682c58d2018-05-16 07:07:07 -04004477<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4478<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004479</pre>
4480
Cary Clark682c58d2018-05-16 07:07:07 -04004481Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04004482
4483### Return Value
4484
4485typographic height of text
4486
4487### Example
4488
4489<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
4490
4491---
4492
Cary Clark682c58d2018-05-16 07:07:07 -04004493<a name='SkPaint_setTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004494## setTextSize
4495
Cary Clark682c58d2018-05-16 07:07:07 -04004496<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4497void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04004498</pre>
4499
Cary Clark682c58d2018-05-16 07:07:07 -04004500Sets <a href='#Text_Size'>Text Size</a> in points.
4501Has 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 -04004502
4503### Parameters
4504
Cary Clark682c58d2018-05-16 07:07:07 -04004505<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
4506 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004507 </tr>
4508</table>
4509
4510### Example
4511
4512<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
4513
4514---
4515
Cary Clark682c58d2018-05-16 07:07:07 -04004516## <a name='Text_Scale_X'>Text Scale X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004517
Cary Clark682c58d2018-05-16 07:07:07 -04004518<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
4519<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004520is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004521<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
4522<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04004523
4524### Example
4525
4526<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
4527
Cary Clark682c58d2018-05-16 07:07:07 -04004528<a name='SkPaint_getTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004529## getTextScaleX
4530
Cary Clark682c58d2018-05-16 07:07:07 -04004531<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4532<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004533</pre>
4534
Cary Clark682c58d2018-05-16 07:07:07 -04004535Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004536Default value is 1.
4537
4538### Return Value
4539
4540text horizontal scale
4541
4542### Example
4543
4544<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
4545
4546---
4547
Cary Clark682c58d2018-05-16 07:07:07 -04004548<a name='SkPaint_setTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004549## setTextScaleX
4550
Cary Clark682c58d2018-05-16 07:07:07 -04004551<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4552void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04004553</pre>
4554
Cary Clark682c58d2018-05-16 07:07:07 -04004555Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004556Default value is 1.
4557
4558### Parameters
4559
Cary Clark682c58d2018-05-16 07:07:07 -04004560<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
4561 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04004562 </tr>
4563</table>
4564
4565### Example
4566
4567<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
4568
4569---
4570
Cary Clark682c58d2018-05-16 07:07:07 -04004571## <a name='Text_Skew_X'>Text Skew X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004572
Cary Clark682c58d2018-05-16 07:07:07 -04004573<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
4574<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004575is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004576<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
4577<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04004578
4579### Example
4580
4581<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
4582
Cary Clark682c58d2018-05-16 07:07:07 -04004583<a name='SkPaint_getTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004584## getTextSkewX
4585
Cary Clark682c58d2018-05-16 07:07:07 -04004586<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4587<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004588</pre>
4589
Cary Clark682c58d2018-05-16 07:07:07 -04004590Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004591Default value is zero.
4592
4593### Return Value
4594
4595additional shear in x-axis relative to y-axis
4596
4597### Example
4598
4599<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
4600
4601---
4602
Cary Clark682c58d2018-05-16 07:07:07 -04004603<a name='SkPaint_setTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004604## setTextSkewX
4605
Cary Clark682c58d2018-05-16 07:07:07 -04004606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4607void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04004608</pre>
4609
Cary Clark682c58d2018-05-16 07:07:07 -04004610Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004611Default value is zero.
4612
4613### Parameters
4614
Cary Clark682c58d2018-05-16 07:07:07 -04004615<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
4616 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04004617 </tr>
4618</table>
4619
4620### Example
4621
4622<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
4623
4624---
4625
Cary Clark682c58d2018-05-16 07:07:07 -04004626## <a name='Text_Encoding'>Text Encoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004627
Cary Clark682c58d2018-05-16 07:07:07 -04004628## <a name='SkPaint_TextEncoding'>Enum SkPaint::TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004629
Cary Clarka560c472017-11-27 10:44:06 -05004630<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004631 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
4632 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>,
4633 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>,
4634 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>,
4635 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004636 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004637</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004638
Cary Clark682c58d2018-05-16 07:07:07 -04004639<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
4640size, 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 -04004641
Cary Clarka560c472017-11-27 10:44:06 -05004642Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004643All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04004644in the total storage required.
4645
Cary Clark682c58d2018-05-16 07:07:07 -04004646<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 -04004647
Cary Clark682c58d2018-05-16 07:07:07 -04004648<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 -04004649
Cary Clark682c58d2018-05-16 07:07:07 -04004650<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 -04004651
Cary Clark682c58d2018-05-16 07:07:07 -04004652<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 -04004653A glyph index is a 16-bit word.
4654
Cary Clark682c58d2018-05-16 07:07:07 -04004655<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 -04004656
4657### Constants
4658
Cary Clark682c58d2018-05-16 07:07:07 -04004659<table style='border-collapse: collapse; width: 62.5em'>
4660 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4661<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4662<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4663 <tr style='background-color: #f0f0f0; '>
4664 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
4665 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4667uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04004668 </tr>
4669 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
4671 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4672 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4673uses two byte words to represent most of Unicode</td>
4674 </tr>
4675 <tr style='background-color: #f0f0f0; '>
4676 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
4677 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4679uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04004680 </tr>
4681 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004682 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
4683 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4684 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4685uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04004686 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004687</table>
Cary Clark12799e12017-07-28 15:18:29 -04004688
4689### Example
4690
Cary Clarka560c472017-11-27 10:44:06 -05004691<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4692Second line is encoded in UTF-16.
4693Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04004694Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05004695</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004696
Cary Clark682c58d2018-05-16 07:07:07 -04004697<a name='SkPaint_getTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004698## getTextEncoding
4699
Cary Clark682c58d2018-05-16 07:07:07 -04004700<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4701<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004702</pre>
4703
Cary Clark682c58d2018-05-16 07:07:07 -04004704Returns <a href='#Text_Encoding'>Text Encoding</a>.
4705<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 -04004706
4707### Return Value
4708
Cary Clark682c58d2018-05-16 07:07:07 -04004709one 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
4710<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004711
4712### Example
4713
skia-bookmaker525f9a92018-05-03 06:27:39 +00004714<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004715
4716#### Example Output
4717
4718~~~~
4719kUTF8_TextEncoding == text encoding
4720kGlyphID_TextEncoding == text encoding
4721~~~~
4722
4723</fiddle-embed></div>
4724
4725---
4726
Cary Clark682c58d2018-05-16 07:07:07 -04004727<a name='SkPaint_setTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004728## setTextEncoding
4729
Cary Clark682c58d2018-05-16 07:07:07 -04004730<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4731void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004732</pre>
4733
Cary Clark682c58d2018-05-16 07:07:07 -04004734Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4735<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4736Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004737
4738### Parameters
4739
Cary Clark682c58d2018-05-16 07:07:07 -04004740<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4741 <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
4742<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004743 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004744#
4745
Cary Clark12799e12017-07-28 15:18:29 -04004746</table>
4747
4748### Example
4749
4750<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
4751
4752#### Example Output
4753
4754~~~~
47554 != text encoding
4756~~~~
4757
4758</fiddle-embed></div>
4759
4760---
4761
Cary Clark682c58d2018-05-16 07:07:07 -04004762## <a name='Font_Metrics'>Font Metrics</a>
Cary Clark08895c42018-02-01 09:37:32 -05004763
Cary Clark682c58d2018-05-16 07:07:07 -04004764<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>.
4765The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4766<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004767
Cary Clark682c58d2018-05-16 07:07:07 -04004768<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 -04004769X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4770are positive.
4771Y-axis values above the baseline are negative, and below the baseline are positive.
4772
4773### Example
4774
Ben Wagnere5806492017-11-09 12:08:31 -05004775<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004776
Cary Clark682c58d2018-05-16 07:07:07 -04004777# <a name='SkPaint_FontMetrics'>Struct SkPaint::FontMetrics</a>
4778
4779## <a name='Font_Metrics_Constant'>Constant</a>
4780
4781
4782SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
4783<table style='border-collapse: collapse; width: 62.5em'>
4784 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4785<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4786 <tr style='background-color: #f0f0f0; '>
4787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a></td>
4788 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>valid <a href='#Font_Metrics'>Font Metrics</a></td>
4789 </tr>
4790 <tr>
4791 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a></td>
4792 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is valid</td>
4793 </tr>
4794 <tr style='background-color: #f0f0f0; '>
4795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a></td>
4796 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is valid</td>
4797 </tr>
4798 <tr>
4799 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a></td>
4800 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is valid</td>
4801 </tr>
4802 <tr style='background-color: #f0f0f0; '>
4803 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a></td>
4804 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is valid</td>
4805 </tr>
4806</table>
4807
4808
4809## <a name='Font_Metrics_Member_Function'>Member_Function</a>
4810
4811
4812SkPaint member functions read and modify the structure properties.
4813<table style='border-collapse: collapse; width: 62.5em'>
4814 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4815<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4816 <tr style='background-color: #f0f0f0; '>
4817 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a></td>
4818 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout position if set</td>
4819 </tr>
4820 <tr>
4821 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a></td>
4822 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout thickness if set</td>
4823 </tr>
4824 <tr style='background-color: #f0f0f0; '>
4825 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a></td>
4826 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline position if set</td>
4827 </tr>
4828 <tr>
4829 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a></td>
4830 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline thickness if set</td>
4831 </tr>
4832</table>
4833
4834
4835## <a name='Font_Metrics_Member'>Member</a>
4836
4837
4838SkPaint members may be read and written directly without using a member function.
4839<table style='border-collapse: collapse; width: 62.5em'>
4840 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4841<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4842 <tr style='background-color: #f0f0f0; '>
4843 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAscent'>fAscent</a></td>
4844 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve above baseline</td>
4845 </tr>
4846 <tr>
4847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a></td>
4848 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>average character width</td>
4849 </tr>
4850 <tr style='background-color: #f0f0f0; '>
4851 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fBottom'>fBottom</a></td>
4852 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent below baseline</td>
4853 </tr>
4854 <tr>
4855 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a></td>
4856 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of an upper-case letter</td>
4857 </tr>
4858 <tr style='background-color: #f0f0f0; '>
4859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fDescent'>fDescent</a></td>
4860 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve below baseline</td>
4861 </tr>
4862 <tr>
4863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fFlags'>fFlags</a></td>
4864 <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>
4865 </tr>
4866 <tr style='background-color: #f0f0f0; '>
4867 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fLeading'>fLeading</a></td>
4868 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to add between lines</td>
4869 </tr>
4870 <tr>
4871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a></td>
4872 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum character width</td>
4873 </tr>
4874 <tr style='background-color: #f0f0f0; '>
4875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a></td>
4876 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout position relative to baseline</td>
4877 </tr>
4878 <tr>
4879 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a></td>
4880 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout thickness</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_fTop'>fTop</a></td>
4884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent above baseline</td>
4885 </tr>
4886 <tr>
4887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a></td>
4888 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline position relative to baseline</td>
4889 </tr>
4890 <tr style='background-color: #f0f0f0; '>
4891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a></td>
4892 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline thickness</td>
4893 </tr>
4894 <tr>
4895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a></td>
4896 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of lower-case 'x'</td>
4897 </tr>
4898 <tr style='background-color: #f0f0f0; '>
4899 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMax'>fXMax</a></td>
4900 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum x</td>
4901 </tr>
4902 <tr>
4903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMin'>fXMin</a></td>
4904 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimum x</td>
4905 </tr>
4906</table>
4907
Cary Clarke4aa3712017-09-15 02:56:12 -04004908
Cary Clarka560c472017-11-27 10:44:06 -05004909<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004910 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4911 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4912 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4913 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4914 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4915 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004916 };
Cary Clark12799e12017-07-28 15:18:29 -04004917
Cary Clark682c58d2018-05-16 07:07:07 -04004918 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4919 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4920 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4921 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4922 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4923 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4924 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4925 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4926 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4927 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4928 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4929 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4930 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4931 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4932 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4933 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004934
Cary Clark682c58d2018-05-16 07:07:07 -04004935 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness(SkScalar* thickness)</a> const;
4936 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition(SkScalar* position)</a> const;
4937 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness(SkScalar* thickness)</a> const;
4938 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark186d08f2018-04-03 08:43:27 -04004939 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004940</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004941
Cary Clark682c58d2018-05-16 07:07:07 -04004942<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
4943computed 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 -04004944not available.
4945
Ben Wagnere5806492017-11-09 12:08:31 -05004946All vertical values relative to the baseline are given y-down. As such, zero is on the
4947baseline, negative values are above the baseline, and positive values are below the
4948baseline.
4949
Cary Clark682c58d2018-05-16 07:07:07 -04004950<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 -04004951are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004952
Cary Clark682c58d2018-05-16 07:07:07 -04004953<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 -04004954are valid, since their value may be zero.
4955
Cary Clark682c58d2018-05-16 07:07:07 -04004956## <a name='SkPaint_FontMetrics_FontMetricsFlags'>Enum SkPaint::FontMetrics::FontMetricsFlags</a>
Cary Clark12799e12017-07-28 15:18:29 -04004957
Cary Clarka560c472017-11-27 10:44:06 -05004958<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004959 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4960 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4961 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4962 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4963 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004964 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004965</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004966
Cary Clark682c58d2018-05-16 07:07:07 -04004967<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 -04004968the underline or strikeout metric may be valid and zero.
4969Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4970
Cary Clark12799e12017-07-28 15:18:29 -04004971### Constants
4972
Cary Clark682c58d2018-05-16 07:07:07 -04004973<table style='border-collapse: collapse; width: 62.5em'>
4974 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4975<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4976<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4977 <tr style='background-color: #f0f0f0; '>
4978 <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>
4979 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4980 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4981set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004982 </tr>
4983 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004984 <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>
4985 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4986 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4987set if fUnderlinePosition is valid</td>
4988 </tr>
4989 <tr style='background-color: #f0f0f0; '>
4990 <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>
4991 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4992 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4993set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004994 </tr>
4995 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004996 <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>
4997 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4998 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4999set if fStrikeoutPosition is valid</td>
5000 </tr>
5001</table>
5002
5003### Members
5004
5005<table style='border-collapse: collapse; width: 62.5em'>
5006 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
5007<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Name</th>
5008<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
5009 <tr style='background-color: #f0f0f0; '>
5010 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
5011 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
5012 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5013is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005014 </tr>
5015 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005016 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5017 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
5018 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005019Greatest extent above the baseline for any glyph.
5020Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005021</td>
5022 </tr>
5023 <tr style='background-color: #f0f0f0; '>
5024 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5025 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
5026 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005027Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005028Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005029</td>
5030 </tr>
5031 <tr>
5032 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5033 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
5034 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005035Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005036Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005037</td>
5038 </tr>
5039 <tr style='background-color: #f0f0f0; '>
5040 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5041 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
5042 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005043Greatest extent below the baseline for any glyph.
5044Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005045</td>
5046 </tr>
5047 <tr>
5048 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5049 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
5050 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005051Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005052Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005053</td>
5054 </tr>
5055 <tr style='background-color: #f0f0f0; '>
5056 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5057 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
5058 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005059Average character width, if it is available.
5060Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005061</td>
5062 </tr>
5063 <tr>
5064 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5065 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
5066 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5067maximum character width</td>
5068 </tr>
5069 <tr style='background-color: #f0f0f0; '>
5070 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5071 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
5072 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5073Minimum bounding box x-value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005074Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005075</td>
5076 </tr>
5077 <tr>
5078 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5079 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
5080 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5081Maximum bounding box x value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005082Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005083</td>
5084 </tr>
5085 <tr style='background-color: #f0f0f0; '>
5086 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5087 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
5088 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005089May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005090</td>
5091 </tr>
5092 <tr>
5093 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5094 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
5095 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005096May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005097</td>
5098 </tr>
5099 <tr style='background-color: #f0f0f0; '>
5100 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5101 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
5102 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5103If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5104If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
5105</td>
5106 </tr>
5107 <tr>
5108 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5109 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
5110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005111Position of the top of the underline stroke relative to the baseline.
5112Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005113
Cary Clark682c58d2018-05-16 07:07:07 -04005114If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5115If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
5116</td>
5117 </tr>
5118 <tr style='background-color: #f0f0f0; '>
5119 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5120 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
5121 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5122If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5123If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
5124</td>
5125 </tr>
5126 <tr>
5127 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5128 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
5129 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005130Position of the bottom of the strikeout stroke relative to the baseline.
5131Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005132
Cary Clark682c58d2018-05-16 07:07:07 -04005133If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5134If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
5135</td>
5136 </tr>
5137</table>
Cary Clark12799e12017-07-28 15:18:29 -04005138
Cary Clark682c58d2018-05-16 07:07:07 -04005139<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005140## hasUnderlineThickness
5141
Cary Clark682c58d2018-05-16 07:07:07 -04005142<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5143bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005144</pre>
5145
Cary Clark682c58d2018-05-16 07:07:07 -04005146If <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>, return true, and set
5147<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,
5148return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005149
5150### Parameters
5151
Cary Clark682c58d2018-05-16 07:07:07 -04005152<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
5153 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005154 </tr>
5155</table>
5156
5157### Return Value
5158
5159true if font specifies underline width
5160
5161---
5162
Cary Clark682c58d2018-05-16 07:07:07 -04005163<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005164## hasUnderlinePosition
5165
Cary Clark682c58d2018-05-16 07:07:07 -04005166<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5167bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005168</pre>
5169
Cary Clark682c58d2018-05-16 07:07:07 -04005170If <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>, return true, and set
5171<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,
5172return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005173
5174### Parameters
5175
Cary Clark682c58d2018-05-16 07:07:07 -04005176<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
5177 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005178 </tr>
5179</table>
5180
5181### Return Value
5182
Cary Clark682c58d2018-05-16 07:07:07 -04005183true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005184
5185---
5186
Cary Clark682c58d2018-05-16 07:07:07 -04005187<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005188## hasStrikeoutThickness
5189
Cary Clark682c58d2018-05-16 07:07:07 -04005190<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5191bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005192</pre>
5193
Cary Clark682c58d2018-05-16 07:07:07 -04005194If <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>, return true, and set
5195<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,
5196return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005197
5198### Parameters
5199
Cary Clark682c58d2018-05-16 07:07:07 -04005200<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
5201 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005202 </tr>
5203</table>
5204
5205### Return Value
5206
5207true if font specifies strikeout width
5208
5209---
5210
Cary Clark682c58d2018-05-16 07:07:07 -04005211<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005212## hasStrikeoutPosition
5213
Cary Clark682c58d2018-05-16 07:07:07 -04005214<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5215bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005216</pre>
5217
Cary Clark682c58d2018-05-16 07:07:07 -04005218If <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>, return true, and set
5219<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,
5220return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005221
5222### Parameters
5223
Cary Clark682c58d2018-05-16 07:07:07 -04005224<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
5225 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005226 </tr>
5227</table>
5228
5229### Return Value
5230
Cary Clark682c58d2018-05-16 07:07:07 -04005231true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005232
5233---
5234
Cary Clark682c58d2018-05-16 07:07:07 -04005235<a name='SkPaint_getFontMetrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005236## getFontMetrics
5237
Cary Clark682c58d2018-05-16 07:07:07 -04005238<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5239<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 -04005240</pre>
5241
Cary Clark682c58d2018-05-16 07:07:07 -04005242Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
5243The 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 -04005244descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005245If <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>.
5246Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5247dimensions 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>,
5248<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
5249Results 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 -04005250is ignored.
5251
5252### Parameters
5253
Cary Clark682c58d2018-05-16 07:07:07 -04005254<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
5255 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
5256 </tr>
5257 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
5258 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04005259 </tr>
5260</table>
5261
5262### Return Value
5263
5264recommended spacing between lines
5265
5266### Example
5267
5268<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
5269
5270### See Also
5271
Cary Clark682c58d2018-05-16 07:07:07 -04005272<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 -04005273
5274---
5275
Cary Clark682c58d2018-05-16 07:07:07 -04005276<a name='SkPaint_getFontSpacing'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005277## getFontSpacing
5278
Cary Clark682c58d2018-05-16 07:07:07 -04005279<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5280<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005281</pre>
5282
5283Returns the recommended spacing between lines: the sum of metrics
5284descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005285Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5286dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
5287Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005288
5289### Return Value
5290
5291recommended spacing between lines
5292
5293### Example
5294
5295<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
5296
5297#### Example Output
5298
5299~~~~
5300textSize: 12 fontSpacing: 13.9688
5301textSize: 18 fontSpacing: 20.9531
5302textSize: 24 fontSpacing: 27.9375
5303textSize: 32 fontSpacing: 37.25
5304~~~~
5305
5306</fiddle-embed></div>
5307
5308---
5309
Cary Clark682c58d2018-05-16 07:07:07 -04005310<a name='SkPaint_getFontBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005311## getFontBounds
5312
Cary Clark682c58d2018-05-16 07:07:07 -04005313<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5314<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005315</pre>
5316
Cary Clark682c58d2018-05-16 07:07:07 -04005317Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
5318Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
5319ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
5320and <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 -04005321
Cary Clark682c58d2018-05-16 07:07:07 -04005322If <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,
5323returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
5324<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 -04005325
5326### Return Value
5327
Cary Clark682c58d2018-05-16 07:07:07 -04005328union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04005329
5330### Example
5331
5332<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
5333
5334#### Example Output
5335
5336~~~~
5337metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5338font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5339~~~~
5340
5341</fiddle-embed></div>
5342
5343---
5344
Cary Clark682c58d2018-05-16 07:07:07 -04005345<a name='SkPaint_textToGlyphs'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005346## textToGlyphs
5347
Cary Clark682c58d2018-05-16 07:07:07 -04005348<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5349int <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 -04005350</pre>
5351
Cary Clark682c58d2018-05-16 07:07:07 -04005352Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
5353Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
5354<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>.
5355<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04005356
Cary Clark682c58d2018-05-16 07:07:07 -04005357Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04005358
Cary Clark682c58d2018-05-16 07:07:07 -04005359If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
5360If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04005361
Cary Clark682c58d2018-05-16 07:07:07 -04005362If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
5363<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04005364
5365### Parameters
5366
Cary Clark682c58d2018-05-16 07:07:07 -04005367<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
5368 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5369 </tr>
5370 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
5371 <td>length of character storage in bytes</td>
5372 </tr>
5373 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
5374 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005375 </tr>
5376</table>
5377
5378### Return Value
5379
Cary Clark682c58d2018-05-16 07:07:07 -04005380number 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 -04005381
5382### Example
5383
5384<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
5385
5386---
5387
Cary Clark682c58d2018-05-16 07:07:07 -04005388<a name='SkPaint_countText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005389## countText
5390
Cary Clark682c58d2018-05-16 07:07:07 -04005391<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5392int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005393</pre>
5394
Cary Clark682c58d2018-05-16 07:07:07 -04005395Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
5396Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
5397Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005398
5399### Parameters
5400
Cary Clark682c58d2018-05-16 07:07:07 -04005401<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
5402 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5403 </tr>
5404 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
5405 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04005406 </tr>
5407</table>
5408
5409### Return Value
5410
Cary Clark682c58d2018-05-16 07:07:07 -04005411number 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 -04005412
5413### Example
5414
5415<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
5416
5417#### Example Output
5418
5419~~~~
5420count = 5
5421~~~~
5422
5423</fiddle-embed></div>
5424
5425---
5426
Cary Clark682c58d2018-05-16 07:07:07 -04005427<a name='SkPaint_containsText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005428## containsText
5429
Cary Clark682c58d2018-05-16 07:07:07 -04005430<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5431bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005432</pre>
5433
Cary Clark682c58d2018-05-16 07:07:07 -04005434Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
5435Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
5436<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005437
Cary Clark682c58d2018-05-16 07:07:07 -04005438If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
5439returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
5440does 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 -04005441
Cary Clark682c58d2018-05-16 07:07:07 -04005442Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04005443
5444### Parameters
5445
Cary Clark682c58d2018-05-16 07:07:07 -04005446<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
5447 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
5448 </tr>
5449 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
5450 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04005451 </tr>
5452</table>
5453
5454### Return Value
5455
Cary Clark682c58d2018-05-16 07:07:07 -04005456true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04005457
5458### Example
5459
Cary Clark682c58d2018-05-16 07:07:07 -04005460<div><fiddle-embed name="71b417d6651cbcecae1a05067c94ab3e"><div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05005461corresponding to the Unicode surrogate code point.
5462</div>
Cary Clark12799e12017-07-28 15:18:29 -04005463
5464#### Example Output
5465
5466~~~~
54670x00b0 == has char
54680xd800 != has char
5469~~~~
5470
5471</fiddle-embed></div>
5472
5473### Example
5474
Cary Clark682c58d2018-05-16 07:07:07 -04005475<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href='#SkPaint_containsText'>containsText</a> returns true that glyph index is greater than zero, not
5476that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05005477</div>
Cary Clark12799e12017-07-28 15:18:29 -04005478
5479#### Example Output
5480
5481~~~~
54820x01ff == has glyph
54830x0000 != has glyph
54840xffff == has glyph
5485~~~~
5486
5487</fiddle-embed></div>
5488
5489### See Also
5490
Cary Clark682c58d2018-05-16 07:07:07 -04005491<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04005492
5493---
5494
Cary Clark682c58d2018-05-16 07:07:07 -04005495<a name='SkPaint_glyphsToUnichars'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005496## glyphsToUnichars
5497
Cary Clark682c58d2018-05-16 07:07:07 -04005498<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5499void <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 -04005500</pre>
5501
Cary Clark682c58d2018-05-16 07:07:07 -04005502Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
5503<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
5504Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
5505by <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 -04005506
Cary Clark682c58d2018-05-16 07:07:07 -04005507Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005508
5509### Parameters
5510
Cary Clark682c58d2018-05-16 07:07:07 -04005511<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
5512 <td>array of indices into font</td>
5513 </tr>
5514 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
5515 <td>length of glyph array</td>
5516 </tr>
5517 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
5518 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04005519 </tr>
5520</table>
5521
5522### Example
5523
Cary Clark682c58d2018-05-16 07:07:07 -04005524<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 -05005525</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005526
5527---
5528
Cary Clark682c58d2018-05-16 07:07:07 -04005529## <a name='Measure_Text'>Measure Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005530
Cary Clark682c58d2018-05-16 07:07:07 -04005531<a name='SkPaint_measureText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005532## measureText
5533
Cary Clark682c58d2018-05-16 07:07:07 -04005534<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5535<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 -04005536</pre>
5537
Cary Clark682c58d2018-05-16 07:07:07 -04005538Returns the advance width of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5539and the height of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5540The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
5541Uses <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,
5542and <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
5543<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
5544Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
5545The 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 -04005546
5547### Parameters
5548
Cary Clark682c58d2018-05-16 07:07:07 -04005549<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
5550 <td>character codes or glyph indices to be measured</td>
5551 </tr>
5552 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
5553 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
5554 </tr>
5555 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
5556 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005557 </tr>
5558</table>
5559
5560### Return Value
5561
5562advance width or height
5563
5564### Example
5565
5566<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
5567
5568---
5569
Cary Clark682c58d2018-05-16 07:07:07 -04005570<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05005571
Cary Clark682c58d2018-05-16 07:07:07 -04005572<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5573<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 -04005574</pre>
5575
Cary Clark682c58d2018-05-16 07:07:07 -04005576Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5577and the height of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5578The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
5579Uses <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,
5580and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5581Does 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 -04005582
5583### Parameters
5584
Cary Clark682c58d2018-05-16 07:07:07 -04005585<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
5586 <td>character codes or glyph indices to be measured</td>
5587 </tr>
5588 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
5589 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04005590 </tr>
5591</table>
5592
5593### Return Value
5594
5595advance width or height
5596
5597### Example
5598
5599<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
5600
5601#### Example Output
5602
5603~~~~
5604default width = 5
5605double width = 10
5606~~~~
5607
5608</fiddle-embed></div>
5609
5610---
5611
Cary Clark682c58d2018-05-16 07:07:07 -04005612<a name='SkPaint_breakText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005613## breakText
5614
Cary Clark682c58d2018-05-16 07:07:07 -04005615<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5616size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
5617 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04005618</pre>
5619
Cary Clark682c58d2018-05-16 07:07:07 -04005620Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5621If <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
5622equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5623If <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
5624equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5625Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5626Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
5627Uses <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,
5628and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5629Does 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 -04005630
5631### Parameters
5632
Cary Clark682c58d2018-05-16 07:07:07 -04005633<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
5634 <td>character codes or glyph indices to be measured</td>
5635 </tr>
5636 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
5637 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
5638 </tr>
5639 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
5640 <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>
5641 </tr>
5642 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
5643 <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 -04005644 </tr>
5645</table>
5646
5647### Return Value
5648
Cary Clark682c58d2018-05-16 07:07:07 -04005649bytes 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 -04005650
5651### Example
5652
Cary Clark682c58d2018-05-16 07:07:07 -04005653<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
5654<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 -05005655</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005656
5657---
5658
Cary Clark682c58d2018-05-16 07:07:07 -04005659<a name='SkPaint_getTextWidths'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005660## getTextWidths
5661
Cary Clark682c58d2018-05-16 07:07:07 -04005662<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5663int <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 -04005664</pre>
5665
Cary Clark682c58d2018-05-16 07:07:07 -04005666Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
5667the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
5668Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
5669If <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.
5670if <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.
5671If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the horizontal advance.
5672If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the vertical advance.
5673Uses <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,
5674and <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>.
5675Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
5676Does 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 -04005677
5678### Parameters
5679
Cary Clark682c58d2018-05-16 07:07:07 -04005680<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
5681 <td>character codes or glyph indices to be measured</td>
5682 </tr>
5683 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
5684 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
5685 </tr>
5686 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
5687 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
5688 </tr>
5689 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
5690 <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 -04005691 </tr>
5692</table>
5693
5694### Return Value
5695
Cary Clark682c58d2018-05-16 07:07:07 -04005696glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005697
5698### Example
5699
Cary Clark682c58d2018-05-16 07:07:07 -04005700<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.
5701The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05005702</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005703
5704---
5705
Cary Clark682c58d2018-05-16 07:07:07 -04005706## <a name='Text_Path'>Text Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05005707
Cary Clark682c58d2018-05-16 07:07:07 -04005708<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 -04005709
Cary Clark682c58d2018-05-16 07:07:07 -04005710<a name='SkPaint_getTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005711## getTextPath
5712
Cary Clark682c58d2018-05-16 07:07:07 -04005713<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5714void <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 -04005715</pre>
5716
Cary Clark682c58d2018-05-16 07:07:07 -04005717Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
5718Uses <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,
5719and <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.
5720All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
5721Uses <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 -04005722
5723### Parameters
5724
Cary Clark682c58d2018-05-16 07:07:07 -04005725<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
5726 <td>character codes or glyph indices</td>
5727 </tr>
5728 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
5729 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
5730 </tr>
5731 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
5732 <td><a href='#SkPaint_getTextPath_x'>x</a>-coordinate of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
5733 </tr>
5734 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
5735 <td><a href='#SkPaint_getTextPath_y'>y</a>-coordinate of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
5736 </tr>
5737 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
5738 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005739 </tr>
5740</table>
5741
5742### Example
5743
Cary Clark682c58d2018-05-16 07:07:07 -04005744<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 -05005745the offset location. The result is rendered with one draw call.
5746</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005747
5748---
5749
Cary Clark682c58d2018-05-16 07:07:07 -04005750<a name='SkPaint_getPosTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005751## getPosTextPath
5752
Cary Clark682c58d2018-05-16 07:07:07 -04005753<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5754void <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 -04005755</pre>
5756
Cary Clark682c58d2018-05-16 07:07:07 -04005757Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
5758Uses <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,
5759and <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.
5760All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
5761Uses <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>.
5762<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04005763
5764### Parameters
5765
Cary Clark682c58d2018-05-16 07:07:07 -04005766<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
5767 <td>character codes or glyph indices</td>
5768 </tr>
5769 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
5770 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
5771 </tr>
5772 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
5773 <td>positions of each glyph</td>
5774 </tr>
5775 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
5776 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005777 </tr>
5778</table>
5779
5780### Example
5781
Cary Clark682c58d2018-05-16 07:07:07 -04005782<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 -05005783</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005784
5785---
5786
Cary Clark682c58d2018-05-16 07:07:07 -04005787## <a name='Text_Intercepts'>Text Intercepts</a>
Cary Clark08895c42018-02-01 09:37:32 -05005788
Cary Clark682c58d2018-05-16 07:07:07 -04005789<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
5790of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05005791underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04005792
Cary Clark682c58d2018-05-16 07:07:07 -04005793<a name='SkPaint_getTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005794## getTextIntercepts
5795
Cary Clark682c58d2018-05-16 07:07:07 -04005796<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5797int <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,
5798 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005799</pre>
5800
Cary Clark682c58d2018-05-16 07:07:07 -04005801Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
5802<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
5803The 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 -05005804the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005805Uses <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,
5806and <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.
5807Uses <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 +00005808
Cary Clark682c58d2018-05-16 07:07:07 -04005809Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005810
Cary Clark682c58d2018-05-16 07:07:07 -04005811<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005812
5813### Parameters
5814
Cary Clark682c58d2018-05-16 07:07:07 -04005815<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
5816 <td>character codes or glyph indices</td>
5817 </tr>
5818 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
5819 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5820 </tr>
5821 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
5822 <td><a href='#SkPaint_getTextIntercepts_x'>x</a>-coordinate of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5823 </tr>
5824 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
5825 <td><a href='#SkPaint_getTextIntercepts_y'>y</a>-coordinate of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5826 </tr>
5827 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5828 <td>lower and upper line parallel to the advance</td>
5829 </tr>
5830 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5831 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005832 </tr>
5833</table>
5834
5835### Return Value
5836
5837number of intersections; may be zero
5838
5839### Example
5840
Cary Clark1a8d7622018-03-05 13:26:16 -05005841<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
5842</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005843
5844---
5845
Cary Clark682c58d2018-05-16 07:07:07 -04005846<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005847## getPosTextIntercepts
5848
Cary Clark682c58d2018-05-16 07:07:07 -04005849<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5850int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
5851 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005852</pre>
5853
Cary Clark682c58d2018-05-16 07:07:07 -04005854Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5855<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5856The 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 -05005857the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005858Uses <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,
5859and <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.
5860Uses <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 +00005861
Cary Clark682c58d2018-05-16 07:07:07 -04005862Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005863
Cary Clark682c58d2018-05-16 07:07:07 -04005864<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005865
5866### Parameters
5867
Cary Clark682c58d2018-05-16 07:07:07 -04005868<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5869 <td>character codes or glyph indices</td>
5870 </tr>
5871 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5872 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5873 </tr>
5874 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5875 <td>positions of each glyph</td>
5876 </tr>
5877 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5878 <td>lower and upper line parallel to the advance</td>
5879 </tr>
5880 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5881 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005882 </tr>
5883</table>
5884
5885### Return Value
5886
Cary Clarka523d2d2017-08-30 08:58:10 -04005887number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005888
5889### Example
5890
Cary Clark682c58d2018-05-16 07:07:07 -04005891<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 -05005892</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005893
5894---
5895
Cary Clark682c58d2018-05-16 07:07:07 -04005896<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005897## getPosTextHIntercepts
5898
Cary Clark682c58d2018-05-16 07:07:07 -04005899<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5900int <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,
5901 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005902</pre>
5903
Cary Clark682c58d2018-05-16 07:07:07 -04005904Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5905<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5906The 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 -05005907the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005908Uses <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,
5909and <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.
5910Uses <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 +00005911
Cary Clark682c58d2018-05-16 07:07:07 -04005912Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005913
Cary Clark682c58d2018-05-16 07:07:07 -04005914<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005915
5916### Parameters
5917
Cary Clark682c58d2018-05-16 07:07:07 -04005918<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5919 <td>character codes or glyph indices</td>
5920 </tr>
5921 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5922 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5923 </tr>
5924 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5925 <td>positions of each glyph in x</td>
5926 </tr>
5927 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5928 <td>position of each glyph in y</td>
5929 </tr>
5930 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5931 <td>lower and upper line parallel to the advance</td>
5932 </tr>
5933 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5934 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005935 </tr>
5936</table>
5937
5938### Return Value
5939
5940number of intersections; may be zero
5941
5942### Example
5943
Cary Clark682c58d2018-05-16 07:07:07 -04005944<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 -05005945</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005946
5947---
5948
Cary Clark682c58d2018-05-16 07:07:07 -04005949<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005950## getTextBlobIntercepts
5951
Cary Clark682c58d2018-05-16 07:07:07 -04005952<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5953int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='undocumented#SkTextBlob'>SkTextBlob</a>* blob, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005954</pre>
5955
Cary Clark682c58d2018-05-16 07:07:07 -04005956Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5957<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text 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='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 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 +00005963
Cary Clark682c58d2018-05-16 07:07:07 -04005964<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 -05005965
Cary Clark682c58d2018-05-16 07:07:07 -04005966Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005967
Cary Clark682c58d2018-05-16 07:07:07 -04005968<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005969
5970### Parameters
5971
Cary Clark682c58d2018-05-16 07:07:07 -04005972<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5973 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5974 </tr>
5975 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5976 <td>lower and upper line parallel to the advance</td>
5977 </tr>
5978 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5979 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005980 </tr>
5981</table>
5982
5983### Return Value
5984
5985number of intersections; may be zero
5986
5987### Example
5988
skia-bookmaker525f9a92018-05-03 06:27:39 +00005989<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005990
5991---
5992
Cary Clark682c58d2018-05-16 07:07:07 -04005993<a name='SkPaint_nothingToDraw'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005994## nothingToDraw
5995
Cary Clark682c58d2018-05-16 07:07:07 -04005996<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5997bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005998</pre>
5999
Cary Clark682c58d2018-05-16 07:07:07 -04006000Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
6001otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04006002
Cary Clark682c58d2018-05-16 07:07:07 -04006003Returns true if, for example, <a href='undocumented#Blend_Mode'>Blend Mode</a> combined with <a href='SkColor_Reference#Alpha'>Color Alpha</a> computes a
6004new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04006005
6006### Return Value
6007
Cary Clark682c58d2018-05-16 07:07:07 -04006008true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04006009
6010### Example
6011
skia-bookmaker525f9a92018-05-03 06:27:39 +00006012<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04006013
6014#### Example Output
6015
6016~~~~
6017initial nothing to draw: false
6018blend dst nothing to draw: true
6019blend src over nothing to draw: false
6020alpha 0 nothing to draw: true
6021~~~~
6022
6023</fiddle-embed></div>
6024
6025---
6026
Cary Clark682c58d2018-05-16 07:07:07 -04006027## <a name='Fast_Bounds'>Fast Bounds</a>
Cary Clark08895c42018-02-01 09:37:32 -05006028
Cary Clark682c58d2018-05-16 07:07:07 -04006029To be made private.
6030<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
6031<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04006032
Cary Clark682c58d2018-05-16 07:07:07 -04006033<a name='SkPaint_canComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006034## canComputeFastBounds
6035
Cary Clark682c58d2018-05-16 07:07:07 -04006036<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6037bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04006038</pre>
6039
Cary Clark682c58d2018-05-16 07:07:07 -04006040( to be made private)
6041Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
6042to 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 -04006043always returns false.
6044
6045### Return Value
6046
Cary Clark682c58d2018-05-16 07:07:07 -04006047true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04006048
6049---
6050
Cary Clark682c58d2018-05-16 07:07:07 -04006051<a name='SkPaint_computeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006052## computeFastBounds
6053
Cary Clark682c58d2018-05-16 07:07:07 -04006054<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6055const <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 -04006056</pre>
6057
Cary Clark682c58d2018-05-16 07:07:07 -04006058( to be made private)
6059Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04006060raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04006061effects 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 -04006062parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04006063for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04006064
Cary Clark682c58d2018-05-16 07:07:07 -04006065The 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
6066should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
6067use 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
6068<a href='SkRect_Reference#Rect'>Rect</a>.
6069
6070For example:
6071if (!path.isInverseFillType() && paint.<a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>) {
6072<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_computeFastBounds_storage'>storage</a>;
6073if (canvas->quickReject(paint.computeFastBounds(path.getBounds(), &<a href='#SkPaint_computeFastBounds_storage'>storage</a>))) {
6074return; // don't draw the path
6075}
6076}
6077// draw the path
Cary Clark12799e12017-07-28 15:18:29 -04006078
6079### Parameters
6080
Cary Clark682c58d2018-05-16 07:07:07 -04006081<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6082 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6083 </tr>
6084 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6085 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04006086 </tr>
6087</table>
6088
6089### Return Value
6090
6091fast computed bounds
6092
6093---
6094
Cary Clark682c58d2018-05-16 07:07:07 -04006095<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006096## computeFastStrokeBounds
6097
Cary Clark682c58d2018-05-16 07:07:07 -04006098<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6099const <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 -04006100</pre>
6101
Cary Clark682c58d2018-05-16 07:07:07 -04006102( to be made private)
6103
Cary Clark12799e12017-07-28 15:18:29 -04006104### Parameters
6105
Cary Clark682c58d2018-05-16 07:07:07 -04006106<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
6107 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6108 </tr>
6109 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
6110 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04006111 </tr>
6112</table>
6113
6114### Return Value
6115
6116fast computed bounds
6117
6118---
6119
Cary Clark682c58d2018-05-16 07:07:07 -04006120<a name='SkPaint_doComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006121## doComputeFastBounds
6122
Cary Clark682c58d2018-05-16 07:07:07 -04006123<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6124const <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 -04006125</pre>
6126
Cary Clark682c58d2018-05-16 07:07:07 -04006127( to be made private)
6128Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
6129account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
6130altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04006131
6132### Parameters
6133
Cary Clark682c58d2018-05-16 07:07:07 -04006134<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6135 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6136 </tr>
6137 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6138 <td>computed bounds of geometry</td>
6139 </tr>
6140 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
6141 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04006142 </tr>
6143</table>
6144
6145### Return Value
6146
6147fast computed bounds
6148
6149---
6150
Cary Clark682c58d2018-05-16 07:07:07 -04006151## <a name='Utility'>Utility</a>
Cary Clark78de7512018-02-07 07:27:09 -05006152
Cary Clark78de7512018-02-07 07:27:09 -05006153
Cary Clark682c58d2018-05-16 07:07:07 -04006154<table style='border-collapse: collapse; width: 62.5em'>
6155 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
6156<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
6157 <tr style='background-color: #f0f0f0; '>
6158 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
6159 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
6160 </tr>
6161 <tr>
6162 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
6163 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
6164 </tr>
6165 <tr style='background-color: #f0f0f0; '>
6166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
6167 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
6168 </tr>
6169 <tr>
6170 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
6171 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
6172 </tr>
6173 <tr style='background-color: #f0f0f0; '>
6174 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
6175 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
6176 </tr>
6177 <tr>
6178 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_toString'>toString</a></td>
6179 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='#Paint'>Paint</a> to machine readable form</td>
6180 </tr>
6181</table>
6182
6183
6184<a name='SkPaint_toString'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006185## toString
6186
Cary Clark682c58d2018-05-16 07:07:07 -04006187<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6188void <a href='#SkPaint_toString'>toString</a>(<a href='undocumented#SkString'>SkString</a>* str) const
Cary Clark12799e12017-07-28 15:18:29 -04006189</pre>
6190
Cary Clark682c58d2018-05-16 07:07:07 -04006191Creates string representation of <a href='#Paint'>Paint</a>. The representation is read by
Update Docs485dc862018-04-06 06:23:24 +00006192internal debugging tools.
Cary Clark12799e12017-07-28 15:18:29 -04006193
6194### Parameters
6195
Cary Clark682c58d2018-05-16 07:07:07 -04006196<table> <tr> <td><a name='SkPaint_toString_str'><code><strong>str</strong></code></a></td>
6197 <td>storage for string representation of <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04006198 </tr>
6199</table>
6200
6201### Example
6202
6203<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
6204
6205#### Example Output
6206
6207~~~~
6208text size = 12
6209~~~~
6210
6211</fiddle-embed></div>
6212
Cary Clark2ade9972017-11-02 17:49:34 -04006213### See Also
6214
Cary Clark682c58d2018-05-16 07:07:07 -04006215<a href='undocumented#SkPathEffect_toString'>SkPathEffect::toString</a> <a href='undocumented#SkMaskFilter_toString'>SkMaskFilter::toString</a> <a href='undocumented#SkColorFilter_toString'>SkColorFilter::toString</a> <a href='undocumented#SkImageFilter_toString'>SkImageFilter::toString</a>
Cary Clark2ade9972017-11-02 17:49:34 -04006216
Cary Clark12799e12017-07-28 15:18:29 -04006217---
6218