blob: f94211a710db4bbfbdff49d22fbb2ee91ca18b23 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
Cary Clark682c58d2018-05-16 07:07:07 -04004# <a name='Paint'>Paint</a>
Cary Clarke4aa3712017-09-15 02:56:12 -04005
Cary Clark682c58d2018-05-16 07:07:07 -04006# <a name='SkPaint'>Class SkPaint</a>
7<a href='#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='#Paint'>Paint</a> collects all
8options outside of the <a href='SkCanvas_Reference#Clip'>Canvas Clip</a> and <a href='SkCanvas_Reference#Matrix'>Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -04009
Cary Clark7cfcbca2018-01-04 16:11:51 -050010Various options apply to text, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -040011
12Some options may not be implemented on all platforms; in these cases, setting
Cary Clark682c58d2018-05-16 07:07:07 -040013the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040014functionality; for instance, text size is identical to matrix scale.
15
Cary Clark682c58d2018-05-16 07:07:07 -040016<a href='#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
17pipeline and multiple pipeline stages may be affected by a single <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040018
Cary Clark682c58d2018-05-16 07:07:07 -040019<a href='#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040020algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark682c58d2018-05-16 07:07:07 -040021<a href='#Paint'>Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -040022
Cary Clark682c58d2018-05-16 07:07:07 -040023The objects contained by <a href='#Paint'>Paint</a> are opaque, and cannot be edited outside of the <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -040024to affect it. The implementation is free to defer computations associated with the
Cary Clark682c58d2018-05-16 07:07:07 -040025<a href='#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
Cary Clarkffb3d682018-05-17 12:17:28 -040026<a href='SkPath_Reference#Path'>Path</a> geometries with <a href='#Anti_Alias'>Anti Aliasing</a>, regardless of how <a href='#SkPaint_kAntiAlias_Flag'>SkPaint::kAntiAlias Flag</a>
Cary Clark682c58d2018-05-16 07:07:07 -040027is set in <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040028
Cary Clark682c58d2018-05-16 07:07:07 -040029<a href='#Paint'>Paint</a> describes a single color, a single font, a single image quality, and so on.
Cary Clark12799e12017-07-28 15:18:29 -040030Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark682c58d2018-05-16 07:07:07 -040031<a href='undocumented#Shader'>Shader</a> attached to <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040032
Cary Clark682c58d2018-05-16 07:07:07 -040033## Overview
Cary Clark5081eed2018-01-22 07:55:48 -050034
Cary Clark682c58d2018-05-16 07:07:07 -040035<table style='border-collapse: collapse; width: 62.5em'>
36 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
37<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
38 <tr style='background-color: #f0f0f0; '>
39 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constant'>Constants</a></td>
40 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>enum and enum class, and their const values</td>
41 </tr>
42 <tr>
43 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constructor'>Constructors</a></td>
44 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>functions that construct <a href='#SkPaint'>SkPaint</a></td>
45 </tr>
46 <tr style='background-color: #f0f0f0; '>
47 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Member_Function'>Functions</a></td>
48 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>global and class member functions</td>
49 </tr>
50 <tr>
51 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Operator'>Operators</a></td>
52 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>operator overloading methods</td>
53 </tr>
54 <tr style='background-color: #f0f0f0; '>
55 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Related_Function'>Related Functions</a></td>
56 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>similar member functions grouped together</td>
57 </tr>
58 <tr>
59 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Struct'>Struct Declarations</a></td>
60 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>embedded struct members</td>
61 </tr>
62</table>
Cary Clark12799e12017-07-28 15:18:29 -040063
Cary Clark12799e12017-07-28 15:18:29 -040064
Cary Clark682c58d2018-05-16 07:07:07 -040065## <a name='Related_Function'>Related Function</a>
Cary Clark12799e12017-07-28 15:18:29 -040066
Cary Clark12799e12017-07-28 15:18:29 -040067
Cary Clark682c58d2018-05-16 07:07:07 -040068SkPaint global, <code>struct</code>, and <code>class</code> related member functions share a topic.
69<table style='border-collapse: collapse; width: 62.5em'>
70 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
71<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
72 <tr style='background-color: #f0f0f0; '>
73 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Alpha_Methods'>Alpha Methods</a></td>
74 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkColor_Reference#Alpha'>Alpha</a></td>
75 </tr>
76 <tr>
Cary Clarkffb3d682018-05-17 12:17:28 -040077 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -040078 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximating coverage with transparency</td>
79 </tr>
80 <tr style='background-color: #f0f0f0; '>
81 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Automatic_Hinting'>Automatic Hinting</a></td>
82 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>always adjust glyph paths</td>
83 </tr>
84 <tr>
85 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Methods'>Blend Mode Methods</a></td>
Cary Clark224c7002018-06-27 11:00:21 -040086 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -040087 </tr>
88 <tr style='background-color: #f0f0f0; '>
89 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Filter_Methods'>Color Filter Methods</a></td>
90 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Color_Filter'>Color Filter</a></td>
91 </tr>
92 <tr>
93 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Methods'>Color Methods</a></td>
94 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkColor_Reference#Color'>Color</a></td>
95 </tr>
96 <tr style='background-color: #f0f0f0; '>
97 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Device_Text'>Device Text</a></td>
98 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>increase precision of glyph position</td>
99 </tr>
100 <tr>
101 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Dither'>Dither</a></td>
102 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distributing color error</td>
103 </tr>
104 <tr style='background-color: #f0f0f0; '>
105 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Draw_Looper_Methods'>Draw Looper Methods</a></td>
106 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Draw_Looper'>Draw Looper</a></td>
107 </tr>
108 <tr>
109 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fake_Bold'>Fake Bold</a></td>
110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximate font styles</td>
111 </tr>
112 <tr style='background-color: #f0f0f0; '>
113 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fast_Bounds'>Fast Bounds</a></td>
114 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximate area required by <a href='#Paint'>Paint</a></td>
115 </tr>
116 <tr>
117 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fill_Path'>Fill Path</a></td>
118 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>make <a href='SkPath_Reference#Path'>Path</a> from <a href='undocumented#Path_Effect'>Path Effect</a>, stroking</td>
119 </tr>
120 <tr style='background-color: #f0f0f0; '>
121 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Filter_Quality_Methods'>Filter Quality Methods</a></td>
122 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Filter_Quality'>Filter Quality</a></td>
123 </tr>
124 <tr>
125 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>attributes represented by single bits</td>
127 </tr>
128 <tr style='background-color: #f0f0f0; '>
129 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
130 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a></td>
131 </tr>
132 <tr>
133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Font_Metrics'>Font Metrics</a></td>
134 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>common glyph dimensions</td>
135 </tr>
136 <tr style='background-color: #f0f0f0; '>
137 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a></td>
138 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph spacing affected by hinting</td>
139 </tr>
140 <tr>
141 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
142 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outline adjustment</td>
143 </tr>
144 <tr style='background-color: #f0f0f0; '>
145 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Image_Filter_Methods'>Image Filter Methods</a></td>
146 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Image_Filter'>Image Filter</a></td>
147 </tr>
148 <tr>
149 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Initializers'>Initializers</a></td>
150 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructors and initialization</td>
151 </tr>
152 <tr style='background-color: #f0f0f0; '>
153 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#LCD_Text'>LCD Text</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400154 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text relying on the order of RGB stripes</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400155 </tr>
156 <tr>
157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Linear_Text'>Linear Text</a></td>
158 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>selects text rendering as <a href='undocumented#Glyph'>Glyph</a> or <a href='SkPath_Reference#Path'>Path</a></td>
159 </tr>
160 <tr style='background-color: #f0f0f0; '>
161 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Management'>Management</a></td>
162 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>paint copying, moving, comparing</td>
163 </tr>
164 <tr>
165 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Mask_Filter_Methods'>Mask Filter Methods</a></td>
166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Mask_Filter'>Mask Filter</a></td>
167 </tr>
168 <tr style='background-color: #f0f0f0; '>
169 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Measure_Text'>Measure Text</a></td>
170 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>width, height, bounds of text</td>
171 </tr>
172 <tr>
173 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Miter_Limit'>Miter Limit</a></td>
174 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum length of stroked corners</td>
175 </tr>
176 <tr style='background-color: #f0f0f0; '>
177 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Path_Effect_Methods'>Path Effect Methods</a></td>
178 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Path_Effect'>Path Effect</a></td>
179 </tr>
180 <tr>
181 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Shader_Methods'>Shader Methods</a></td>
182 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Shader'>Shader</a></td>
183 </tr>
184 <tr style='background-color: #f0f0f0; '>
185 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Cap'>Stroke Cap</a></td>
186 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decorations at ends of open strokes</td>
187 </tr>
188 <tr>
189 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Join'>Stroke Join</a></td>
190 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decoration at corners of strokes</td>
191 </tr>
192 <tr style='background-color: #f0f0f0; '>
193 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Width'>Stroke Width</a></td>
194 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>thickness perpendicular to geometry</td>
195 </tr>
196 <tr>
197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
198 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>geometry filling, stroking</td>
199 </tr>
200 <tr style='background-color: #f0f0f0; '>
201 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Fill'>Style Fill</a></td>
202 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>fill and stroke</td>
203 </tr>
204 <tr>
205 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Hairline'>Style Hairline</a></td>
206 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lines and curves with minimal width</td>
207 </tr>
208 <tr style='background-color: #f0f0f0; '>
209 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Stroke'>Style Stroke</a></td>
210 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lines and curves with width</td>
211 </tr>
212 <tr>
213 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Subpixel_Text'>Subpixel Text</a></td>
214 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses pixel transparency to represent fractional offset</td>
215 </tr>
216 <tr style='background-color: #f0f0f0; '>
217 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Align'>Text Align</a></td>
218 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text placement relative to position</td>
219 </tr>
220 <tr>
221 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Encoding'>Text Encoding</a></td>
222 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text encoded as characters or <a href='undocumented#Glyph'>Glyphs</a></td>
223 </tr>
224 <tr style='background-color: #f0f0f0; '>
225 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Intercepts'>Text Intercepts</a></td>
226 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>advanced underline, strike through</td>
227 </tr>
228 <tr>
229 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Path'>Text Path</a></td>
230 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>geometry of <a href='undocumented#Glyph'>Glyphs</a></td>
231 </tr>
232 <tr style='background-color: #f0f0f0; '>
233 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Scale_X'>Text Scale X</a></td>
234 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text horizontal scale</td>
235 </tr>
236 <tr>
237 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Size'>Text Size</a></td>
238 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>overall height in points</td>
239 </tr>
240 <tr style='background-color: #f0f0f0; '>
241 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Skew_X'>Text Skew X</a></td>
242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text horizontal slant</td>
243 </tr>
244 <tr>
245 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Typeface_Methods'>Typeface Methods</a></td>
246 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Typeface'>Typeface</a></td>
247 </tr>
248 <tr style='background-color: #f0f0f0; '>
249 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Utility'>Utility</a></td>
250 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>rarely called management functions</td>
251 </tr>
252 <tr>
253 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Vertical_Text'>Vertical Text</a></td>
254 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>orient text from top to bottom</td>
255 </tr>
256</table>
Cary Clark12799e12017-07-28 15:18:29 -0400257
Cary Clark682c58d2018-05-16 07:07:07 -0400258## <a name='Constant'>Constant</a>
Cary Clark12799e12017-07-28 15:18:29 -0400259
Cary Clark12799e12017-07-28 15:18:29 -0400260
Cary Clark682c58d2018-05-16 07:07:07 -0400261SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
262<table style='border-collapse: collapse; width: 62.5em'>
263 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
264<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
265 <tr style='background-color: #f0f0f0; '>
266 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Align'>Align</a></td>
267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph locations relative to text position</td>
268 </tr>
269 <tr>
270 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Cap'>Cap</a></td>
271 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>start and end geometry on stroked shapes</td>
272 </tr>
273 <tr style='background-color: #f0f0f0; '>
274 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
275 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values described by bits and masks</td>
276 </tr>
277 <tr>
278 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
279 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>level of glyph outline adjustment</td>
280 </tr>
281 <tr style='background-color: #f0f0f0; '>
282 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Join'>Join</a></td>
283 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>corner geometry on stroked shapes</td>
284 </tr>
285 <tr>
286 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
287 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>stroke, fill, or both</td>
288 </tr>
289 <tr style='background-color: #f0f0f0; '>
290 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_TextEncoding'>TextEncoding</a></td>
291 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>character or glyph encoded size</td>
292 </tr>
293 <tr>
294 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAlignCount'>kAlignCount</a></td>
295 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Text_Align'>Text Align</a> values defined</td>
296 </tr>
297 <tr style='background-color: #f0f0f0; '>
298 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAllFlags'>kAllFlags</a></td>
299 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask of all <a href='#SkPaint_Flags'>Flags</a></td>
300 </tr>
301 <tr>
302 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400303 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400304 </tr>
305 <tr style='background-color: #f0f0f0; '>
306 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
307 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Automatic_Hinting'>Automatic Hinting</a></td>
308 </tr>
309 <tr>
310 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kBevel_Join'>kBevel Join</a></td>
311 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>connects outside edges</td>
312 </tr>
313 <tr style='background-color: #f0f0f0; '>
314 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>no stroke extension</td>
316 </tr>
317 <tr>
318 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCapCount'>kCapCount</a></td>
319 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Cap'>Stroke Cap</a> values defined</td>
320 </tr>
321 <tr style='background-color: #f0f0f0; '>
322 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCenter_Align'>kCenter Align</a></td>
323 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>centers line of glyphs by its width or height</td>
324 </tr>
325 <tr>
326 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Cap'>kDefault Cap</a></td>
327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
328 </tr>
329 <tr style='background-color: #f0f0f0; '>
330 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Join'>kDefault Join</a></td>
331 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
332 </tr>
333 <tr>
334 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
335 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Dither'>Dither</a></td>
336 </tr>
337 <tr style='background-color: #f0f0f0; '>
338 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
339 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
340 </tr>
341 <tr>
342 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
343 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Fake_Bold'>Fake Bold</a></td>
344 </tr>
345 <tr style='background-color: #f0f0f0; '>
346 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFill_Style'>kFill Style</a></td>
347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to fill geometry</td>
348 </tr>
349 <tr>
350 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFull_Hinting'>kFull Hinting</a></td>
Cary Clark137b8742018-05-30 09:21:49 -0400351 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>modifies glyph outlines for maximum constrast</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400352 </tr>
353 <tr style='background-color: #f0f0f0; '>
354 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
355 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent glyph indices</td>
356 </tr>
357 <tr>
358 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kJoinCount'>kJoinCount</a></td>
359 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Join'>Stroke Join</a> values defined</td>
360 </tr>
361 <tr style='background-color: #f0f0f0; '>
362 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
363 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#LCD_Text'>LCD Text</a></td>
364 </tr>
365 <tr>
366 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Cap'>kLast Cap</a></td>
367 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>largest <a href='#Stroke_Cap'>Stroke Cap</a> value</td>
368 </tr>
369 <tr style='background-color: #f0f0f0; '>
370 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Join'>kLast Join</a></td>
371 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to the largest value for <a href='#Stroke_Join'>Stroke Join</a></td>
372 </tr>
373 <tr>
374 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLeft_Align'>kLeft Align</a></td>
375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>positions glyph by computed font offset</td>
376 </tr>
377 <tr style='background-color: #f0f0f0; '>
378 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
379 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Linear_Text'>Linear Text</a></td>
380 </tr>
381 <tr>
382 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
383 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extends to <a href='#Miter_Limit'>Miter Limit</a></td>
384 </tr>
385 <tr style='background-color: #f0f0f0; '>
386 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNo_Hinting'>kNo Hinting</a></td>
387 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines unchanged</td>
388 </tr>
389 <tr>
390 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a></td>
391 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines modified to improve constrast</td>
392 </tr>
393 <tr style='background-color: #f0f0f0; '>
394 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRight_Align'>kRight Align</a></td>
395 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves lines of glyphs by its width or height</td>
396 </tr>
397 <tr>
398 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Cap'>kRound Cap</a></td>
399 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
400 </tr>
401 <tr style='background-color: #f0f0f0; '>
402 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Join'>kRound Join</a></td>
403 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
404 </tr>
405 <tr>
406 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a></td>
407 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimal modification to improve constrast</td>
408 </tr>
409 <tr style='background-color: #f0f0f0; '>
410 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSquare_Cap'>kSquare Cap</a></td>
411 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds square</td>
412 </tr>
413 <tr>
414 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a></td>
415 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to stroke and fill geometry</td>
416 </tr>
417 <tr style='background-color: #f0f0f0; '>
418 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStroke_Style'>kStroke Style</a></td>
419 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to stroke geometry</td>
420 </tr>
421 <tr>
422 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStyleCount'>kStyleCount</a></td>
423 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#SkPaint_Style'>Style</a> values defined</td>
424 </tr>
425 <tr style='background-color: #f0f0f0; '>
426 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
427 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Subpixel_Text'>Subpixel Text</a></td>
428 </tr>
429 <tr>
430 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a></td>
431 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent most of Unicode</td>
432 </tr>
433 <tr style='background-color: #f0f0f0; '>
434 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a></td>
435 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses four byte words to represent all of Unicode</td>
436 </tr>
437 <tr>
438 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a></td>
439 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses bytes to represent UTF-8 or ASCII</td>
440 </tr>
441 <tr style='background-color: #f0f0f0; '>
442 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
443 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Vertical_Text'>Vertical Text</a></td>
444 </tr>
445</table>
Cary Clark12799e12017-07-28 15:18:29 -0400446
Cary Clark682c58d2018-05-16 07:07:07 -0400447## <a name='Struct'>Struct</a>
Cary Clark12799e12017-07-28 15:18:29 -0400448
Cary Clark12799e12017-07-28 15:18:29 -0400449
Cary Clark682c58d2018-05-16 07:07:07 -0400450SkPaint uses C++ structs to declare the public data structures and interfaces.
451<table style='border-collapse: collapse; width: 62.5em'>
452 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
453<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
454 <tr style='background-color: #f0f0f0; '>
455 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics'>FontMetrics</a></td>
456 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values computed by <a href='undocumented#Font_Manager'>Font Manager</a> using <a href='undocumented#Typeface'>Typeface</a></td>
457 </tr>
458</table>
459
Cary Clark682c58d2018-05-16 07:07:07 -0400460## <a name='Constructor'>Constructor</a>
461
462
463SkPaint can be constructed or initialized by these functions, including C++ class constructors.
464<table style='border-collapse: collapse; width: 62.5em'>
465 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
466<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
467 <tr style='background-color: #f0f0f0; '>
468 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_empty_constructor'>SkPaint()</a></td>
469 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructs with default values</td>
470 </tr>
471 <tr>
472 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_SkPaint'>SkPaint(SkPaint&& paint)</a></td>
473 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
474 </tr>
475 <tr style='background-color: #f0f0f0; '>
476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_const_SkPaint'>SkPaint(const SkPaint& paint)</a></td>
477 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
478 </tr>
479 <tr>
480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_destructor'>~SkPaint()</a></td>
481 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decreases <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects</td>
482 </tr>
483</table>
484
Cary Clark682c58d2018-05-16 07:07:07 -0400485## <a name='Operator'>Operator</a>
486
487
488SkPaint operators inline class member functions with arithmetic equivalents.
489<table style='border-collapse: collapse; width: 62.5em'>
490 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
491<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
492 <tr style='background-color: #f0f0f0; '>
493 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a></td>
494 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for inequality</td>
495 </tr>
496 <tr>
497 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a></td>
498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
499 </tr>
500 <tr style='background-color: #f0f0f0; '>
501 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a></td>
502 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
503 </tr>
504 <tr>
505 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a></td>
506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for equality</td>
507 </tr>
508</table>
509
Cary Clark682c58d2018-05-16 07:07:07 -0400510## <a name='Member_Function'>Member Function</a>
511
512
513SkPaint member functions read and modify the structure properties.
514<table style='border-collapse: collapse; width: 62.5em'>
515 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
516<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
517 <tr style='background-color: #f0f0f0; '>
518 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_breakText'>breakText</a></td>
519 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text that fits in a width</td>
520 </tr>
521 <tr>
522 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a></td>
523 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if settings allow for fast bounds computation</td>
524 </tr>
525 <tr style='background-color: #f0f0f0; '>
526 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastBounds'>computeFastBounds</a></td>
527 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill bounds for quick reject tests</td>
528 </tr>
529 <tr>
530 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a></td>
531 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns stroke bounds for quick reject tests</td>
532 </tr>
533 <tr style='background-color: #f0f0f0; '>
534 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
535 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
536 </tr>
537 <tr>
538 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
539 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
540 </tr>
541 <tr style='background-color: #f0f0f0; '>
542 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a></td>
543 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns bounds for quick reject tests</td>
544 </tr>
545 <tr>
546 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getAlpha'>getAlpha</a></td>
547 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
548 </tr>
549 <tr style='background-color: #f0f0f0; '>
550 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getBlendMode'>getBlendMode</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400551 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, how colors combine with <a href='undocumented#Device'>Device</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400552 </tr>
553 <tr>
554 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColor'>getColor</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400555 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400556 </tr>
557 <tr style='background-color: #f0f0f0; '>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColor4f'>getColor4f</a></td>
559 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
560 </tr>
561 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400562 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColorFilter'>getColorFilter</a></td>
563 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Color_Filter'>Color Filter</a>, how colors are altered</td>
564 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400565 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400566 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getDrawLooper'>getDrawLooper</a></td>
567 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
568 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400569 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400570 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFillPath'>getFillPath</a></td>
571 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill path equivalent to stroke</td>
572 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400573 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400574 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFilterQuality'>getFilterQuality</a></td>
575 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, image filtering level</td>
576 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400577 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400578 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFlags'>getFlags</a></td>
579 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Flags'>Flags</a> stored in a bit field</td>
580 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400581 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400582 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontBounds'>getFontBounds</a></td>
583 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns union all glyph bounds</td>
584 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400585 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400586 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontMetrics'>getFontMetrics</a></td>
587 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a> metrics scaled by text size</td>
588 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400589 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400590 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontSpacing'>getFontSpacing</a></td>
591 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns recommended spacing between lines</td>
592 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400593 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400594 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHash'>getHash</a></td>
595 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns a shallow hash for equality checks</td>
596 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400597 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400598 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHinting'>getHinting</a></td>
599 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
600 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400601 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400602 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getImageFilter'>getImageFilter</a></td>
603 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
604 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400605 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400606 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getMaskFilter'>getMaskFilter</a></td>
607 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
608 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400609 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400610 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPathEffect'>getPathEffect</a></td>
611 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
612 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400613 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400614 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a></td>
615 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect horizontally positioned text; underlines</td>
616 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400617 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400618 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a></td>
619 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect positioned text; underlines</td>
620 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400621 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400622 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextPath'>getPosTextPath</a></td>
623 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to positioned text</td>
624 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400625 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400626 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getShader'>getShader</a></td>
627 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
628 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400629 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400630 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeCap'>getStrokeCap</a></td>
631 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Cap'>Cap</a>, the area drawn at path ends</td>
632 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400633 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400634 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a></td>
635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
636 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400637 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400638 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a></td>
639 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
640 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400641 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400642 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a></td>
643 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns thickness of the stroke</td>
644 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400645 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400646 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStyle'>getStyle</a></td>
647 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
648 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400649 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400650 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextAlign'>getTextAlign</a></td>
651 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
652 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400653 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400654 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a></td>
Cary Clarkd2ca79c2018-08-10 13:09:13 -0400655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect <a href='SkTextBlob_Reference#Text_Blob'>Text Blob</a>; underlines</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400656 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400657 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400658 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextEncoding'>getTextEncoding</a></td>
659 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns character or glyph encoded size</td>
660 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400661 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400662 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a></td>
663 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect text; underlines</td>
664 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400665 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextPath'>getTextPath</a></td>
667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to text</td>
668 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400669 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextScaleX'>getTextScaleX</a></td>
671 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal scale; condensed text</td>
672 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400673 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400674 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSize'>getTextSize</a></td>
675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text size in points</td>
676 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400677 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSkewX'>getTextSkewX</a></td>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal skew; oblique text</td>
680 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400681 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400682 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextWidths'>getTextWidths</a></td>
683 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance and bounds for each glyph in text</td>
684 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400685 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400686 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTypeface'>getTypeface</a></td>
687 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a>, font description</td>
688 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400689 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400690 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
692 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400693 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400694 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAntiAlias'>isAntiAlias</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400695 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Anti_Alias'>Anti Alias</a> is set</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400696 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400697 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400698 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAutohinted'>isAutohinted</a></td>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Glyph'>Glyphs</a> are always hinted</td>
700 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400701 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400702 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isDither'>isDither</a></td>
703 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Dither'>Dither</a> is set</td>
704 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400705 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400706 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a></td>
707 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is set</td>
708 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400709 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400710 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a></td>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Fake_Bold'>Fake Bold</a> is set</td>
712 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400713 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400714 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a></td>
715 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#LCD_Text'>LCD Text</a> is set</td>
716 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400717 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400718 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLinearText'>isLinearText</a></td>
719 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a></td>
720 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400721 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400722 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSrcOver'>isSrcOver</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400723 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400724 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400725 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400726 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSubpixelText'>isSubpixelText</a></td>
727 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Subpixel_Text'>Subpixel Text</a> is set</td>
728 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400729 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400730 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isVerticalText'>isVerticalText</a></td>
731 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Vertical_Text'>Vertical Text</a> is set</td>
732 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400733 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400734 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_measureText'>measureText</a></td>
735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance width and bounds of text</td>
736 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400737 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400738 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
739 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
740 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400741 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400742 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refColorFilter'>refColorFilter</a></td>
743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Color_Filter'>Color Filter</a>, how colors are altered</td>
744 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400745 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400746 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refDrawLooper'>refDrawLooper</a></td>
747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
748 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400749 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400750 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refImageFilter'>refImageFilter</a></td>
751 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
752 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400753 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400754 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refMaskFilter'>refMaskFilter</a></td>
755 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
756 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400757 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400758 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refPathEffect'>refPathEffect</a></td>
759 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
760 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400761 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400762 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refShader'>refShader</a></td>
763 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
764 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400765 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400766 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refTypeface'>refTypeface</a></td>
767 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Typeface'>Typeface</a>, font description</td>
768 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400769 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400770 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_reset'>reset</a></td>
771 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to default values</td>
772 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400773 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400774 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setARGB'>setARGB</a></td>
775 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets color by component</td>
776 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400777 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400778 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAlpha'>setAlpha</a></td>
779 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
780 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400781 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400782 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAntiAlias'>setAntiAlias</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400783 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400784 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400785 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400786 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAutohinted'>setAutohinted</a></td>
787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Glyph'>Glyphs</a> to always be hinted</td>
788 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400789 <tr style='background-color: #f0f0f0; '>
Cary Clark682c58d2018-05-16 07:07:07 -0400790 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setBlendMode'>setBlendMode</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400791 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, how colors combine with destination</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400792 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400793 <tr>
Brian Osman3f70d172018-09-04 19:50:28 +0000794 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColor'>setColor</a></td>
Cary Clark434b80f2018-09-04 11:13:56 -0400795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
796 </tr>
Cary Clarkbbe8ff92018-09-05 11:39:01 -0400797 <tr style='background-color: #f0f0f0; '>
798 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColor4f'>setColor4f</a></td>
799 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
800 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400801 <tr>
802 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColorFilter'>setColorFilter</a></td>
803 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Color_Filter'>Color Filter</a>, alters color</td>
804 </tr>
805 <tr style='background-color: #f0f0f0; '>
806 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDither'>setDither</a></td>
807 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Dither'>Dither</a></td>
808 </tr>
809 <tr>
810 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDrawLooper'>setDrawLooper</a></td>
811 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
812 </tr>
813 <tr style='background-color: #f0f0f0; '>
814 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a></td>
815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
816 </tr>
817 <tr>
818 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a></td>
819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Fake_Bold'>Fake Bold</a></td>
820 </tr>
821 <tr style='background-color: #f0f0f0; '>
822 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFilterQuality'>setFilterQuality</a></td>
823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level</td>
824 </tr>
825 <tr>
826 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFlags'>setFlags</a></td>
827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets multiple <a href='#SkPaint_Flags'>Flags</a> in a bit field</td>
828 </tr>
829 <tr style='background-color: #f0f0f0; '>
830 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setHinting'>setHinting</a></td>
831 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
832 </tr>
833 <tr>
834 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setImageFilter'>setImageFilter</a></td>
835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
836 </tr>
837 <tr style='background-color: #f0f0f0; '>
838 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a></td>
839 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#LCD_Text'>LCD Text</a></td>
840 </tr>
841 <tr>
842 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLinearText'>setLinearText</a></td>
843 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts to <a href='SkPath_Reference#Path'>Path</a> before draw or measure</td>
844 </tr>
845 <tr style='background-color: #f0f0f0; '>
846 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setMaskFilter'>setMaskFilter</a></td>
847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
848 </tr>
849 <tr>
850 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setPathEffect'>setPathEffect</a></td>
851 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
852 </tr>
853 <tr style='background-color: #f0f0f0; '>
854 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setShader'>setShader</a></td>
855 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
856 </tr>
857 <tr>
858 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeCap'>setStrokeCap</a></td>
859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Cap'>Cap</a>, the area drawn at path ends</td>
860 </tr>
861 <tr style='background-color: #f0f0f0; '>
862 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a></td>
863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
864 </tr>
865 <tr>
866 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a></td>
867 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
868 </tr>
869 <tr style='background-color: #f0f0f0; '>
870 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a></td>
871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets thickness of the stroke</td>
872 </tr>
873 <tr>
874 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStyle'>setStyle</a></td>
875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
876 </tr>
877 <tr style='background-color: #f0f0f0; '>
878 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setSubpixelText'>setSubpixelText</a></td>
879 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Subpixel_Text'>Subpixel Text</a></td>
880 </tr>
881 <tr>
882 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextAlign'>setTextAlign</a></td>
883 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
884 </tr>
885 <tr style='background-color: #f0f0f0; '>
886 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextEncoding'>setTextEncoding</a></td>
887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets character or glyph encoded size</td>
888 </tr>
889 <tr>
890 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextScaleX'>setTextScaleX</a></td>
891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal scale; condensed text</td>
892 </tr>
893 <tr style='background-color: #f0f0f0; '>
894 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSize'>setTextSize</a></td>
895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets text size in points</td>
896 </tr>
897 <tr>
898 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSkewX'>setTextSkewX</a></td>
899 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal skew; oblique text</td>
900 </tr>
901 <tr style='background-color: #f0f0f0; '>
902 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTypeface'>setTypeface</a></td>
903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Typeface'>Typeface</a>, font description</td>
904 </tr>
905 <tr>
906 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setVerticalText'>setVerticalText</a></td>
907 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Vertical_Text'>Vertical Text</a></td>
908 </tr>
909 <tr style='background-color: #f0f0f0; '>
910 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
911 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
912 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400913</table>
914
Cary Clark682c58d2018-05-16 07:07:07 -0400915## <a name='Initializers'>Initializers</a>
916
917<a name='SkPaint_empty_constructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400918## SkPaint
919
Cary Clark682c58d2018-05-16 07:07:07 -0400920<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
921<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400922</pre>
923
Cary Clark682c58d2018-05-16 07:07:07 -0400924Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400925
926| attribute | default value |
927| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400928| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark224c7002018-06-27 11:00:21 -0400929| <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
Cary Clark682c58d2018-05-16 07:07:07 -0400930| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
931| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
932| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
933| <a href='#Dither'>Dither</a> | false |
934| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
935| <a href='#Fake_Bold'>Fake Bold</a> | false |
936| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
937| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
938| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
939| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
940| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
941| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
942| <a href='#LCD_Text'>LCD Text</a> | false |
943| <a href='#Linear_Text'>Linear Text</a> | false |
944| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
945| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
946| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
947| <a href='undocumented#Shader'>Shader</a> | nullptr |
948| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
949| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
950| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
951| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
952| <a href='#Text_Size'>Text Size</a> | 12 |
953| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
954| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
955| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
956| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
957| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
958| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
959| <a href='#Vertical_Text'>Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400960
961The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500962paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400963build system.
964
965### Return Value
966
Cary Clark682c58d2018-05-16 07:07:07 -0400967default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400968
969### Example
970
971<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
972
973---
974
Cary Clark682c58d2018-05-16 07:07:07 -0400975<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400976## SkPaint
977
Cary Clark682c58d2018-05-16 07:07:07 -0400978<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
979<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400980</pre>
981
Cary Clark682c58d2018-05-16 07:07:07 -0400982Makes a shallow copy of <a href='#Paint'>Paint</a>. <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
983<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> are shared
984between the original <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a> and the copy. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400985their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400986
Cary Clark682c58d2018-05-16 07:07:07 -0400987The referenced objects <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
988<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
989This prevents objects with <a href='undocumented#Reference_Count'>Reference Count</a> from being modified once <a href='#Paint'>Paint</a> refers to them.
Cary Clark12799e12017-07-28 15:18:29 -0400990
991### Parameters
992
Cary Clark682c58d2018-05-16 07:07:07 -0400993<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
994 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400995 </tr>
996</table>
997
998### Return Value
999
Cary Clark682c58d2018-05-16 07:07:07 -04001000shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001001
1002### Example
1003
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001004<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -04001005
1006#### Example Output
1007
1008~~~~
1009SK_ColorRED == paint1.getColor()
1010SK_ColorBLUE == paint2.getColor()
1011~~~~
1012
1013</fiddle-embed></div>
1014
1015---
1016
Cary Clark682c58d2018-05-16 07:07:07 -04001017<a name='SkPaint_move_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001018## SkPaint
1019
Cary Clark682c58d2018-05-16 07:07:07 -04001020<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1021<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -04001022</pre>
1023
Cary Clarkd0530ba2017-09-14 11:25:39 -04001024Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -04001025of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001026
Cary Clark682c58d2018-05-16 07:07:07 -04001027After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001028
1029### Parameters
1030
Cary Clark682c58d2018-05-16 07:07:07 -04001031<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
1032 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001033 </tr>
1034</table>
1035
1036### Return Value
1037
Cary Clark682c58d2018-05-16 07:07:07 -04001038content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001039
1040### Example
1041
Cary Clark83647062018-07-18 16:21:51 -04001042<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
Cary Clark12799e12017-07-28 15:18:29 -04001043
1044#### Example Output
1045
1046~~~~
1047path effect unique: true
1048~~~~
1049
1050</fiddle-embed></div>
1051
1052---
1053
Cary Clark682c58d2018-05-16 07:07:07 -04001054<a name='SkPaint_reset'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001055## reset
1056
Cary Clark682c58d2018-05-16 07:07:07 -04001057<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1058void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001059</pre>
1060
Cary Clark682c58d2018-05-16 07:07:07 -04001061Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
1062<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001063
1064### Example
1065
1066<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
1067
1068#### Example Output
1069
1070~~~~
1071paint1 == paint2
1072~~~~
1073
1074</fiddle-embed></div>
1075
1076---
1077
Cary Clark682c58d2018-05-16 07:07:07 -04001078<a name='SkPaint_destructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001079## ~SkPaint
1080
Cary Clark682c58d2018-05-16 07:07:07 -04001081<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1082<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001083</pre>
1084
Cary Clark682c58d2018-05-16 07:07:07 -04001085Decreases <a href='#Paint'>Paint</a> <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects: <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
1086<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a>. If the
1087objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -04001088
1089---
1090
Cary Clark682c58d2018-05-16 07:07:07 -04001091## <a name='Management'>Management</a>
Cary Clark12799e12017-07-28 15:18:29 -04001092
Cary Clark682c58d2018-05-16 07:07:07 -04001093<a name='SkPaint_copy_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001094## operator=
1095
Cary Clark682c58d2018-05-16 07:07:07 -04001096<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1097<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001098</pre>
1099
Cary Clark682c58d2018-05-16 07:07:07 -04001100Makes a shallow copy of <a href='#Paint'>Paint</a>. <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
1101<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> are shared
1102between the original <a href='#SkPaint_copy_operator_paint'>paint</a> and the copy. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the
Cary Clark12799e12017-07-28 15:18:29 -04001103prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -04001104resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
1105are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -04001106
1107### Parameters
1108
Cary Clark682c58d2018-05-16 07:07:07 -04001109<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
1110 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -04001111 </tr>
1112</table>
1113
1114### Return Value
1115
Cary Clark682c58d2018-05-16 07:07:07 -04001116content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001117
1118### Example
1119
1120<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
1121
1122#### Example Output
1123
1124~~~~
1125SK_ColorRED == paint1.getColor()
1126SK_ColorRED == paint2.getColor()
1127~~~~
1128
1129</fiddle-embed></div>
1130
1131---
1132
Cary Clark682c58d2018-05-16 07:07:07 -04001133<a name='SkPaint_move_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001134## operator=
1135
Cary Clark682c58d2018-05-16 07:07:07 -04001136<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1137<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001138</pre>
1139
Cary Clark682c58d2018-05-16 07:07:07 -04001140Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
1141of objects referenced by the <a href='#SkPaint_move_operator_paint'>paint</a> parameter. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -04001142prior destination are decreased by one; those objects are deleted if the resulting count
1143is zero.
Cary Clark12799e12017-07-28 15:18:29 -04001144
Cary Clark682c58d2018-05-16 07:07:07 -04001145After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001146
1147### Parameters
1148
Cary Clark682c58d2018-05-16 07:07:07 -04001149<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
1150 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001151 </tr>
1152</table>
1153
1154### Return Value
1155
Cary Clark682c58d2018-05-16 07:07:07 -04001156content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001157
1158### Example
1159
Ravi Mistry874e22b2018-07-19 03:49:13 +00001160<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
Cary Clark12799e12017-07-28 15:18:29 -04001161
1162#### Example Output
1163
1164~~~~
1165SK_ColorRED == paint2.getColor()
1166~~~~
1167
1168</fiddle-embed></div>
1169
1170---
1171
Cary Clark682c58d2018-05-16 07:07:07 -04001172<a name='SkPaint_equal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001173## operator==
1174
Cary Clark682c58d2018-05-16 07:07:07 -04001175<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1176bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001177</pre>
1178
Cary Clark682c58d2018-05-16 07:07:07 -04001179Compares <a href='#SkPaint_equal_operator_a'>a</a> and <a href='#SkPaint_equal_operator_b'>b</a>, and returns true if <a href='#SkPaint_equal_operator_a'>a</a> and <a href='#SkPaint_equal_operator_b'>b</a> are equivalent. May return false
1180if <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
1181<a href='undocumented#Draw_Looper'>Draw Looper</a>, or <a href='undocumented#Image_Filter'>Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001182
1183### Parameters
1184
Cary Clark682c58d2018-05-16 07:07:07 -04001185<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
1186 <td><a href='#Paint'>Paint</a> to compare</td>
1187 </tr>
1188 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
1189 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001190 </tr>
1191</table>
1192
1193### Return Value
1194
Cary Clark682c58d2018-05-16 07:07:07 -04001195true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001196
1197### Example
1198
1199<div><fiddle-embed name="7481a948e34672720337a631830586dd">
1200
1201#### Example Output
1202
1203~~~~
1204paint1 == paint2
1205paint1 != paint2
1206~~~~
1207
1208</fiddle-embed></div>
1209
Cary Clark06c20f32018-03-20 15:53:27 -04001210### See Also
1211
Cary Clark682c58d2018-05-16 07:07:07 -04001212<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001213
Cary Clark12799e12017-07-28 15:18:29 -04001214---
1215
Cary Clark682c58d2018-05-16 07:07:07 -04001216<a name='SkPaint_notequal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001217## operator!=
1218
Cary Clark682c58d2018-05-16 07:07:07 -04001219<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1220bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001221</pre>
1222
Cary Clark682c58d2018-05-16 07:07:07 -04001223Compares <a href='#SkPaint_notequal_operator_a'>a</a> and <a href='#SkPaint_notequal_operator_b'>b</a>, and returns true if <a href='#SkPaint_notequal_operator_a'>a</a> and <a href='#SkPaint_notequal_operator_b'>b</a> are not equivalent. May return true
1224if <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
1225<a href='undocumented#Draw_Looper'>Draw Looper</a>, or <a href='undocumented#Image_Filter'>Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001226
1227### Parameters
1228
Cary Clark682c58d2018-05-16 07:07:07 -04001229<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
1230 <td><a href='#Paint'>Paint</a> to compare</td>
1231 </tr>
1232 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
1233 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001234 </tr>
1235</table>
1236
1237### Return Value
1238
Cary Clark682c58d2018-05-16 07:07:07 -04001239true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001240
1241### Example
1242
skia-bookmakera717ca92018-07-08 05:32:09 +00001243<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -04001244
1245#### Example Output
1246
1247~~~~
1248paint1 == paint2
1249paint1 == paint2
1250~~~~
1251
1252</fiddle-embed></div>
1253
Cary Clark06c20f32018-03-20 15:53:27 -04001254### See Also
1255
Cary Clark682c58d2018-05-16 07:07:07 -04001256<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001257
Cary Clark12799e12017-07-28 15:18:29 -04001258---
1259
Cary Clark682c58d2018-05-16 07:07:07 -04001260<a name='SkPaint_getHash'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001261## getHash
1262
Cary Clark682c58d2018-05-16 07:07:07 -04001263<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1264uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001265</pre>
1266
Cary Clark682c58d2018-05-16 07:07:07 -04001267Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001268Identical hashes guarantee that the paints are
1269equivalent, but differing hashes do not guarantee that the paints have differing
1270contents.
1271
Cary Clark682c58d2018-05-16 07:07:07 -04001272If <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a> returns true for two paints,
Cary Clark12799e12017-07-28 15:18:29 -04001273their hashes are also equal.
1274
1275The hash returned is platform and implementation specific.
1276
1277### Return Value
1278
1279a shallow hash
1280
1281### Example
1282
Cary Clark83647062018-07-18 16:21:51 -04001283<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
Cary Clark12799e12017-07-28 15:18:29 -04001284
1285#### Example Output
1286
1287~~~~
1288paint1 == paint2
1289paint1.getHash() == paint2.getHash()
1290~~~~
1291
1292</fiddle-embed></div>
1293
1294---
1295
Cary Clark682c58d2018-05-16 07:07:07 -04001296## <a name='Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001297
Cary Clark682c58d2018-05-16 07:07:07 -04001298## <a name='SkPaint_Hinting'>Enum SkPaint::Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001299
Cary Clarka560c472017-11-27 10:44:06 -05001300<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001301 enum <a href='#SkPaint_Hinting'>Hinting</a> {
1302 <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> = 0,
1303 <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> = 1,
1304 <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> = 2,
1305 <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -04001306 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001307</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001308
Cary Clark682c58d2018-05-16 07:07:07 -04001309<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
1310look at a given point size on font engines that support it. <a href='#SkPaint_Hinting'>Hinting</a> may have a
Cary Clark12799e12017-07-28 15:18:29 -04001311muted effect or no effect at all depending on the platform.
1312
Cary Clark7cfcbca2018-01-04 16:11:51 -05001313The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -04001314as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001315
1316### Constants
1317
Cary Clark682c58d2018-05-16 07:07:07 -04001318<table style='border-collapse: collapse; width: 62.5em'>
1319 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1320<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1321<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1322 <tr style='background-color: #f0f0f0; '>
1323 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
1324 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1325 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1326Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001327With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
1328bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -04001329outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -05001330to 26.6 fractional pixels.
1331</td>
Cary Clark12799e12017-07-28 15:18:29 -04001332 </tr>
1333 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001334 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
1335 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1336 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1337Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001338With FreeType, this is equivalent in spirit to the
1339FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -04001340lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -04001341Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05001342</td>
Cary Clark12799e12017-07-28 15:18:29 -04001343 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001344 <tr style='background-color: #f0f0f0; '>
1345 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
1346 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1348Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001349With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
1350choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -05001351gray-level rendering.
1352</td>
Cary Clark12799e12017-07-28 15:18:29 -04001353 </tr>
1354 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001355 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
1356 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1357 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04001358Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -04001359FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is set.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001360FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
1361horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -05001362variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
1363</td>
Cary Clark12799e12017-07-28 15:18:29 -04001364 </tr>
1365</table>
1366
Cary Clark682c58d2018-05-16 07:07:07 -04001367On <a href='undocumented#OS_X'>OS X</a> and iOS, hinting controls whether <a href='undocumented#Core_Graphics'>Core Graphics</a> dilates the font outlines
Cary Clark137b8742018-05-30 09:21:49 -04001368to account for LCD text. No hinting uses <a href='undocumented#Core_Text'>Core Text</a> <a href='undocumented#Grayscale'>Grayscale</a> output.
Cary Clark682c58d2018-05-16 07:07:07 -04001369Normal hinting uses <a href='undocumented#Core_Text'>Core Text</a> LCD output. If <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is clear,
Cary Clark137b8742018-05-30 09:21:49 -04001370the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -04001371
Cary Clark682c58d2018-05-16 07:07:07 -04001372On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -04001373
Cary Clark682c58d2018-05-16 07:07:07 -04001374<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1375Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04001376
Cary Clark682c58d2018-05-16 07:07:07 -04001377<a name='SkPaint_getHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001378## getHinting
1379
Cary Clark682c58d2018-05-16 07:07:07 -04001380<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1381<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001382</pre>
1383
1384Returns level of glyph outline adjustment.
1385
1386### Return Value
1387
Cary Clark682c58d2018-05-16 07:07:07 -04001388one of: <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001389
1390### Example
1391
Cary Clark83647062018-07-18 16:21:51 -04001392<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
Cary Clark12799e12017-07-28 15:18:29 -04001393
1394#### Example Output
1395
1396~~~~
1397SkPaint::kNormal_Hinting == paint.getHinting()
1398~~~~
1399
1400</fiddle-embed></div>
1401
1402---
1403
Cary Clark682c58d2018-05-16 07:07:07 -04001404<a name='SkPaint_setHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001405## setHinting
1406
Cary Clark682c58d2018-05-16 07:07:07 -04001407<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1408void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -04001409</pre>
1410
1411Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -04001412Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001413
Cary Clark682c58d2018-05-16 07:07:07 -04001414| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -04001415| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -04001416| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
1417| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
1418| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
1419| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -04001420
1421### Parameters
1422
Cary Clark682c58d2018-05-16 07:07:07 -04001423<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
1424 <td>one of: <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001425 </tr>
1426</table>
1427
1428### Example
1429
1430<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
1431
1432#### Example Output
1433
1434~~~~
1435paint1 == paint2
1436~~~~
1437
1438</fiddle-embed></div>
1439
1440---
1441
Cary Clark682c58d2018-05-16 07:07:07 -04001442## <a name='Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001443
Cary Clark682c58d2018-05-16 07:07:07 -04001444## <a name='SkPaint_Flags'>Enum SkPaint::Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001445
Cary Clarka560c472017-11-27 10:44:06 -05001446<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001447 enum <a href='#SkPaint_Flags'>Flags</a> {
1448 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> = 0x01,
1449 <a href='#SkPaint_kDither_Flag'>kDither Flag</a> = 0x04,
1450 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> = 0x20,
1451 <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> = 0x40,
1452 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> = 0x80,
1453 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> = 0x200,
1454 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> = 0x400,
1455 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> = 0x800,
1456 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -04001457
Cary Clark682c58d2018-05-16 07:07:07 -04001458 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -04001459 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001460
Cary Clark12799e12017-07-28 15:18:29 -04001461</pre>
1462
Cary Clark682c58d2018-05-16 07:07:07 -04001463The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
1464The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
1465with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
1466All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -04001467multiple settings at once.
1468
1469### Constants
1470
Cary Clark682c58d2018-05-16 07:07:07 -04001471<table style='border-collapse: collapse; width: 62.5em'>
1472 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1473<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1474<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1475 <tr style='background-color: #f0f0f0; '>
1476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
1477 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
1478 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -04001479mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -04001480 </tr>
1481 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001482 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
1483 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
1484 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1485mask for setting Dither</td>
1486 </tr>
1487 <tr style='background-color: #f0f0f0; '>
1488 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
1489 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
1490 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1491mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -04001492 </tr>
1493 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001494 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
1495 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
1496 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1497mask for setting Linear_Text</td>
1498 </tr>
1499 <tr style='background-color: #f0f0f0; '>
1500 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
1501 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
1502 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1503mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001504 </tr>
1505 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
1507 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
1508 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1509mask for setting LCD_Text</td>
1510 </tr>
1511 <tr style='background-color: #f0f0f0; '>
1512 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
1513 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
1514 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1515mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -04001516 </tr>
1517 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001518 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
1519 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
1520 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1521mask for setting Automatic_Hinting</td>
1522 </tr>
1523 <tr style='background-color: #f0f0f0; '>
1524 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kVerticalText_Flag'><code>SkPaint::kVerticalText_Flag</code></a></td>
1525 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x1000</td>
1526 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1527mask for setting Vertical_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001528 </tr>
1529 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001530 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
1531 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
1532 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1533mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use</td>
Cary Clark12799e12017-07-28 15:18:29 -04001534 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001535<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
1536</table>
Cary Clark12799e12017-07-28 15:18:29 -04001537
Cary Clark682c58d2018-05-16 07:07:07 -04001538## <a name='SkPaint_ReserveFlags'>Enum SkPaint::ReserveFlags</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001539
Cary Clarke8161dd2018-09-06 12:47:04 -04001540To be deprecated soon.
Cary Clark12799e12017-07-28 15:18:29 -04001541
Cary Clarke8161dd2018-09-06 12:47:04 -04001542Only valid for Android framework.
Cary Clark4855f782018-02-06 09:41:53 -05001543
Cary Clarka560c472017-11-27 10:44:06 -05001544<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001545 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
1546 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText ReserveFlag</a> = 0x08,
1547 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -04001548 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001549</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001550
1551### Constants
1552
Cary Clark682c58d2018-05-16 07:07:07 -04001553<table style='border-collapse: collapse; width: 62.5em'>
1554 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1555<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1556<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1557 <tr style='background-color: #f0f0f0; '>
1558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
1559 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
1560 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -04001561To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -04001562
Cary Clarke8161dd2018-09-06 12:47:04 -04001563</td>
Cary Clark12799e12017-07-28 15:18:29 -04001564 </tr>
1565 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001566 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
1567 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
1568 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarke8161dd2018-09-06 12:47:04 -04001569To be deprecated soon.
Cary Clark682c58d2018-05-16 07:07:07 -04001570
Cary Clarke8161dd2018-09-06 12:47:04 -04001571</td>
Cary Clark12799e12017-07-28 15:18:29 -04001572 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001573</table>
Cary Clark4855f782018-02-06 09:41:53 -05001574
Cary Clark682c58d2018-05-16 07:07:07 -04001575<a name='SkPaint_getFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001576## getFlags
1577
Cary Clark682c58d2018-05-16 07:07:07 -04001578<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1579uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001580</pre>
1581
Cary Clark682c58d2018-05-16 07:07:07 -04001582Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
1583bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -04001584
1585### Return Value
1586
Cary Clark682c58d2018-05-16 07:07:07 -04001587zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001588
1589### Example
1590
1591<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
1592
1593#### Example Output
1594
1595~~~~
1596(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
1597~~~~
1598
1599</fiddle-embed></div>
1600
1601---
1602
Cary Clark682c58d2018-05-16 07:07:07 -04001603<a name='SkPaint_setFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001604## setFlags
1605
Cary Clark682c58d2018-05-16 07:07:07 -04001606<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1607void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -04001608</pre>
1609
Cary Clark682c58d2018-05-16 07:07:07 -04001610Replaces <a href='#SkPaint_Flags'>Flags</a> with <a href='#SkPaint_setFlags_flags'>flags</a>, the union of the <a href='#SkPaint_Flags'>Flags</a> members.
1611All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -04001612
1613### Parameters
1614
Cary Clark682c58d2018-05-16 07:07:07 -04001615<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
1616 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001617 </tr>
1618</table>
1619
1620### Example
1621
1622<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
1623
1624#### Example Output
1625
1626~~~~
1627paint.isAntiAlias()
1628paint.isDither()
1629~~~~
1630
1631</fiddle-embed></div>
1632
1633---
1634
Cary Clarkffb3d682018-05-17 12:17:28 -04001635## <a name='Anti_Alias'>Anti Alias</a>
Cary Clark08895c42018-02-01 09:37:32 -05001636
Cary Clarkffb3d682018-05-17 12:17:28 -04001637<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -04001638If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
1639If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is set, pixels are drawn with <a href='SkColor_Reference#Alpha'>Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001640
Cary Clark682c58d2018-05-16 07:07:07 -04001641The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -04001642passing through the pixel center may, but is not required to, draw the pixel.
1643
Cary Clark682c58d2018-05-16 07:07:07 -04001644<a href='undocumented#Raster_Engine'>Raster Engine</a> draws <a href='undocumented#Alias'>Aliased</a> pixels whose centers are on or to the right of the start of an
1645active <a href='SkPath_Reference#Path'>Path</a> edge, and whose center is to the left of the end of the active <a href='SkPath_Reference#Path'>Path</a> edge.
Cary Clark12799e12017-07-28 15:18:29 -04001646
Cary Clarkffb3d682018-05-17 12:17:28 -04001647A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
1648<a href='undocumented#Supersampling'>Supersampling</a> to <a href='#Anti_Alias'>Anti Alias</a> all drawing, and have no mechanism to selectively
Cary Clark682c58d2018-05-16 07:07:07 -04001649<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001650
Cary Clarkffb3d682018-05-17 12:17:28 -04001651The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -04001652
Cary Clarkffb3d682018-05-17 12:17:28 -04001653<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
1654<a href='#Anti_Alias'>Anti Alias</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001655at compile time.
1656
1657### Example
1658
1659<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
1660A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -04001661The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
1662<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001663</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001664
Cary Clark682c58d2018-05-16 07:07:07 -04001665<a name='SkPaint_isAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001666## isAntiAlias
1667
Cary Clark682c58d2018-05-16 07:07:07 -04001668<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1669bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001670</pre>
1671
Cary Clark80247e52018-07-11 16:18:41 -04001672Returns true if pixels on the active edges of <a href='SkPath_Reference#Path'>Path</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -04001673
Cary Clark682c58d2018-05-16 07:07:07 -04001674Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001675
1676### Return Value
1677
Cary Clark682c58d2018-05-16 07:07:07 -04001678<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001679
1680### Example
1681
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001682<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -04001683
1684#### Example Output
1685
1686~~~~
1687paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1688paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1689~~~~
1690
1691</fiddle-embed></div>
1692
1693---
1694
Cary Clark682c58d2018-05-16 07:07:07 -04001695<a name='SkPaint_setAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001696## setAntiAlias
1697
Cary Clark682c58d2018-05-16 07:07:07 -04001698<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1699void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001700</pre>
1701
Cary Clark682c58d2018-05-16 07:07:07 -04001702Requests, but does not require, that <a href='SkPath_Reference#Path'>Path</a> edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -04001703partial transparency.
1704
Cary Clark682c58d2018-05-16 07:07:07 -04001705Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1706Clears <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001707
1708### Parameters
1709
Cary Clark682c58d2018-05-16 07:07:07 -04001710<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1711 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001712 </tr>
1713</table>
1714
1715### Example
1716
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001717<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -04001718
1719#### Example Output
1720
1721~~~~
1722paint1 == paint2
1723~~~~
1724
1725</fiddle-embed></div>
1726
1727---
1728
Cary Clark682c58d2018-05-16 07:07:07 -04001729## <a name='Dither'>Dither</a>
Cary Clark08895c42018-02-01 09:37:32 -05001730
Cary Clark682c58d2018-05-16 07:07:07 -04001731<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001732This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001733Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1734and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1735and improves rendering into a <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001736
1737Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001738<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
1739<a href='#Dither'>Dither</a> cannot be enabled for <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and
1740<a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001741
Cary Clark682c58d2018-05-16 07:07:07 -04001742<a href='#Dither'>Dither</a> is disabled by default.
1743<a href='#Dither'>Dither</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001744at compile time.
1745
Cary Clark682c58d2018-05-16 07:07:07 -04001746Some platform implementations may ignore dithering. SetSK_IGNORE_GPU_DITHERto ignore <a href='#Dither'>Dither</a> on <a href='undocumented#GPU_Surface'>GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001747
1748### Example
1749
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001750<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
Cary Clark1a8d7622018-03-05 13:26:16 -05001751alternating nearby colors from pixel to pixel.
1752</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001753
1754### Example
1755
Cary Clarka619d452018-07-16 08:12:01 -04001756<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark224c7002018-06-27 11:00:21 -04001757Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001758dither, making it easier to see.
1759</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001760
Cary Clark682c58d2018-05-16 07:07:07 -04001761<a name='SkPaint_isDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001762## isDither
1763
Cary Clark682c58d2018-05-16 07:07:07 -04001764<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1765bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001766</pre>
1767
Cary Clark80247e52018-07-11 16:18:41 -04001768Returns true if color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001769
Cary Clark682c58d2018-05-16 07:07:07 -04001770Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001771
1772### Return Value
1773
Cary Clark682c58d2018-05-16 07:07:07 -04001774<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001775
1776### Example
1777
1778<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1779
1780#### Example Output
1781
1782~~~~
1783paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1784paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1785~~~~
1786
1787</fiddle-embed></div>
1788
1789---
1790
Cary Clark682c58d2018-05-16 07:07:07 -04001791<a name='SkPaint_setDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001792## setDither
1793
Cary Clark682c58d2018-05-16 07:07:07 -04001794<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1795void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001796</pre>
1797
1798Requests, but does not require, to distribute color error.
1799
Cary Clark682c58d2018-05-16 07:07:07 -04001800Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1801Clears <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001802
1803### Parameters
1804
Cary Clark682c58d2018-05-16 07:07:07 -04001805<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1806 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001807 </tr>
1808</table>
1809
1810### Example
1811
1812<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1813
1814#### Example Output
1815
1816~~~~
1817paint1 == paint2
1818~~~~
1819
1820</fiddle-embed></div>
1821
1822### See Also
1823
Cary Clark682c58d2018-05-16 07:07:07 -04001824<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001825
1826---
1827
1828### See Also
1829
Cary Clarkffb3d682018-05-17 12:17:28 -04001830Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001831
Cary Clark682c58d2018-05-16 07:07:07 -04001832## <a name='Device_Text'>Device Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05001833
Cary Clark682c58d2018-05-16 07:07:07 -04001834<a href='#LCD_Text'>LCD Text</a> and <a href='#Subpixel_Text'>Subpixel Text</a> increase the precision of glyph position.
Cary Clark12799e12017-07-28 15:18:29 -04001835
Cary Clarkffb3d682018-05-17 12:17:28 -04001836When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> takes advantage of the organization of RGB stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001837create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001838on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001839<a href='#LCD_Text'>LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clarkffb3d682018-05-17 12:17:28 -04001840the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001841
Cary Clark682c58d2018-05-16 07:07:07 -04001842<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001843As the opaqueness
1844of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1845
1846Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001847<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1848<a href='#LCD_Text'>LCD Text</a> or <a href='#Subpixel_Text'>Subpixel Text</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
1849<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> or <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> (or both) at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001850
1851### Example
1852
Cary Clark682c58d2018-05-16 07:07:07 -04001853<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href='#LCD_Text'>LCD Text</a> and <a href='#Subpixel_Text'>Subpixel Text</a>.
1854When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1855When <a href='#Subpixel_Text'>Subpixel Text</a> is enabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are unique, but appear evenly spaced.
Cary Clark1a8d7622018-03-05 13:26:16 -05001856</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001857
Cary Clark682c58d2018-05-16 07:07:07 -04001858## <a name='Linear_Text'>Linear Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001859
Cary Clark682c58d2018-05-16 07:07:07 -04001860<a href='#Linear_Text'>Linear Text</a> selects whether text is rendered as a <a href='undocumented#Glyph'>Glyph</a> or as a <a href='SkPath_Reference#Path'>Path</a>.
1861If <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is set, it has the same effect as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1862If <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear, it is the same as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001863
Cary Clark682c58d2018-05-16 07:07:07 -04001864<a name='SkPaint_isLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001865## isLinearText
1866
Cary Clark682c58d2018-05-16 07:07:07 -04001867<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1868bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001869</pre>
1870
Cary Clark80247e52018-07-11 16:18:41 -04001871Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001872
Cary Clark682c58d2018-05-16 07:07:07 -04001873Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001874
1875### Return Value
1876
Cary Clark682c58d2018-05-16 07:07:07 -04001877<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001878
1879### Example
1880
1881<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1882
1883### See Also
1884
Cary Clark682c58d2018-05-16 07:07:07 -04001885<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001886
1887---
1888
Cary Clark682c58d2018-05-16 07:07:07 -04001889<a name='SkPaint_setLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001890## setLinearText
1891
Cary Clark682c58d2018-05-16 07:07:07 -04001892<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1893void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001894</pre>
1895
Cary Clark80247e52018-07-11 16:18:41 -04001896Returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark682c58d2018-05-16 07:07:07 -04001897By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001898
Cary Clark682c58d2018-05-16 07:07:07 -04001899Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1900Clears <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001901
1902### Parameters
1903
Cary Clark682c58d2018-05-16 07:07:07 -04001904<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1905 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001906 </tr>
1907</table>
1908
1909### Example
1910
Cary Clark83647062018-07-18 16:21:51 -04001911<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001912
1913### See Also
1914
Cary Clark682c58d2018-05-16 07:07:07 -04001915<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001916
1917---
1918
Cary Clark682c58d2018-05-16 07:07:07 -04001919## <a name='Subpixel_Text'>Subpixel Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001920
Cary Clark682c58d2018-05-16 07:07:07 -04001921<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001922As the opaqueness
1923of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1924
Cary Clark682c58d2018-05-16 07:07:07 -04001925<a name='SkPaint_isSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001926## isSubpixelText
1927
Cary Clark682c58d2018-05-16 07:07:07 -04001928<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1929bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001930</pre>
1931
Cary Clark80247e52018-07-11 16:18:41 -04001932Returns true if <a href='undocumented#Glyph'>Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001933
Cary Clark682c58d2018-05-16 07:07:07 -04001934Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001935
1936### Return Value
1937
Cary Clark682c58d2018-05-16 07:07:07 -04001938<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001939
1940### Example
1941
1942<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1943
1944#### Example Output
1945
1946~~~~
1947paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1948paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1949~~~~
1950
1951</fiddle-embed></div>
1952
1953---
1954
Cary Clark682c58d2018-05-16 07:07:07 -04001955<a name='SkPaint_setSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001956## setSubpixelText
1957
Cary Clark682c58d2018-05-16 07:07:07 -04001958<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1959void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001960</pre>
1961
Cary Clark682c58d2018-05-16 07:07:07 -04001962Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001963
Cary Clark682c58d2018-05-16 07:07:07 -04001964Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1965Clears <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001966
1967### Parameters
1968
Cary Clark682c58d2018-05-16 07:07:07 -04001969<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1970 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001971 </tr>
1972</table>
1973
1974### Example
1975
1976<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1977
1978#### Example Output
1979
1980~~~~
1981paint1 == paint2
1982~~~~
1983
1984</fiddle-embed></div>
1985
1986---
1987
Cary Clark682c58d2018-05-16 07:07:07 -04001988## <a name='LCD_Text'>LCD Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001989
Cary Clarkffb3d682018-05-17 12:17:28 -04001990When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> takes advantage of the organization of RGB stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001991create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001992on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001993<a href='#LCD_Text'>LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clarkffb3d682018-05-17 12:17:28 -04001994the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001995
Cary Clark682c58d2018-05-16 07:07:07 -04001996<a name='SkPaint_isLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001997## isLCDRenderText
1998
Cary Clark682c58d2018-05-16 07:07:07 -04001999<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2000bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002001</pre>
2002
Cary Clark80247e52018-07-11 16:18:41 -04002003Returns true if <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002004
Cary Clark682c58d2018-05-16 07:07:07 -04002005Returns true if <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is set.
Cary Clark12799e12017-07-28 15:18:29 -04002006
2007### Return Value
2008
Cary Clark682c58d2018-05-16 07:07:07 -04002009<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002010
2011### Example
2012
skia-bookmakera391c722018-07-09 05:28:19 +00002013<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
Cary Clark12799e12017-07-28 15:18:29 -04002014
2015#### Example Output
2016
2017~~~~
2018paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2019paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2020~~~~
2021
2022</fiddle-embed></div>
2023
2024---
2025
Cary Clark682c58d2018-05-16 07:07:07 -04002026<a name='SkPaint_setLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002027## setLCDRenderText
2028
Cary Clark682c58d2018-05-16 07:07:07 -04002029<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2030void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04002031</pre>
2032
Cary Clark682c58d2018-05-16 07:07:07 -04002033Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002034
Cary Clark682c58d2018-05-16 07:07:07 -04002035Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
2036Clears <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04002037
2038### Parameters
2039
Cary Clark682c58d2018-05-16 07:07:07 -04002040<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
2041 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002042 </tr>
2043</table>
2044
2045### Example
2046
skia-bookmakere0a458f2018-07-16 05:29:00 +00002047<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
Cary Clark12799e12017-07-28 15:18:29 -04002048
2049#### Example Output
2050
2051~~~~
2052paint1 == paint2
2053~~~~
2054
2055</fiddle-embed></div>
2056
2057---
2058
Cary Clark682c58d2018-05-16 07:07:07 -04002059## <a name='Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a>
Cary Clark08895c42018-02-01 09:37:32 -05002060
Cary Clark682c58d2018-05-16 07:07:07 -04002061<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
2062<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> when set chooses an embedded bitmap glyph over an outline contained
Cary Clark7cfcbca2018-01-04 16:11:51 -05002063in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04002064
Cary Clark682c58d2018-05-16 07:07:07 -04002065FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
2066the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002067Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04002068<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04002069
Cary Clark682c58d2018-05-16 07:07:07 -04002070<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
2071<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
2072<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002073
2074### Example
2075
Cary Clarka560c472017-11-27 10:44:06 -05002076<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05002077<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05002078 includes an embedded bitmap Glyph at odd font sizes. This example works
2079 on platforms that use FreeType as their Font_Engine.
2080 Windows may, but is not required to, return a bitmap glyph if
2081 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
2082 bitmap.allocN32Pixels(30, 15);
2083 bitmap.eraseColor(0);
2084 SkCanvas offscreen(bitmap);
2085 SkPaint paint;
2086 paint.setAntiAlias(true);
2087 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05002088 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05002089 for (bool embedded : { false, true}) {
2090 paint.setEmbeddedBitmapText(embedded);
2091 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
2092 }
2093 canvas->drawBitmap(bitmap, 0, 0);
2094 canvas->scale(10, 10);
2095 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05002096
Cary Clarka560c472017-11-27 10:44:06 -05002097</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002098
Cary Clark682c58d2018-05-16 07:07:07 -04002099<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002100## isEmbeddedBitmapText
2101
Cary Clark682c58d2018-05-16 07:07:07 -04002102<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2103bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002104</pre>
2105
Cary Clark80247e52018-07-11 16:18:41 -04002106Returns true if <a href='undocumented#Engine'>Font Engine</a> may return <a href='undocumented#Glyph'>Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04002107
Cary Clark682c58d2018-05-16 07:07:07 -04002108Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002109
2110### Return Value
2111
Cary Clark682c58d2018-05-16 07:07:07 -04002112<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002113
2114### Example
2115
2116<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
2117
2118#### Example Output
2119
2120~~~~
2121paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2122paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2123~~~~
2124
2125</fiddle-embed></div>
2126
2127---
2128
Cary Clark682c58d2018-05-16 07:07:07 -04002129<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002130## setEmbeddedBitmapText
2131
Cary Clark682c58d2018-05-16 07:07:07 -04002132<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2133void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04002134</pre>
2135
2136Requests, but does not require, to use bitmaps in fonts instead of outlines.
2137
Cary Clark682c58d2018-05-16 07:07:07 -04002138Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
2139Clears <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04002140
2141### Parameters
2142
Cary Clark682c58d2018-05-16 07:07:07 -04002143<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
2144 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002145 </tr>
2146</table>
2147
2148### Example
2149
2150<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
2151
2152#### Example Output
2153
2154~~~~
2155paint1 == paint2
2156~~~~
2157
2158</fiddle-embed></div>
2159
2160---
2161
Cary Clark682c58d2018-05-16 07:07:07 -04002162## <a name='Automatic_Hinting'>Automatic Hinting</a>
Cary Clark08895c42018-02-01 09:37:32 -05002163
Cary Clark682c58d2018-05-16 07:07:07 -04002164If <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, <a href='#Automatic_Hinting'>Automatic Hinting</a>
2165instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2166<a href='#Automatic_Hinting'>Automatic Hinting</a> has no effect if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> or
2167<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002168
Cary Clark682c58d2018-05-16 07:07:07 -04002169<a href='#Automatic_Hinting'>Automatic Hinting</a> only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002170
Cary Clark682c58d2018-05-16 07:07:07 -04002171<a name='SkPaint_isAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002172## isAutohinted
2173
Cary Clark682c58d2018-05-16 07:07:07 -04002174<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2175bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002176</pre>
2177
Cary Clark80247e52018-07-11 16:18:41 -04002178Returns true if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, and if
2179platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>. If true, instructs
2180the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002181
Cary Clark682c58d2018-05-16 07:07:07 -04002182Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002183
2184### Return Value
2185
Cary Clark682c58d2018-05-16 07:07:07 -04002186<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002187
2188### Example
2189
2190<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
2191
2192#### Example Output
2193
2194~~~~
2195paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2196paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2197~~~~
2198
2199</fiddle-embed></div>
2200
2201### See Also
2202
Cary Clark682c58d2018-05-16 07:07:07 -04002203<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002204
2205---
2206
Cary Clark682c58d2018-05-16 07:07:07 -04002207<a name='SkPaint_setAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002208## setAutohinted
2209
Cary Clark682c58d2018-05-16 07:07:07 -04002210<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2211void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04002212</pre>
2213
Cary Clark80247e52018-07-11 16:18:41 -04002214Sets whether to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002215If <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> and <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is set,
Cary Clark80247e52018-07-11 16:18:41 -04002216instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002217<a href='#Automatic_Hinting'>Automatic Hinting</a> has no effect if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> or
2218<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002219
Cary Clark682c58d2018-05-16 07:07:07 -04002220Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002221
Cary Clark682c58d2018-05-16 07:07:07 -04002222Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
2223Clears <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04002224
2225### Parameters
2226
Cary Clark682c58d2018-05-16 07:07:07 -04002227<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
2228 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002229 </tr>
2230</table>
2231
2232### Example
2233
2234<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
2235
2236### See Also
2237
Cary Clark682c58d2018-05-16 07:07:07 -04002238<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002239
2240---
2241
Cary Clark682c58d2018-05-16 07:07:07 -04002242## <a name='Vertical_Text'>Vertical Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05002243
Cary Clark682c58d2018-05-16 07:07:07 -04002244<a href='undocumented#Text'>Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
2245using <a href='undocumented#Advance'>Font Advance</a> to position subsequent <a href='undocumented#Glyph'>Glyphs</a>. By default, each successive glyph
2246is positioned to the right of the preceding glyph. <a href='#Vertical_Text'>Vertical Text</a> sets successive
2247<a href='undocumented#Glyph'>Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04002248
Cary Clark682c58d2018-05-16 07:07:07 -04002249Skia can translate text character codes as a series of <a href='undocumented#Glyph'>Glyphs</a>, but does not implement
Cary Clark7cfcbca2018-01-04 16:11:51 -05002250font substitution,
Cary Clark137b8742018-05-30 09:21:49 -04002251textual substitution, line layout, or contextual spacing like <a href='undocumented#Kerning'>Kerning</a> pairs. Use
Cary Clark682c58d2018-05-16 07:07:07 -04002252a text shaping engine like <a href='https://harfbuzz.org/'>HarfBuzz</a></a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04002253into glyph series.
2254
Cary Clark682c58d2018-05-16 07:07:07 -04002255<a href='#Vertical_Text'>Vertical Text</a> is clear if text is drawn left to right or set if drawn from top to bottom.
Cary Clark12799e12017-07-28 15:18:29 -04002256
Cary Clark682c58d2018-05-16 07:07:07 -04002257<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if clear draws text left to right.
2258<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if set draws text top to bottom.
Cary Clark12799e12017-07-28 15:18:29 -04002259
Cary Clark682c58d2018-05-16 07:07:07 -04002260<a href='#Vertical_Text'>Vertical Text</a> is clear by default.
2261<a href='#Vertical_Text'>Vertical Text</a> can be set by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
2262<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002263
2264### Example
2265
2266<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
2267
Cary Clark682c58d2018-05-16 07:07:07 -04002268<a name='SkPaint_isVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002269## isVerticalText
2270
Cary Clark682c58d2018-05-16 07:07:07 -04002271<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2272bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002273</pre>
2274
Cary Clark80247e52018-07-11 16:18:41 -04002275Returns true if <a href='undocumented#Glyph'>Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04002276
Cary Clark682c58d2018-05-16 07:07:07 -04002277Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002278
2279### Return Value
2280
Cary Clark682c58d2018-05-16 07:07:07 -04002281<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002282
2283### Example
2284
2285<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
2286
2287#### Example Output
2288
2289~~~~
2290paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2291paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2292~~~~
2293
2294</fiddle-embed></div>
2295
2296---
2297
Cary Clark682c58d2018-05-16 07:07:07 -04002298<a name='SkPaint_setVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002299## setVerticalText
2300
Cary Clark682c58d2018-05-16 07:07:07 -04002301<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2302void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText)
Cary Clark12799e12017-07-28 15:18:29 -04002303</pre>
2304
Cary Clark80247e52018-07-11 16:18:41 -04002305Returns true if text advance positions the next glyph below the previous glyph instead of to the
Cary Clark12799e12017-07-28 15:18:29 -04002306right of previous glyph.
2307
Cary Clark682c58d2018-05-16 07:07:07 -04002308Sets <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is true.
2309Clears <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04002310
2311### Parameters
2312
Cary Clark682c58d2018-05-16 07:07:07 -04002313<table> <tr> <td><a name='SkPaint_setVerticalText_verticalText'><code><strong>verticalText</strong></code></a></td>
2314 <td>setting for <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002315 </tr>
2316</table>
2317
2318### Example
2319
2320<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
2321
2322#### Example Output
2323
2324~~~~
2325paint1 == paint2
2326~~~~
2327
2328</fiddle-embed></div>
2329
2330---
2331
Cary Clark682c58d2018-05-16 07:07:07 -04002332## <a name='Fake_Bold'>Fake Bold</a>
Cary Clark08895c42018-02-01 09:37:32 -05002333
Cary Clark682c58d2018-05-16 07:07:07 -04002334<a href='#Fake_Bold'>Fake Bold</a> approximates the bold font style accompanying a normal font when a bold font face
Cary Clark7cfcbca2018-01-04 16:11:51 -05002335is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04002336bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002337
Cary Clark682c58d2018-05-16 07:07:07 -04002338Use <a href='#Text_Skew_X'>Text Skew X</a> to approximate an italic font style when the italic font face
Cary Clark12799e12017-07-28 15:18:29 -04002339is not available.
2340
Cary Clark7cfcbca2018-01-04 16:11:51 -05002341A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04002342the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
2343by increasing the stroke width and setting the <a href='#SkPaint_Style'>Style</a> to <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a> as needed.
Cary Clark12799e12017-07-28 15:18:29 -04002344
Cary Clark682c58d2018-05-16 07:07:07 -04002345<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04002346
2347### Example
2348
2349<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
2350
Cary Clark682c58d2018-05-16 07:07:07 -04002351<a name='SkPaint_isFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002352## isFakeBoldText
2353
Cary Clark682c58d2018-05-16 07:07:07 -04002354<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2355bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002356</pre>
2357
Cary Clark80247e52018-07-11 16:18:41 -04002358Returns true if approximate bold by increasing the stroke width when creating glyph bitmaps
Cary Clark12799e12017-07-28 15:18:29 -04002359from outlines.
2360
Cary Clark682c58d2018-05-16 07:07:07 -04002361Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002362
2363### Return Value
2364
Cary Clark682c58d2018-05-16 07:07:07 -04002365<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002366
2367### Example
2368
2369<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
2370
2371#### Example Output
2372
2373~~~~
2374paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2375paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2376~~~~
2377
2378</fiddle-embed></div>
2379
2380---
2381
Cary Clark682c58d2018-05-16 07:07:07 -04002382<a name='SkPaint_setFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002383## setFakeBoldText
2384
Cary Clark682c58d2018-05-16 07:07:07 -04002385<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2386void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04002387</pre>
2388
Cary Clark80247e52018-07-11 16:18:41 -04002389Increases stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04002390
Cary Clark682c58d2018-05-16 07:07:07 -04002391Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
2392Clears <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04002393
2394### Parameters
2395
Cary Clark682c58d2018-05-16 07:07:07 -04002396<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
2397 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002398 </tr>
2399</table>
2400
2401### Example
2402
2403<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
2404
2405#### Example Output
2406
2407~~~~
2408paint1 == paint2
2409~~~~
2410
2411</fiddle-embed></div>
2412
2413---
2414
Cary Clark682c58d2018-05-16 07:07:07 -04002415## <a name='Full_Hinting_Spacing'>Full Hinting Spacing</a>
Cary Clark08895c42018-02-01 09:37:32 -05002416
Cary Clark682c58d2018-05-16 07:07:07 -04002417if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> adjusts the character
Cary Clark137b8742018-05-30 09:21:49 -04002418spacing by the difference of the hinted and <a href='undocumented#Unhinted'>Unhinted</a> <a href='undocumented#Left_Side_Bearing'>Left Side Bearing</a> and
Cary Clark682c58d2018-05-16 07:07:07 -04002419<a href='undocumented#Right_Side_Bearing'>Right Side Bearing</a>. <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> only applies to platforms that use
2420FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002421
Cary Clark137b8742018-05-30 09:21:49 -04002422<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
2423a specific pair of characters is adjusted using data in the font <a href='undocumented#Kerning'>Kerning</a> tables.
Cary Clark12799e12017-07-28 15:18:29 -04002424
Cary Clark682c58d2018-05-16 07:07:07 -04002425<a name='SkPaint_isDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002426## isDevKernText
2427
Cary Clark682c58d2018-05-16 07:07:07 -04002428<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2429bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002430</pre>
2431
Cary Clark682c58d2018-05-16 07:07:07 -04002432Deprecated.
2433
Cary Clark12799e12017-07-28 15:18:29 -04002434---
2435
Cary Clark682c58d2018-05-16 07:07:07 -04002436<a name='SkPaint_setDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002437## setDevKernText
2438
Cary Clark682c58d2018-05-16 07:07:07 -04002439<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2440void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04002441</pre>
2442
Cary Clark682c58d2018-05-16 07:07:07 -04002443Deprecated.
2444
Cary Clark12799e12017-07-28 15:18:29 -04002445---
2446
Cary Clark682c58d2018-05-16 07:07:07 -04002447## <a name='Filter_Quality_Methods'>Filter Quality Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05002448
Cary Clark682c58d2018-05-16 07:07:07 -04002449<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
2450A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
2451A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
2452If the image is drawn without scaling, the <a href='undocumented#Filter_Quality'>Filter Quality</a> choice will not result
Cary Clarkce101242017-09-01 15:51:02 -04002453in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04002454
Cary Clark682c58d2018-05-16 07:07:07 -04002455<a href='undocumented#Filter_Quality'>Filter Quality</a> is used in <a href='#Paint'>Paint</a> passed as a parameter to
Cary Clark12799e12017-07-28 15:18:29 -04002456
2457<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002458 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
2459 </tr> <tr>
2460 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
2461 </tr> <tr>
2462 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
2463 </tr> <tr>
2464 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
2465 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002466</table>
2467
Cary Clark682c58d2018-05-16 07:07:07 -04002468and when <a href='#Paint'>Paint</a> has a <a href='undocumented#Shader'>Shader</a> specialization that uses <a href='SkImage_Reference#Image'>Image</a> or <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002469
Cary Clark682c58d2018-05-16 07:07:07 -04002470<a href='undocumented#Filter_Quality'>Filter Quality</a> is <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04002471
2472### Example
2473
skia-bookmaker525f9a92018-05-03 06:27:39 +00002474<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002475
Cary Clark682c58d2018-05-16 07:07:07 -04002476<a name='SkPaint_getFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002477## getFilterQuality
2478
Cary Clark682c58d2018-05-16 07:07:07 -04002479<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2480<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002481</pre>
2482
Cary Clark682c58d2018-05-16 07:07:07 -04002483Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002484draws faster; a higher setting looks better when the image is scaled.
2485
2486### Return Value
2487
Cary Clark682c58d2018-05-16 07:07:07 -04002488one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2489<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04002490
2491### Example
2492
2493<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
2494
2495#### Example Output
2496
2497~~~~
2498kNone_SkFilterQuality == paint.getFilterQuality()
2499~~~~
2500
2501</fiddle-embed></div>
2502
2503---
2504
Cary Clark682c58d2018-05-16 07:07:07 -04002505<a name='SkPaint_setFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002506## setFilterQuality
2507
Cary Clark682c58d2018-05-16 07:07:07 -04002508<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2509void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04002510</pre>
2511
Cary Clark682c58d2018-05-16 07:07:07 -04002512Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002513draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04002514Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04002515
2516### Parameters
2517
Cary Clark682c58d2018-05-16 07:07:07 -04002518<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
2519 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2520<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002521 </tr>
2522</table>
2523
2524### Example
2525
2526<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
2527
2528#### Example Output
2529
2530~~~~
2531kHigh_SkFilterQuality == paint.getFilterQuality()
2532~~~~
2533
2534</fiddle-embed></div>
2535
2536### See Also
2537
Cary Clark682c58d2018-05-16 07:07:07 -04002538<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04002539
2540---
2541
Cary Clark682c58d2018-05-16 07:07:07 -04002542## <a name='Color_Methods'>Color Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002543
Cary Clarkab2621d2018-01-30 10:08:57 -05002544| name | description |
2545| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04002546| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
2547| <a href='#SkPaint_setColor'>setColor</a> | sets <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
Cary Clark12799e12017-07-28 15:18:29 -04002548
Cary Clarkffb3d682018-05-17 12:17:28 -04002549<a href='SkColor_Reference#Color'>Color</a> specifies the red, blue, green, and <a href='SkColor_Reference#Alpha'>Color Alpha</a>
Cary Clarkab2621d2018-01-30 10:08:57 -05002550values used to draw a filled or stroked shape in a 32-bit value. Each component
2551occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
2552All values in any combination are valid.
2553
Cary Clark682c58d2018-05-16 07:07:07 -04002554<a href='SkColor_Reference#Color'>Color</a> is not <a href='undocumented#Premultiply'>Premultiplied</a>; <a href='SkColor_Reference#Alpha'>Color Alpha</a> sets the transparency independent of
Cary Clarkffb3d682018-05-17 12:17:28 -04002555RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05002556
Cary Clarkffb3d682018-05-17 12:17:28 -04002557The bit positions of <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB are independent of the bit
Cary Clarkab2621d2018-01-30 10:08:57 -05002558positions on the output device, which may have more or fewer bits, and may have
2559a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04002560
Cary Clarkffb3d682018-05-17 12:17:28 -04002561| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04002562| --- | --- | --- | --- | --- |
2563| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
2564
2565### Example
2566
Ravi Mistry874e22b2018-07-19 03:49:13 +00002567<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002568
Cary Clark682c58d2018-05-16 07:07:07 -04002569<a name='SkPaint_getColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002570## getColor
2571
Cary Clark682c58d2018-05-16 07:07:07 -04002572<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2573<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002574</pre>
2575
Cary Clarkffb3d682018-05-17 12:17:28 -04002576Retrieves <a href='SkColor_Reference#Alpha'>Alpha</a> and RGB, <a href='undocumented#Unpremultiply'>Unpremultiplied</a>, packed into 32 bits.
Cary Clark682c58d2018-05-16 07:07:07 -04002577Use helpers <a href='SkColor_Reference#SkColorGetA'>SkColorGetA</a>, <a href='SkColor_Reference#SkColorGetR'>SkColorGetR</a>, <a href='SkColor_Reference#SkColorGetG'>SkColorGetG</a>, and <a href='SkColor_Reference#SkColorGetB'>SkColorGetB</a> to extract
Cary Clark12799e12017-07-28 15:18:29 -04002578a color component.
2579
2580### Return Value
2581
Cary Clarkffb3d682018-05-17 12:17:28 -04002582<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04002583
2584### Example
2585
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002586<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
Cary Clark12799e12017-07-28 15:18:29 -04002587
2588#### Example Output
2589
2590~~~~
2591Yellow is 100% red, 100% green, and 0% blue.
2592~~~~
2593
2594</fiddle-embed></div>
2595
2596### See Also
2597
Cary Clarkbbe8ff92018-09-05 11:39:01 -04002598<a href='#SkPaint_getColor4f'>getColor4f</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
2599
2600---
2601
2602<a name='SkPaint_getColor4f'></a>
2603## getColor4f
2604
2605<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2606<a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a> <a href='#SkPaint_getColor4f'>getColor4f</a>() const
2607</pre>
2608
2609Retrieves alpha and RGB, unpmreultiplied, as four floating point values. RGB are
2610are extended sRGB values (sRGB gamut, and encoded with the sRGB transfer function).
2611
2612### Return Value
2613
2614<a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA
2615
2616### Example
2617
2618<div><fiddle-embed name="8512ea2176f36e8f1aeef311ff228790">
2619
2620#### Example Output
2621
2622~~~~
2623Yellow is 100% red, 100% green, and 0% blue.
2624~~~~
2625
2626</fiddle-embed></div>
2627
2628### See Also
2629
2630<a href='#SkPaint_getColor'>getColor</a> <a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04002631
2632---
2633
Cary Clark682c58d2018-05-16 07:07:07 -04002634<a name='SkPaint_setColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002635## setColor
2636
Cary Clark682c58d2018-05-16 07:07:07 -04002637<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2638void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04002639</pre>
2640
Cary Clarkffb3d682018-05-17 12:17:28 -04002641Sets <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,
2642<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 -04002643
2644### Parameters
2645
Cary Clark682c58d2018-05-16 07:07:07 -04002646<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002647 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04002648 </tr>
2649</table>
2650
2651### Example
2652
skia-bookmaker233c6522018-07-04 05:33:26 +00002653<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04002654
2655#### Example Output
2656
2657~~~~
2658green1 == green2
2659~~~~
2660
2661</fiddle-embed></div>
2662
2663### See Also
2664
Cary Clarkbbe8ff92018-09-05 11:39:01 -04002665<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setColor4f'>setColor4f</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
2666
2667---
2668
2669<a name='SkPaint_setColor4f'></a>
2670## setColor4f
2671
2672<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2673void <a href='#SkPaint_setColor4f'>setColor4f</a>(const <a href='SkColor4f_Reference#SkColor4f'>SkColor4f</a>& color, <a href='undocumented#SkColorSpace'>SkColorSpace</a>* colorSpace)
2674</pre>
2675
2676Sets alpha and RGB used when stroking and filling. The <a href='#SkPaint_setColor4f_color'>color</a> is four floating
2677point values, unpremultiplied. The <a href='#SkPaint_setColor4f_color'>color</a> values are interpreted as being in
2678the <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a>. If <a href='#SkPaint_setColor4f_colorSpace'>colorSpace</a> is nullptr, then <a href='#SkPaint_setColor4f_color'>color</a> is assumed to be in the
2679sRGB <a href='#SkPaint_setColor4f_color'>color</a> space.
2680
2681### Parameters
2682
2683<table> <tr> <td><a name='SkPaint_setColor4f_color'><code><strong>color</strong></code></a></td>
2684 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> RGBA</td>
2685 </tr>
2686 <tr> <td><a name='SkPaint_setColor4f_colorSpace'><code><strong>colorSpace</strong></code></a></td>
2687 <td><a href='undocumented#Color_Space'>Color Space</a> describing the encoding of <a href='#SkPaint_setColor4f_color'>color</a></td>
2688 </tr>
2689</table>
2690
2691### Example
2692
2693<div><fiddle-embed name="fa60859e3d03bdc117a05b32e093a8f1">
2694
2695#### Example Output
2696
2697~~~~
2698green1 == green2
2699~~~~
2700
2701</fiddle-embed></div>
2702
2703### See Also
2704
2705<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setColor'>setColor</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002706
2707---
2708
Cary Clark682c58d2018-05-16 07:07:07 -04002709## <a name='Alpha_Methods'>Alpha Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002710
Cary Clarkffb3d682018-05-17 12:17:28 -04002711<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 -04002712
Cary Clark682c58d2018-05-16 07:07:07 -04002713<a name='SkPaint_getAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002714## getAlpha
2715
Cary Clark682c58d2018-05-16 07:07:07 -04002716<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2717uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002718</pre>
2719
Cary Clark682c58d2018-05-16 07:07:07 -04002720Retrieves <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 -04002721
2722### Return Value
2723
Cary Clark682c58d2018-05-16 07:07:07 -04002724<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04002725
2726### Example
2727
Cary Clark83647062018-07-18 16:21:51 -04002728<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
Cary Clark12799e12017-07-28 15:18:29 -04002729
2730#### Example Output
2731
2732~~~~
2733255 == paint.getAlpha()
2734~~~~
2735
2736</fiddle-embed></div>
2737
2738---
2739
Cary Clark682c58d2018-05-16 07:07:07 -04002740<a name='SkPaint_setAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002741## setAlpha
2742
Cary Clark682c58d2018-05-16 07:07:07 -04002743<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2744void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04002745</pre>
2746
Cary Clarkffb3d682018-05-17 12:17:28 -04002747Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04002748unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04002749build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
2750<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 -04002751fully opaque.
2752
2753### Parameters
2754
Cary Clark682c58d2018-05-16 07:07:07 -04002755<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
2756 <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 -04002757 </tr>
2758</table>
2759
2760### Example
2761
Ravi Mistry874e22b2018-07-19 03:49:13 +00002762<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
Cary Clark12799e12017-07-28 15:18:29 -04002763
2764#### Example Output
2765
2766~~~~
27670x44112233 == paint.getColor()
2768~~~~
2769
2770</fiddle-embed></div>
2771
2772---
2773
Cary Clark682c58d2018-05-16 07:07:07 -04002774<a name='SkPaint_setARGB'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002775## setARGB
2776
Cary Clark682c58d2018-05-16 07:07:07 -04002777<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2778void <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 -04002779</pre>
2780
Cary Clark682c58d2018-05-16 07:07:07 -04002781Sets <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 -04002782The 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 -04002783
2784### Parameters
2785
Cary Clark682c58d2018-05-16 07:07:07 -04002786<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2787 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2788 </tr>
2789 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002790 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002791 </tr>
2792 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002793 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002794 </tr>
2795 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002796 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002797 </tr>
2798</table>
2799
2800### Example
2801
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00002802<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
Cary Clark12799e12017-07-28 15:18:29 -04002803
2804#### Example Output
2805
2806~~~~
2807transRed1 == transRed2
2808~~~~
2809
2810</fiddle-embed></div>
2811
2812### See Also
2813
Cary Clark682c58d2018-05-16 07:07:07 -04002814<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002815
2816---
2817
Cary Clark682c58d2018-05-16 07:07:07 -04002818## <a name='Style'>Style</a>
Cary Clark08895c42018-02-01 09:37:32 -05002819
Cary Clark682c58d2018-05-16 07:07:07 -04002820<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2821Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002822
Cary Clark682c58d2018-05-16 07:07:07 -04002823Set <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 -04002824The fill covers the area inside the geometry for most shapes.
2825
Cary Clark682c58d2018-05-16 07:07:07 -04002826Set <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 -04002827
Cary Clark682c58d2018-05-16 07:07:07 -04002828## <a name='Style_Fill'>Style Fill</a>
Cary Clark12799e12017-07-28 15:18:29 -04002829
2830### See Also
2831
Cary Clark682c58d2018-05-16 07:07:07 -04002832<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002833
Cary Clark682c58d2018-05-16 07:07:07 -04002834## <a name='Style_Stroke'>Style Stroke</a>
Cary Clark12799e12017-07-28 15:18:29 -04002835
Cary Clarkbc5697d2017-10-04 14:31:33 -04002836The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002837<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>.
2838The 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 -04002839The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002840
Cary Clark682c58d2018-05-16 07:07:07 -04002841As <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
2842may 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 -04002843
Cary Clark682c58d2018-05-16 07:07:07 -04002844## <a name='Style_Hairline'>Style Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002845
Cary Clark682c58d2018-05-16 07:07:07 -04002846<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Style_Hairline'>Hairline</a>.
2847<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 -05002848flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002849
Cary Clark682c58d2018-05-16 07:07:07 -04002850<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
2851two 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
2852pixel. 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 -05002853GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002854while stroking.
2855
Cary Clark682c58d2018-05-16 07:07:07 -04002856## <a name='SkPaint_Style'>Enum SkPaint::Style</a>
Cary Clark12799e12017-07-28 15:18:29 -04002857
Cary Clarka560c472017-11-27 10:44:06 -05002858<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002859 enum <a href='#SkPaint_Style'>Style</a> {
2860 <a href='#SkPaint_kFill_Style'>kFill Style</a>,
2861 <a href='#SkPaint_kStroke_Style'>kStroke Style</a>,
2862 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002863 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002864
Cary Clark682c58d2018-05-16 07:07:07 -04002865 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 -05002866</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002867
Cary Clark682c58d2018-05-16 07:07:07 -04002868Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002869The stroke and fill
2870share all paint attributes; for instance, they are drawn with the same color.
2871
Cary Clark682c58d2018-05-16 07:07:07 -04002872Use <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 -04002873a fill draw.
2874
2875### Constants
2876
Cary Clark682c58d2018-05-16 07:07:07 -04002877<table style='border-collapse: collapse; width: 62.5em'>
2878 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2879<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2880<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2881 <tr style='background-color: #f0f0f0; '>
2882 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2883 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002885Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
2886<a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkImage_Reference#Image'>Image</a>, <a href='undocumented#Patch'>Patches</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='undocumented#Sprite'>Sprites</a>, and <a href='undocumented#Vertices'>Vertices</a> are painted as if
Cary Clark682c58d2018-05-16 07:07:07 -04002887<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2888The <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 -04002889and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002890<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 -05002891</td>
Cary Clark12799e12017-07-28 15:18:29 -04002892 </tr>
2893 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002894 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2895 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2896 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002897Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002898<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,
2899and ignore the set <a href='#SkPaint_Style'>Style</a>.
2900The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2901</td>
2902 </tr>
2903 <tr style='background-color: #f0f0f0; '>
2904 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2905 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2906 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkd2ca79c2018-08-10 13:09:13 -04002907Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='SkRegion_Reference#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002908<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>,
2909and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002910</td>
Cary Clark12799e12017-07-28 15:18:29 -04002911 </tr>
2912 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002913 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2914 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2915 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2916May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002917</td>
Cary Clark12799e12017-07-28 15:18:29 -04002918 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002919</table>
Cary Clark12799e12017-07-28 15:18:29 -04002920
Cary Clark682c58d2018-05-16 07:07:07 -04002921<a name='SkPaint_getStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002922## getStyle
2923
Cary Clark682c58d2018-05-16 07:07:07 -04002924<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2925<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002926</pre>
2927
Cary Clark80247e52018-07-11 16:18:41 -04002928Returns whether the geometry is filled, stroked, or filled and stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002929
2930### Return Value
2931
Cary Clark682c58d2018-05-16 07:07:07 -04002932one 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 -04002933
2934### Example
2935
2936<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2937
2938#### Example Output
2939
2940~~~~
2941SkPaint::kFill_Style == paint.getStyle()
2942~~~~
2943
2944</fiddle-embed></div>
2945
2946### See Also
2947
Cary Clark682c58d2018-05-16 07:07:07 -04002948<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002949
2950---
2951
Cary Clark682c58d2018-05-16 07:07:07 -04002952<a name='SkPaint_setStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002953## setStyle
2954
Cary Clark682c58d2018-05-16 07:07:07 -04002955<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2956void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002957</pre>
2958
2959Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002960Has 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 -04002961
2962### Parameters
2963
Cary Clark682c58d2018-05-16 07:07:07 -04002964<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2965 <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 -04002966 </tr>
2967</table>
2968
2969### Example
2970
2971<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2972
2973### See Also
2974
Cary Clark682c58d2018-05-16 07:07:07 -04002975<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002976
2977---
2978
2979### See Also
2980
Cary Clark682c58d2018-05-16 07:07:07 -04002981<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 -04002982
Cary Clark682c58d2018-05-16 07:07:07 -04002983## <a name='Stroke_Width'>Stroke Width</a>
Cary Clark08895c42018-02-01 09:37:32 -05002984
Cary Clark682c58d2018-05-16 07:07:07 -04002985<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002986of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002987set 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 -04002988
2989When width is greater than zero, the stroke encompasses as many pixels partially
2990or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002991the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002992
Cary Clark682c58d2018-05-16 07:07:07 -04002993The stroke dimensions are scaled by the canvas matrix, but <a href='#Style_Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002994remains one pixel wide regardless of scaling.
2995
2996The default width for the paint is zero.
2997
2998### Example
2999
skia-bookmaker525f9a92018-05-03 06:27:39 +00003000<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 -05003001line and the platform implementation.
3002</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003003
Cary Clark682c58d2018-05-16 07:07:07 -04003004<a name='SkPaint_getStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003005## getStrokeWidth
3006
Cary Clark682c58d2018-05-16 07:07:07 -04003007<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3008<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003009</pre>
3010
Cary Clark682c58d2018-05-16 07:07:07 -04003011Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04003012outline the shape.
3013
3014### Return Value
3015
Cary Clark682c58d2018-05-16 07:07:07 -04003016zero for <a href='#Style_Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04003017
3018### Example
3019
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003020<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04003021
3022#### Example Output
3023
3024~~~~
30250 == paint.getStrokeWidth()
3026~~~~
3027
3028</fiddle-embed></div>
3029
3030---
3031
Cary Clark682c58d2018-05-16 07:07:07 -04003032<a name='SkPaint_setStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003033## setStrokeWidth
3034
Cary Clark682c58d2018-05-16 07:07:07 -04003035<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3036void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04003037</pre>
3038
3039Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05003040outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04003041Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04003042
3043### Parameters
3044
Cary Clark682c58d2018-05-16 07:07:07 -04003045<table> <tr> <td><a name='SkPaint_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
3046 <td>zero thickness for <a href='#Style_Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04003047 </tr>
3048</table>
3049
3050### Example
3051
3052<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
3053
3054#### Example Output
3055
3056~~~~
30575 == paint.getStrokeWidth()
3058~~~~
3059
3060</fiddle-embed></div>
3061
3062---
3063
Cary Clark682c58d2018-05-16 07:07:07 -04003064## <a name='Miter_Limit'>Miter Limit</a>
Cary Clark08895c42018-02-01 09:37:32 -05003065
Cary Clark682c58d2018-05-16 07:07:07 -04003066<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04003067relative to the stroke width.
3068
Cary Clark682c58d2018-05-16 07:07:07 -04003069<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
3070is 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>
3071or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003072
Cary Clark682c58d2018-05-16 07:07:07 -04003073If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
3074is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003075
Cary Clark682c58d2018-05-16 07:07:07 -04003076<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04003077
Cary Clark682c58d2018-05-16 07:07:07 -04003078miter limit = 1 / sin ( angle / 2 )<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
3079The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003080in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04003081
3082Here are some miter limits and the angles that triggers them.
3083
3084| miter limit | angle in degrees |
3085| --- | --- |
3086| 10 | 11.48 |
3087| 9 | 12.76 |
3088| 8 | 14.36 |
3089| 7 | 16.43 |
3090| 6 | 19.19 |
3091| 5 | 23.07 |
3092| 4 | 28.96 |
3093| 3 | 38.94 |
3094| 2 | 60 |
3095| 1 | 180 |
3096
3097### Example
3098
Cary Clarka619d452018-07-16 08:12:01 -04003099<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
Cary Clark12799e12017-07-28 15:18:29 -04003100When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05003101by a bevel join.
3102</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003103
Cary Clark682c58d2018-05-16 07:07:07 -04003104<a name='SkPaint_getStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003105## getStrokeMiter
3106
Cary Clark682c58d2018-05-16 07:07:07 -04003107<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3108<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003109</pre>
3110
Cary Clark80247e52018-07-11 16:18:41 -04003111Returns the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04003112
3113### Return Value
3114
Cary Clark682c58d2018-05-16 07:07:07 -04003115zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003116
3117### Example
3118
3119<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
3120
3121#### Example Output
3122
3123~~~~
3124default miter limit == 4
3125~~~~
3126
3127</fiddle-embed></div>
3128
3129### See Also
3130
Cary Clark682c58d2018-05-16 07:07:07 -04003131<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 -04003132
3133---
3134
Cary Clark682c58d2018-05-16 07:07:07 -04003135<a name='SkPaint_setStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003136## setStrokeMiter
3137
Cary Clark682c58d2018-05-16 07:07:07 -04003138<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3139void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04003140</pre>
3141
Cary Clark80247e52018-07-11 16:18:41 -04003142Sets the limit at which a sharp corner is drawn beveled.
Cary Clark12799e12017-07-28 15:18:29 -04003143Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04003144Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04003145
3146### Parameters
3147
Cary Clark682c58d2018-05-16 07:07:07 -04003148<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
3149 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003150 </tr>
3151</table>
3152
3153### Example
3154
skia-bookmakera717ca92018-07-08 05:32:09 +00003155<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04003156
3157#### Example Output
3158
3159~~~~
3160default miter limit == 8
3161~~~~
3162
3163</fiddle-embed></div>
3164
3165### See Also
3166
Cary Clark682c58d2018-05-16 07:07:07 -04003167<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 -04003168
3169---
3170
Cary Clark682c58d2018-05-16 07:07:07 -04003171## <a name='Stroke_Cap'>Stroke Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003172
Cary Clark682c58d2018-05-16 07:07:07 -04003173## <a name='SkPaint_Cap'>Enum SkPaint::Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003174
Cary Clarka560c472017-11-27 10:44:06 -05003175<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003176 enum <a href='#SkPaint_Cap'>Cap</a> {
3177 <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
3178 <a href='#SkPaint_kRound_Cap'>kRound Cap</a>,
3179 <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003180
Cary Clark682c58d2018-05-16 07:07:07 -04003181 <a href='#SkPaint_kLast_Cap'>kLast Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
3182 <a href='#SkPaint_kDefault_Cap'>kDefault Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003183 };
Cary Clark6fc50412017-09-21 12:31:06 -04003184
Cary Clark682c58d2018-05-16 07:07:07 -04003185 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 -05003186</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003187
Cary Clark682c58d2018-05-16 07:07:07 -04003188<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 -04003189
3190### Constants
3191
Cary Clark682c58d2018-05-16 07:07:07 -04003192<table style='border-collapse: collapse; width: 62.5em'>
3193 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3194<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3195<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3196 <tr style='background-color: #f0f0f0; '>
3197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
3198 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3199 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3200Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05003201</td>
Cary Clark12799e12017-07-28 15:18:29 -04003202 </tr>
3203 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003204 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
3205 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3206 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3207Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05003208and end.
3209</td>
Cary Clark12799e12017-07-28 15:18:29 -04003210 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003211 <tr style='background-color: #f0f0f0; '>
3212 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
3213 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3214 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3215Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04003216and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05003217of the stroke.
3218</td>
Cary Clark12799e12017-07-28 15:18:29 -04003219 </tr>
3220 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003221 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
3222 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3223 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3224Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
3225</td>
3226 </tr>
3227 <tr style='background-color: #f0f0f0; '>
3228 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
3229 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3230 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3231<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 -05003232</td>
Cary Clark12799e12017-07-28 15:18:29 -04003233 </tr>
3234 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003235 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
3236 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3237 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3238May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003239</td>
Cary Clark12799e12017-07-28 15:18:29 -04003240 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003241</table>
Cary Clark12799e12017-07-28 15:18:29 -04003242
Cary Clark682c58d2018-05-16 07:07:07 -04003243Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3244follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003245
Cary Clark682c58d2018-05-16 07:07:07 -04003246If 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 -04003247visible beginning and end.
3248
Cary Clark682c58d2018-05-16 07:07:07 -04003249<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 -04003250
Cary Clark682c58d2018-05-16 07:07:07 -04003251<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Reference#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
3252<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 -04003253at the contour point.
Cary Clark682c58d2018-05-16 07:07:07 -04003254<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
3255<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04003256
Cary Clark682c58d2018-05-16 07:07:07 -04003257<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 -04003258
Cary Clark12799e12017-07-28 15:18:29 -04003259### Example
3260
Cary Clark2ade9972017-11-02 17:49:34 -04003261<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003262
Cary Clark682c58d2018-05-16 07:07:07 -04003263<a name='SkPaint_getStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003264## getStrokeCap
3265
Cary Clark682c58d2018-05-16 07:07:07 -04003266<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3267<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003268</pre>
3269
Cary Clark80247e52018-07-11 16:18:41 -04003270Returns the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003271
3272### Return Value
3273
Cary Clark682c58d2018-05-16 07:07:07 -04003274one 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 -04003275
3276### Example
3277
3278<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
3279
3280#### Example Output
3281
3282~~~~
3283kButt_Cap == default stroke cap
3284~~~~
3285
3286</fiddle-embed></div>
3287
3288### See Also
3289
Cary Clark682c58d2018-05-16 07:07:07 -04003290<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003291
3292---
3293
Cary Clark682c58d2018-05-16 07:07:07 -04003294<a name='SkPaint_setStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003295## setStrokeCap
3296
Cary Clark682c58d2018-05-16 07:07:07 -04003297<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3298void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04003299</pre>
3300
Cary Clark80247e52018-07-11 16:18:41 -04003301Sets the geometry drawn at the beginning and end of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003302
3303### Parameters
3304
Cary Clark682c58d2018-05-16 07:07:07 -04003305<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
3306 <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>;
3307has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04003308 </tr>
3309</table>
3310
3311### Example
3312
3313<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
3314
3315#### Example Output
3316
3317~~~~
3318kRound_Cap == paint.getStrokeCap()
3319~~~~
3320
3321</fiddle-embed></div>
3322
3323### See Also
3324
Cary Clark682c58d2018-05-16 07:07:07 -04003325<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003326
3327---
3328
Cary Clark682c58d2018-05-16 07:07:07 -04003329## <a name='Stroke_Join'>Stroke Join</a>
Cary Clark08895c42018-02-01 09:37:32 -05003330
Cary Clark682c58d2018-05-16 07:07:07 -04003331<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 -04003332
Cary Clark682c58d2018-05-16 07:07:07 -04003333Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3334follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003335
3336If the contour direction changes abruptly, because the tangent direction leading
3337to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04003338the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003339
3340### Example
3341
Cary Clark2ade9972017-11-02 17:49:34 -04003342<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003343
Cary Clark682c58d2018-05-16 07:07:07 -04003344## <a name='SkPaint_Join'>Enum SkPaint::Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04003345
Cary Clarka560c472017-11-27 10:44:06 -05003346<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003347 enum <a href='#SkPaint_Join'>Join</a> {
3348 <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
3349 <a href='#SkPaint_kRound_Join'>kRound Join</a>,
3350 <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003351
Cary Clark682c58d2018-05-16 07:07:07 -04003352 <a href='#SkPaint_kLast_Join'>kLast Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
3353 <a href='#SkPaint_kDefault_Join'>kDefault Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003354 };
Cary Clark6fc50412017-09-21 12:31:06 -04003355
Cary Clark682c58d2018-05-16 07:07:07 -04003356 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 -05003357</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003358
Cary Clark682c58d2018-05-16 07:07:07 -04003359<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 -04003360affects the four corners of a stroked rectangle, and the connected segments in a
3361stroked path.
3362
3363Choose miter join to draw sharp corners. Choose round join to draw a circle with a
3364radius equal to the stroke width on top of the corner. Choose bevel join to minimally
3365connect the thick strokes.
3366
Cary Clark7cfcbca2018-01-04 16:11:51 -05003367The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04003368not contain the actual join. For instance, a fill path constructed with round joins does
3369not necessarily include circles at each connected segment.
3370
3371### Constants
3372
Cary Clark682c58d2018-05-16 07:07:07 -04003373<table style='border-collapse: collapse; width: 62.5em'>
3374 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3375<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3376<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3377 <tr style='background-color: #f0f0f0; '>
3378 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
3379 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3380 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3381Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
3382If 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 -05003383</td>
Cary Clark12799e12017-07-28 15:18:29 -04003384 </tr>
3385 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003386 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
3387 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3388 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3389Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
3390</td>
3391 </tr>
3392 <tr style='background-color: #f0f0f0; '>
3393 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
3394 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3395 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3396Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05003397</td>
Cary Clark12799e12017-07-28 15:18:29 -04003398 </tr>
3399 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003400 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
3401 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3402 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3403equivalent to the largest value for Stroke_Join</td>
3404 </tr>
3405 <tr style='background-color: #f0f0f0; '>
3406 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
3407 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3408 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3409<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 -05003410</td>
Cary Clark12799e12017-07-28 15:18:29 -04003411 </tr>
3412 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003413 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
3414 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3415 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3416May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003417</td>
Cary Clark12799e12017-07-28 15:18:29 -04003418 </tr>
3419</table>
3420
3421### Example
3422
3423<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
3424
3425### See Also
3426
Cary Clark682c58d2018-05-16 07:07:07 -04003427<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 -04003428
Cary Clark682c58d2018-05-16 07:07:07 -04003429<a name='SkPaint_getStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003430## getStrokeJoin
3431
Cary Clark682c58d2018-05-16 07:07:07 -04003432<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3433<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003434</pre>
3435
Cary Clark80247e52018-07-11 16:18:41 -04003436Returns the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003437
3438### Return Value
3439
Cary Clark682c58d2018-05-16 07:07:07 -04003440one 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 -04003441
3442### Example
3443
Cary Clark7f644ec2018-07-19 10:50:44 -04003444<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04003445
3446#### Example Output
3447
3448~~~~
3449kMiter_Join == default stroke join
3450~~~~
3451
3452</fiddle-embed></div>
3453
3454### See Also
3455
Cary Clark682c58d2018-05-16 07:07:07 -04003456<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003457
3458---
3459
Cary Clark682c58d2018-05-16 07:07:07 -04003460<a name='SkPaint_setStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003461## setStrokeJoin
3462
Cary Clark682c58d2018-05-16 07:07:07 -04003463<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3464void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04003465</pre>
3466
Cary Clark80247e52018-07-11 16:18:41 -04003467Sets the geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003468
3469### Parameters
3470
Cary Clark682c58d2018-05-16 07:07:07 -04003471<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
3472 <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 -04003473otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04003474 </tr>
3475</table>
3476
3477### Example
3478
3479<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
3480
3481#### Example Output
3482
3483~~~~
3484kMiter_Join == paint.getStrokeJoin()
3485~~~~
3486
3487</fiddle-embed></div>
3488
3489### See Also
3490
Cary Clark682c58d2018-05-16 07:07:07 -04003491<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003492
3493---
3494
3495### See Also
3496
Cary Clark682c58d2018-05-16 07:07:07 -04003497<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003498
Cary Clark682c58d2018-05-16 07:07:07 -04003499## <a name='Fill_Path'>Fill Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05003500
Cary Clark682c58d2018-05-16 07:07:07 -04003501<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 -04003502
Cary Clark682c58d2018-05-16 07:07:07 -04003503If <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
3504replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
3505destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003506
Cary Clark682c58d2018-05-16 07:07:07 -04003507Fill <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
3508the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04003509
Cary Clark682c58d2018-05-16 07:07:07 -04003510If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
3511and <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>,
3512and <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 -04003513
Cary Clark682c58d2018-05-16 07:07:07 -04003514Fill <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 -04003515
Cary Clark682c58d2018-05-16 07:07:07 -04003516If 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>
3517returns false since <a href='#Style_Hairline'>Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04003518
Cary Clark682c58d2018-05-16 07:07:07 -04003519<a name='SkPaint_getFillPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003520## getFillPath
3521
Cary Clark682c58d2018-05-16 07:07:07 -04003522<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3523bool <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 -04003524</pre>
3525
Cary Clark80247e52018-07-11 16:18:41 -04003526Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04003527
3528### Parameters
3529
Cary Clark682c58d2018-05-16 07:07:07 -04003530<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
3531 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3532 </tr>
3533 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
3534 <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>
3535 </tr>
3536 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
3537 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
3538 </tr>
3539 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
3540 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04003541to favor speed and size</td>
3542 </tr>
3543</table>
3544
3545### Return Value
3546
Cary Clark682c58d2018-05-16 07:07:07 -04003547true 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 -04003548
3549### Example
3550
Cary Clark682c58d2018-05-16 07:07:07 -04003551<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.
3552At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05003553At the highest precision, the filled path has high fidelity compared to the original stroke.
3554</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003555
3556---
3557
Cary Clark682c58d2018-05-16 07:07:07 -04003558<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05003559
Cary Clark682c58d2018-05-16 07:07:07 -04003560<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3561bool <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 -04003562</pre>
3563
Cary Clark80247e52018-07-11 16:18:41 -04003564Returns the filled equivalent of the stroked path.
Cary Clark12799e12017-07-28 15:18:29 -04003565
Cary Clark682c58d2018-05-16 07:07:07 -04003566Replaces <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>.
3567<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 -04003568
3569### Parameters
3570
Cary Clark682c58d2018-05-16 07:07:07 -04003571<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
3572 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3573 </tr>
3574 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
3575 <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 -04003576 </tr>
3577</table>
3578
3579### Return Value
3580
Cary Clark682c58d2018-05-16 07:07:07 -04003581true 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 -04003582
3583### Example
3584
3585<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
3586
3587---
3588
3589### See Also
3590
Cary Clark682c58d2018-05-16 07:07:07 -04003591<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 -04003592
Cary Clark682c58d2018-05-16 07:07:07 -04003593## <a name='Shader_Methods'>Shader Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003594
Cary Clark682c58d2018-05-16 07:07:07 -04003595<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
3596<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
3597If <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 -04003598
Cary Clark682c58d2018-05-16 07:07:07 -04003599<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>.
3600If <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 -04003601the fill.
3602
Cary Clark682c58d2018-05-16 07:07:07 -04003603The 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 -04003604
3605### Example
3606
3607<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
3608
Cary Clark682c58d2018-05-16 07:07:07 -04003609If <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 -04003610
3611### Example
3612
skia-bookmaker525f9a92018-05-03 06:27:39 +00003613<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003614
Cary Clark682c58d2018-05-16 07:07:07 -04003615<a name='SkPaint_getShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003616## getShader
3617
Cary Clark682c58d2018-05-16 07:07:07 -04003618<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3619<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003620</pre>
3621
Cary Clark80247e52018-07-11 16:18:41 -04003622Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003623
Cary Clark682c58d2018-05-16 07:07:07 -04003624Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003625
3626### Return Value
3627
Cary Clark682c58d2018-05-16 07:07:07 -04003628<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003629
3630### Example
3631
3632<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
3633
3634#### Example Output
3635
3636~~~~
3637nullptr == shader
3638nullptr != shader
3639~~~~
3640
3641</fiddle-embed></div>
3642
3643---
3644
Cary Clark682c58d2018-05-16 07:07:07 -04003645<a name='SkPaint_refShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003646## refShader
3647
Cary Clark682c58d2018-05-16 07:07:07 -04003648<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3649<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 -04003650</pre>
3651
Cary Clark80247e52018-07-11 16:18:41 -04003652Returns optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003653
Cary Clark682c58d2018-05-16 07:07:07 -04003654Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003655
3656### Return Value
3657
Cary Clark682c58d2018-05-16 07:07:07 -04003658<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003659
3660### Example
3661
3662<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
3663
3664#### Example Output
3665
3666~~~~
3667shader unique: true
3668shader unique: false
3669~~~~
3670
3671</fiddle-embed></div>
3672
3673---
3674
Cary Clark682c58d2018-05-16 07:07:07 -04003675<a name='SkPaint_setShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003676## setShader
3677
Cary Clark682c58d2018-05-16 07:07:07 -04003678<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3679void <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 -04003680</pre>
3681
Cary Clark80247e52018-07-11 16:18:41 -04003682Sets optional colors used when filling a path, such as a gradient.
Cary Clark12799e12017-07-28 15:18:29 -04003683
Cary Clark682c58d2018-05-16 07:07:07 -04003684Sets <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>.
3685Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003686
3687### Parameters
3688
Cary Clark682c58d2018-05-16 07:07:07 -04003689<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
3690 <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 -04003691 </tr>
3692</table>
3693
3694### Example
3695
skia-bookmakere0a458f2018-07-16 05:29:00 +00003696<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003697
3698---
3699
Cary Clark682c58d2018-05-16 07:07:07 -04003700## <a name='Color_Filter_Methods'>Color Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003701
Cary Clark682c58d2018-05-16 07:07:07 -04003702<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04003703<a href='undocumented#Color_Filter'>Color Filter</a> may apply <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
Cary Clark682c58d2018-05-16 07:07:07 -04003704If <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 -04003705
Cary Clark682c58d2018-05-16 07:07:07 -04003706The 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 -04003707
3708### Example
3709
3710<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
3711
Cary Clark682c58d2018-05-16 07:07:07 -04003712<a name='SkPaint_getColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003713## getColorFilter
3714
Cary Clark682c58d2018-05-16 07:07:07 -04003715<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3716<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003717</pre>
3718
Cary Clark682c58d2018-05-16 07:07:07 -04003719Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3720Does 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 -04003721
3722### Return Value
3723
Cary Clark682c58d2018-05-16 07:07:07 -04003724<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003725
3726### Example
3727
3728<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
3729
3730#### Example Output
3731
3732~~~~
3733nullptr == color filter
3734nullptr != color filter
3735~~~~
3736
3737</fiddle-embed></div>
3738
3739---
3740
Cary Clark682c58d2018-05-16 07:07:07 -04003741<a name='SkPaint_refColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003742## refColorFilter
3743
Cary Clark682c58d2018-05-16 07:07:07 -04003744<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3745<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 -04003746</pre>
3747
Cary Clark682c58d2018-05-16 07:07:07 -04003748Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3749Increases <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 -04003750
3751### Return Value
3752
Cary Clark682c58d2018-05-16 07:07:07 -04003753<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04003754
3755### Example
3756
3757<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3758
3759#### Example Output
3760
3761~~~~
3762color filter unique: true
3763color filter unique: false
3764~~~~
3765
3766</fiddle-embed></div>
3767
3768---
3769
Cary Clark682c58d2018-05-16 07:07:07 -04003770<a name='SkPaint_setColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003771## setColorFilter
3772
Cary Clark682c58d2018-05-16 07:07:07 -04003773<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3774void <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 -04003775</pre>
3776
Cary Clark682c58d2018-05-16 07:07:07 -04003777Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3778<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 -04003779
Cary Clark682c58d2018-05-16 07:07:07 -04003780Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003781
3782### Parameters
3783
Cary Clark682c58d2018-05-16 07:07:07 -04003784<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3785 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003786 </tr>
3787</table>
3788
3789### Example
3790
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00003791<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003792
3793---
3794
Cary Clark682c58d2018-05-16 07:07:07 -04003795## <a name='Blend_Mode_Methods'>Blend Mode Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003796
Cary Clark224c7002018-06-27 11:00:21 -04003797<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3798The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003799over the destination color.
3800
3801### Example
3802
Cary Clark83647062018-07-18 16:21:51 -04003803<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003804
3805### See Also
3806
Cary Clark224c7002018-06-27 11:00:21 -04003807<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003808
Cary Clark682c58d2018-05-16 07:07:07 -04003809<a name='SkPaint_getBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003810## getBlendMode
3811
Cary Clark682c58d2018-05-16 07:07:07 -04003812<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003813<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003814</pre>
3815
Cary Clark224c7002018-06-27 11:00:21 -04003816Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
3817By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003818
3819### Return Value
3820
3821mode used to combine source color with destination color
3822
3823### Example
3824
skia-bookmaker525f9a92018-05-03 06:27:39 +00003825<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003826
3827#### Example Output
3828
3829~~~~
3830kSrcOver == getBlendMode
3831kSrcOver != getBlendMode
3832~~~~
3833
3834</fiddle-embed></div>
3835
3836---
3837
Cary Clark682c58d2018-05-16 07:07:07 -04003838<a name='SkPaint_isSrcOver'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003839## isSrcOver
3840
Cary Clark682c58d2018-05-16 07:07:07 -04003841<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3842bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003843</pre>
3844
Cary Clark224c7002018-06-27 11:00:21 -04003845Returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04003846
3847### Return Value
3848
Cary Clark224c7002018-06-27 11:00:21 -04003849true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003850
3851### Example
3852
3853<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3854
3855#### Example Output
3856
3857~~~~
3858isSrcOver == true
3859isSrcOver != true
3860~~~~
3861
3862</fiddle-embed></div>
3863
3864---
3865
Cary Clark682c58d2018-05-16 07:07:07 -04003866<a name='SkPaint_setBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003867## setBlendMode
3868
Cary Clark682c58d2018-05-16 07:07:07 -04003869<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003870void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003871</pre>
3872
Cary Clark224c7002018-06-27 11:00:21 -04003873Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003874Does not check for valid input.
3875
3876### Parameters
3877
Cary Clark682c58d2018-05-16 07:07:07 -04003878<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark224c7002018-06-27 11:00:21 -04003879 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003880 </tr>
3881</table>
3882
3883### Example
3884
3885<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3886
3887#### Example Output
3888
3889~~~~
3890isSrcOver == true
3891isSrcOver != true
3892~~~~
3893
3894</fiddle-embed></div>
3895
3896---
3897
Cary Clark682c58d2018-05-16 07:07:07 -04003898## <a name='Path_Effect_Methods'>Path Effect Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003899
Cary Clark682c58d2018-05-16 07:07:07 -04003900<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3901<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3902If <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 -04003903
3904### Example
3905
3906<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3907
3908### See Also
3909
Cary Clark682c58d2018-05-16 07:07:07 -04003910<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003911
Cary Clark682c58d2018-05-16 07:07:07 -04003912<a name='SkPaint_getPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003913## getPathEffect
3914
Cary Clark682c58d2018-05-16 07:07:07 -04003915<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3916<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003917</pre>
3918
Cary Clark682c58d2018-05-16 07:07:07 -04003919Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3920Does 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 -04003921
3922### Return Value
3923
Cary Clark682c58d2018-05-16 07:07:07 -04003924<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003925
3926### Example
3927
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003928<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003929
3930#### Example Output
3931
3932~~~~
3933nullptr == path effect
3934nullptr != path effect
3935~~~~
3936
3937</fiddle-embed></div>
3938
3939---
3940
Cary Clark682c58d2018-05-16 07:07:07 -04003941<a name='SkPaint_refPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003942## refPathEffect
3943
Cary Clark682c58d2018-05-16 07:07:07 -04003944<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3945<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 -04003946</pre>
3947
Cary Clark682c58d2018-05-16 07:07:07 -04003948Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3949Increases <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 -04003950
3951### Return Value
3952
Cary Clark682c58d2018-05-16 07:07:07 -04003953<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003954
3955### Example
3956
Cary Clark83647062018-07-18 16:21:51 -04003957<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003958
3959#### Example Output
3960
3961~~~~
3962path effect unique: true
3963path effect unique: false
3964~~~~
3965
3966</fiddle-embed></div>
3967
3968---
3969
Cary Clark682c58d2018-05-16 07:07:07 -04003970<a name='SkPaint_setPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003971## setPathEffect
3972
Cary Clark682c58d2018-05-16 07:07:07 -04003973<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3974void <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 -04003975</pre>
3976
Cary Clark682c58d2018-05-16 07:07:07 -04003977Sets <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
3978<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003979
Cary Clark682c58d2018-05-16 07:07:07 -04003980Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003981
3982### Parameters
3983
Cary Clark682c58d2018-05-16 07:07:07 -04003984<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3985 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003986 </tr>
3987</table>
3988
3989### Example
3990
3991<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3992
3993---
3994
Cary Clark682c58d2018-05-16 07:07:07 -04003995## <a name='Mask_Filter_Methods'>Mask Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003996
Cary Clark682c58d2018-05-16 07:07:07 -04003997<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3998<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003999
Cary Clark682c58d2018-05-16 07:07:07 -04004000<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
4001creating 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 -04004002modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04004003
4004### Example
4005
Cary Clark681287e2018-03-16 11:34:15 -04004006<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004007
Cary Clark682c58d2018-05-16 07:07:07 -04004008<a name='SkPaint_getMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004009## getMaskFilter
4010
Cary Clark682c58d2018-05-16 07:07:07 -04004011<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4012<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004013</pre>
4014
Cary Clark682c58d2018-05-16 07:07:07 -04004015Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
4016Does 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 -04004017
4018### Return Value
4019
Cary Clark682c58d2018-05-16 07:07:07 -04004020<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004021
4022### Example
4023
Cary Clark681287e2018-03-16 11:34:15 -04004024<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04004025
4026#### Example Output
4027
4028~~~~
4029nullptr == mask filter
4030nullptr != mask filter
4031~~~~
4032
4033</fiddle-embed></div>
4034
4035---
4036
Cary Clark682c58d2018-05-16 07:07:07 -04004037<a name='SkPaint_refMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004038## refMaskFilter
4039
Cary Clark682c58d2018-05-16 07:07:07 -04004040<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4041<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 -04004042</pre>
4043
Cary Clark682c58d2018-05-16 07:07:07 -04004044Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04004045
Cary Clark682c58d2018-05-16 07:07:07 -04004046Increases <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 -04004047
4048### Return Value
4049
Cary Clark682c58d2018-05-16 07:07:07 -04004050<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004051
4052### Example
4053
Cary Clark83647062018-07-18 16:21:51 -04004054<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04004055
4056#### Example Output
4057
4058~~~~
4059mask filter unique: true
4060mask filter unique: false
4061~~~~
4062
4063</fiddle-embed></div>
4064
4065---
4066
Cary Clark682c58d2018-05-16 07:07:07 -04004067<a name='SkPaint_setMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004068## setMaskFilter
4069
Cary Clark682c58d2018-05-16 07:07:07 -04004070<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4071void <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 -04004072</pre>
4073
Cary Clark682c58d2018-05-16 07:07:07 -04004074Sets <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
4075<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
4076<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04004077
Cary Clark682c58d2018-05-16 07:07:07 -04004078Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004079
4080### Parameters
4081
Cary Clark682c58d2018-05-16 07:07:07 -04004082<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
4083 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04004084 </tr>
4085</table>
4086
4087### Example
4088
Cary Clark681287e2018-03-16 11:34:15 -04004089<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004090
4091---
4092
Cary Clark682c58d2018-05-16 07:07:07 -04004093## <a name='Typeface_Methods'>Typeface Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004094
Cary Clark682c58d2018-05-16 07:07:07 -04004095<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
4096<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
4097The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04004098implementation.
4099
4100### Example
4101
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004102<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004103
Cary Clark682c58d2018-05-16 07:07:07 -04004104<a name='SkPaint_getTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004105## getTypeface
4106
Cary Clark682c58d2018-05-16 07:07:07 -04004107<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4108<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004109</pre>
4110
Cary Clark682c58d2018-05-16 07:07:07 -04004111Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
Cary Clark81abc432018-06-25 16:30:08 -04004112Does not alter <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004113
4114### Return Value
4115
Cary Clark682c58d2018-05-16 07:07:07 -04004116<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004117
4118### Example
4119
Cary Clarkf9603982018-07-17 08:20:27 -04004120<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04004121
4122#### Example Output
4123
4124~~~~
4125nullptr == typeface
4126nullptr != typeface
4127~~~~
4128
4129</fiddle-embed></div>
4130
4131---
4132
Cary Clark682c58d2018-05-16 07:07:07 -04004133<a name='SkPaint_refTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004134## refTypeface
4135
Cary Clark682c58d2018-05-16 07:07:07 -04004136<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4137<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 -04004138</pre>
4139
Cary Clark682c58d2018-05-16 07:07:07 -04004140Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004141
4142### Return Value
4143
Cary Clark682c58d2018-05-16 07:07:07 -04004144<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004145
4146### Example
4147
Cary Clark83647062018-07-18 16:21:51 -04004148<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04004149
4150#### Example Output
4151
4152~~~~
4153typeface1 != typeface2
4154typeface1 == typeface2
4155~~~~
4156
4157</fiddle-embed></div>
4158
4159---
4160
Cary Clark682c58d2018-05-16 07:07:07 -04004161<a name='SkPaint_setTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004162## setTypeface
4163
Cary Clark682c58d2018-05-16 07:07:07 -04004164<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4165void <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 -04004166</pre>
4167
Cary Clark682c58d2018-05-16 07:07:07 -04004168Sets <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>.
4169Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
4170<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004171
4172### Parameters
4173
Cary Clark682c58d2018-05-16 07:07:07 -04004174<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
4175 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004176 </tr>
4177</table>
4178
4179### Example
4180
Cary Clark71961fb2018-01-05 14:21:59 -05004181<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004182
4183---
4184
Cary Clark682c58d2018-05-16 07:07:07 -04004185## <a name='Image_Filter_Methods'>Image Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004186
Cary Clark682c58d2018-05-16 07:07:07 -04004187<a href='undocumented#Image_Filter'>Image Filter</a> operates on the pixel representation of the shape, as modified by <a href='#Paint'>Paint</a>
Cary Clark224c7002018-06-27 11:00:21 -04004188with <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> set to <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>. <a href='undocumented#Image_Filter'>Image Filter</a> creates a new bitmap,
4189which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04004190
Cary Clark682c58d2018-05-16 07:07:07 -04004191<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>
4192can 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.
4193<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
4194<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004195
4196### Example
4197
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004198<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004199
Cary Clark682c58d2018-05-16 07:07:07 -04004200<a name='SkPaint_getImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004201## getImageFilter
4202
Cary Clark682c58d2018-05-16 07:07:07 -04004203<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4204<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004205</pre>
4206
Cary Clark682c58d2018-05-16 07:07:07 -04004207Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4208Does 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 -04004209
4210### Return Value
4211
Cary Clark682c58d2018-05-16 07:07:07 -04004212<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004213
4214### Example
4215
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004216<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04004217
4218#### Example Output
4219
4220~~~~
4221nullptr == image filter
4222nullptr != image filter
4223~~~~
4224
4225</fiddle-embed></div>
4226
4227---
4228
Cary Clark682c58d2018-05-16 07:07:07 -04004229<a name='SkPaint_refImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004230## refImageFilter
4231
Cary Clark682c58d2018-05-16 07:07:07 -04004232<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4233<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 -04004234</pre>
4235
Cary Clark682c58d2018-05-16 07:07:07 -04004236Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4237Increases <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 -04004238
4239### Return Value
4240
Cary Clark682c58d2018-05-16 07:07:07 -04004241<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004242
4243### Example
4244
4245<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
4246
4247#### Example Output
4248
4249~~~~
4250image filter unique: true
4251image filter unique: false
4252~~~~
4253
4254</fiddle-embed></div>
4255
4256---
4257
Cary Clark682c58d2018-05-16 07:07:07 -04004258<a name='SkPaint_setImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004259## setImageFilter
4260
Cary Clark682c58d2018-05-16 07:07:07 -04004261<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4262void <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 -04004263</pre>
4264
Cary Clark682c58d2018-05-16 07:07:07 -04004265Sets <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
4266<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 -04004267on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04004268
Cary Clark682c58d2018-05-16 07:07:07 -04004269Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004270
4271### Parameters
4272
Cary Clark682c58d2018-05-16 07:07:07 -04004273<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
4274 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04004275 </tr>
4276</table>
4277
4278### Example
4279
4280<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
4281
4282---
4283
Cary Clark682c58d2018-05-16 07:07:07 -04004284## <a name='Draw_Looper_Methods'>Draw Looper Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004285
Cary Clark682c58d2018-05-16 07:07:07 -04004286<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 -04004287to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04004288
Cary Clark682c58d2018-05-16 07:07:07 -04004289<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
4290<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
4291Set <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 -04004292
4293### Example
4294
4295<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
4296
Cary Clark682c58d2018-05-16 07:07:07 -04004297<a name='SkPaint_getDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004298## getDrawLooper
4299
Cary Clark682c58d2018-05-16 07:07:07 -04004300<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4301<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004302</pre>
4303
Cary Clark682c58d2018-05-16 07:07:07 -04004304Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4305Does 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 -04004306
4307### Return Value
4308
Cary Clark682c58d2018-05-16 07:07:07 -04004309<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004310
4311### Example
4312
4313<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
4314
4315#### Example Output
4316
4317~~~~
4318nullptr == draw looper
4319nullptr != draw looper
4320~~~~
4321
4322</fiddle-embed></div>
4323
4324---
4325
Cary Clark682c58d2018-05-16 07:07:07 -04004326<a name='SkPaint_refDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004327## refDrawLooper
4328
Cary Clark682c58d2018-05-16 07:07:07 -04004329<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4330<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 -04004331</pre>
4332
Cary Clark682c58d2018-05-16 07:07:07 -04004333Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4334Increases <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 -04004335
4336### Return Value
4337
Cary Clark682c58d2018-05-16 07:07:07 -04004338<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004339
4340### Example
4341
4342<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
4343
4344#### Example Output
4345
4346~~~~
4347draw looper unique: true
4348draw looper unique: false
4349~~~~
4350
4351</fiddle-embed></div>
4352
4353---
4354
Cary Clark682c58d2018-05-16 07:07:07 -04004355<a name='SkPaint_getLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004356## getLooper
4357
Cary Clark682c58d2018-05-16 07:07:07 -04004358<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4359<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004360</pre>
4361
Cary Clark682c58d2018-05-16 07:07:07 -04004362Deprecated.
4363
Cary Clark12799e12017-07-28 15:18:29 -04004364---
4365
Cary Clark682c58d2018-05-16 07:07:07 -04004366<a name='SkPaint_setDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004367## setDrawLooper
4368
Cary Clark682c58d2018-05-16 07:07:07 -04004369<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4370void <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 -04004371</pre>
4372
Cary Clark682c58d2018-05-16 07:07:07 -04004373Sets <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
4374<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 -04004375drawing unaltered.
4376
Cary Clark682c58d2018-05-16 07:07:07 -04004377Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004378
4379### Parameters
4380
Cary Clark682c58d2018-05-16 07:07:07 -04004381<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
4382 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004383 </tr>
4384</table>
4385
4386### Example
4387
4388<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
4389
4390---
4391
Cary Clark682c58d2018-05-16 07:07:07 -04004392<a name='SkPaint_setLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004393## setLooper
4394
Cary Clark682c58d2018-05-16 07:07:07 -04004395<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4396void <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 -04004397</pre>
4398
Cary Clark682c58d2018-05-16 07:07:07 -04004399Deprecated.
4400
Cary Clark12799e12017-07-28 15:18:29 -04004401---
4402
Cary Clark682c58d2018-05-16 07:07:07 -04004403## <a name='Text_Align'>Text Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004404
Cary Clark682c58d2018-05-16 07:07:07 -04004405## <a name='SkPaint_Align'>Enum SkPaint::Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004406
Cary Clarka560c472017-11-27 10:44:06 -05004407<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004408 enum <a href='#SkPaint_Align'>Align</a> {
4409 <a href='#SkPaint_kLeft_Align'>kLeft Align</a>,
4410 <a href='#SkPaint_kCenter_Align'>kCenter Align</a>,
4411 <a href='#SkPaint_kRight_Align'>kRight Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004412 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04004413
Cary Clark682c58d2018-05-16 07:07:07 -04004414 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05004415</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004416
Cary Clark682c58d2018-05-16 07:07:07 -04004417<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
4418<a href='#SkPaint_Align'>Align</a> affects <a href='undocumented#Glyph'>Glyphs</a> drawn with: <a href='SkCanvas_Reference#SkCanvas_drawText'>SkCanvas::drawText</a>, <a href='SkCanvas_Reference#SkCanvas_drawPosText'>SkCanvas::drawPosText</a>,
Cary Clark153e76d2018-08-28 11:48:28 -04004419<a href='SkCanvas_Reference#SkCanvas_drawPosTextH'>SkCanvas::drawPosTextH</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextRSXform'>SkCanvas::drawTextRSXform</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextBlob'>SkCanvas::drawTextBlob</a>,
Cary Clark682c58d2018-05-16 07:07:07 -04004420and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
4421as 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 -04004422
4423The text position is set by the font for both horizontal and vertical text.
4424Typically, for horizontal text, the position is to the left side of the glyph on the
4425base line; and for vertical text, the position is the horizontal center of the glyph
4426at the caps height.
4427
Cary Clark682c58d2018-05-16 07:07:07 -04004428<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 -04004429using the metrics returned by the font.
4430
Cary Clark682c58d2018-05-16 07:07:07 -04004431<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004432
4433### Constants
4434
Cary Clark682c58d2018-05-16 07:07:07 -04004435<table style='border-collapse: collapse; width: 62.5em'>
4436 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4437<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4438<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4439 <tr style='background-color: #f0f0f0; '>
4440 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
4441 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4442 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4443Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05004444</td>
Cary Clark12799e12017-07-28 15:18:29 -04004445 </tr>
4446 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004447 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
4448 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4449 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4450Moves the glyph half its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear, and
4451half its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
4452</td>
4453 </tr>
4454 <tr style='background-color: #f0f0f0; '>
4455 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
4456 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4457 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4458Moves the glyph by its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear,
4459and 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 -05004460</td>
Cary Clark12799e12017-07-28 15:18:29 -04004461 </tr>
4462 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004463 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
4464 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4465 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04004466May be used to verify that <a href='#SkPaint_Align'>Align</a> is a legal value.
4467</td>
Cary Clark12799e12017-07-28 15:18:29 -04004468 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004469</table>
Cary Clark12799e12017-07-28 15:18:29 -04004470
4471### Example
4472
Cary Clark1a8d7622018-03-05 13:26:16 -05004473<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
4474</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004475
4476### Example
4477
Cary Clark682c58d2018-05-16 07:07:07 -04004478<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 -05004479</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004480
Cary Clark682c58d2018-05-16 07:07:07 -04004481<a name='SkPaint_getTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004482## getTextAlign
4483
Cary Clark682c58d2018-05-16 07:07:07 -04004484<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4485<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004486</pre>
4487
Cary Clark682c58d2018-05-16 07:07:07 -04004488Returns <a href='#Text_Align'>Text Align</a>.
4489Returns <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 -04004490
4491### Return Value
4492
4493text placement relative to position
4494
4495### Example
4496
4497<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
4498
4499#### Example Output
4500
4501~~~~
4502kLeft_Align == default
4503~~~~
4504
4505</fiddle-embed></div>
4506
4507---
4508
Cary Clark682c58d2018-05-16 07:07:07 -04004509<a name='SkPaint_setTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004510## setTextAlign
4511
Cary Clark682c58d2018-05-16 07:07:07 -04004512<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4513void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04004514</pre>
4515
Cary Clark682c58d2018-05-16 07:07:07 -04004516Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
4517Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04004518
4519### Parameters
4520
Cary Clark682c58d2018-05-16 07:07:07 -04004521<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
4522 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04004523 </tr>
4524</table>
4525
4526### Example
4527
Cary Clark682c58d2018-05-16 07:07:07 -04004528<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 -05004529alignment out of range has no effect.
4530</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004531
4532---
4533
Cary Clark682c58d2018-05-16 07:07:07 -04004534## <a name='Text_Size'>Text Size</a>
Cary Clark08895c42018-02-01 09:37:32 -05004535
Cary Clark682c58d2018-05-16 07:07:07 -04004536<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
4537<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
4538<a href='#Text_Size'>Text Size</a> defaults to 12.
4539Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04004540
4541### Example
4542
4543<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
4544
Cary Clark682c58d2018-05-16 07:07:07 -04004545<a name='SkPaint_getTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004546## getTextSize
4547
Cary Clark682c58d2018-05-16 07:07:07 -04004548<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4549<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004550</pre>
4551
Cary Clark682c58d2018-05-16 07:07:07 -04004552Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04004553
4554### Return Value
4555
4556typographic height of text
4557
4558### Example
4559
skia-bookmaker233c6522018-07-04 05:33:26 +00004560<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004561
4562---
4563
Cary Clark682c58d2018-05-16 07:07:07 -04004564<a name='SkPaint_setTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004565## setTextSize
4566
Cary Clark682c58d2018-05-16 07:07:07 -04004567<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4568void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04004569</pre>
4570
Cary Clark682c58d2018-05-16 07:07:07 -04004571Sets <a href='#Text_Size'>Text Size</a> in points.
4572Has 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 -04004573
4574### Parameters
4575
Cary Clark682c58d2018-05-16 07:07:07 -04004576<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
4577 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004578 </tr>
4579</table>
4580
4581### Example
4582
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004583<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004584
4585---
4586
Cary Clark682c58d2018-05-16 07:07:07 -04004587## <a name='Text_Scale_X'>Text Scale X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004588
Cary Clark682c58d2018-05-16 07:07:07 -04004589<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
4590<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004591is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004592<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
4593<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04004594
4595### Example
4596
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004597<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004598
Cary Clark682c58d2018-05-16 07:07:07 -04004599<a name='SkPaint_getTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004600## getTextScaleX
4601
Cary Clark682c58d2018-05-16 07:07:07 -04004602<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4603<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004604</pre>
4605
Cary Clark682c58d2018-05-16 07:07:07 -04004606Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004607Default value is 1.
4608
4609### Return Value
4610
4611text horizontal scale
4612
4613### Example
4614
4615<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
4616
4617---
4618
Cary Clark682c58d2018-05-16 07:07:07 -04004619<a name='SkPaint_setTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004620## setTextScaleX
4621
Cary Clark682c58d2018-05-16 07:07:07 -04004622<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4623void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04004624</pre>
4625
Cary Clark682c58d2018-05-16 07:07:07 -04004626Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004627Default value is 1.
4628
4629### Parameters
4630
Cary Clark682c58d2018-05-16 07:07:07 -04004631<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
4632 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04004633 </tr>
4634</table>
4635
4636### Example
4637
4638<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
4639
4640---
4641
Cary Clark682c58d2018-05-16 07:07:07 -04004642## <a name='Text_Skew_X'>Text Skew X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004643
Cary Clark682c58d2018-05-16 07:07:07 -04004644<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
4645<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004646is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004647<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
4648<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04004649
4650### Example
4651
4652<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
4653
Cary Clark682c58d2018-05-16 07:07:07 -04004654<a name='SkPaint_getTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004655## getTextSkewX
4656
Cary Clark682c58d2018-05-16 07:07:07 -04004657<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4658<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004659</pre>
4660
Cary Clark682c58d2018-05-16 07:07:07 -04004661Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004662Default value is zero.
4663
4664### Return Value
4665
4666additional shear in x-axis relative to y-axis
4667
4668### Example
4669
Cary Clark7f644ec2018-07-19 10:50:44 -04004670<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004671
4672---
4673
Cary Clark682c58d2018-05-16 07:07:07 -04004674<a name='SkPaint_setTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004675## setTextSkewX
4676
Cary Clark682c58d2018-05-16 07:07:07 -04004677<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4678void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04004679</pre>
4680
Cary Clark682c58d2018-05-16 07:07:07 -04004681Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004682Default value is zero.
4683
4684### Parameters
4685
Cary Clark682c58d2018-05-16 07:07:07 -04004686<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
4687 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04004688 </tr>
4689</table>
4690
4691### Example
4692
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00004693<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004694
4695---
4696
Cary Clark682c58d2018-05-16 07:07:07 -04004697## <a name='Text_Encoding'>Text Encoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004698
Cary Clark682c58d2018-05-16 07:07:07 -04004699## <a name='SkPaint_TextEncoding'>Enum SkPaint::TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004700
Cary Clarka560c472017-11-27 10:44:06 -05004701<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004702 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
4703 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>,
4704 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>,
4705 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>,
4706 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004707 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004708</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004709
Cary Clark682c58d2018-05-16 07:07:07 -04004710<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
4711size, 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 -04004712
Cary Clarka560c472017-11-27 10:44:06 -05004713Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004714All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04004715in the total storage required.
4716
Cary Clark682c58d2018-05-16 07:07:07 -04004717<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 -04004718
Cary Clark682c58d2018-05-16 07:07:07 -04004719<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 -04004720
Cary Clark682c58d2018-05-16 07:07:07 -04004721<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 -04004722
Cary Clark682c58d2018-05-16 07:07:07 -04004723<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 -04004724A glyph index is a 16-bit word.
4725
Cary Clark682c58d2018-05-16 07:07:07 -04004726<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 -04004727
4728### Constants
4729
Cary Clark682c58d2018-05-16 07:07:07 -04004730<table style='border-collapse: collapse; width: 62.5em'>
4731 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4732<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4733<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4734 <tr style='background-color: #f0f0f0; '>
4735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
4736 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4737 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4738uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04004739 </tr>
4740 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004741 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
4742 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4744uses two byte words to represent most of Unicode</td>
4745 </tr>
4746 <tr style='background-color: #f0f0f0; '>
4747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
4748 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4749 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4750uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04004751 </tr>
4752 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004753 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
4754 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4755 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4756uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04004757 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004758</table>
Cary Clark12799e12017-07-28 15:18:29 -04004759
4760### Example
4761
Cary Clarka560c472017-11-27 10:44:06 -05004762<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4763Second line is encoded in UTF-16.
4764Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04004765Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05004766</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004767
Cary Clark682c58d2018-05-16 07:07:07 -04004768<a name='SkPaint_getTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004769## getTextEncoding
4770
Cary Clark682c58d2018-05-16 07:07:07 -04004771<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4772<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004773</pre>
4774
Cary Clark682c58d2018-05-16 07:07:07 -04004775Returns <a href='#Text_Encoding'>Text Encoding</a>.
4776<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 -04004777
4778### Return Value
4779
Cary Clark682c58d2018-05-16 07:07:07 -04004780one 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
4781<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004782
4783### Example
4784
skia-bookmaker525f9a92018-05-03 06:27:39 +00004785<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004786
4787#### Example Output
4788
4789~~~~
4790kUTF8_TextEncoding == text encoding
4791kGlyphID_TextEncoding == text encoding
4792~~~~
4793
4794</fiddle-embed></div>
4795
4796---
4797
Cary Clark682c58d2018-05-16 07:07:07 -04004798<a name='SkPaint_setTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004799## setTextEncoding
4800
Cary Clark682c58d2018-05-16 07:07:07 -04004801<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4802void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004803</pre>
4804
Cary Clark682c58d2018-05-16 07:07:07 -04004805Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4806<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4807Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004808
4809### Parameters
4810
Cary Clark682c58d2018-05-16 07:07:07 -04004811<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4812 <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
4813<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004814 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004815#
4816
Cary Clark12799e12017-07-28 15:18:29 -04004817</table>
4818
4819### Example
4820
Cary Clark75fd4492018-06-20 12:45:16 -04004821<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004822
4823#### Example Output
4824
4825~~~~
48264 != text encoding
4827~~~~
4828
4829</fiddle-embed></div>
4830
4831---
4832
Cary Clark682c58d2018-05-16 07:07:07 -04004833## <a name='Font_Metrics'>Font Metrics</a>
Cary Clark08895c42018-02-01 09:37:32 -05004834
Cary Clark682c58d2018-05-16 07:07:07 -04004835<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>.
4836The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4837<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004838
Cary Clark682c58d2018-05-16 07:07:07 -04004839<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 -04004840X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4841are positive.
4842Y-axis values above the baseline are negative, and below the baseline are positive.
4843
4844### Example
4845
Ben Wagnere5806492017-11-09 12:08:31 -05004846<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004847
Cary Clark682c58d2018-05-16 07:07:07 -04004848# <a name='SkPaint_FontMetrics'>Struct SkPaint::FontMetrics</a>
4849
4850## <a name='Font_Metrics_Constant'>Constant</a>
4851
4852
Cary Clarkd2ca79c2018-08-10 13:09:13 -04004853SkPaint::FontMetrics related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
Cary Clark682c58d2018-05-16 07:07:07 -04004854<table style='border-collapse: collapse; width: 62.5em'>
4855 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4856<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4857 <tr style='background-color: #f0f0f0; '>
4858 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a></td>
4859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>valid <a href='#Font_Metrics'>Font Metrics</a></td>
4860 </tr>
4861 <tr>
4862 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a></td>
4863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is valid</td>
4864 </tr>
4865 <tr style='background-color: #f0f0f0; '>
4866 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a></td>
4867 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is valid</td>
4868 </tr>
4869 <tr>
4870 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a></td>
4871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is valid</td>
4872 </tr>
4873 <tr style='background-color: #f0f0f0; '>
4874 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a></td>
4875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is valid</td>
4876 </tr>
4877</table>
4878
Cary Clark682c58d2018-05-16 07:07:07 -04004879## <a name='Font_Metrics_Member_Function'>Member_Function</a>
4880
4881
Cary Clarkd2ca79c2018-08-10 13:09:13 -04004882SkPaint::FontMetrics member functions read and modify the structure properties.
Cary Clark682c58d2018-05-16 07:07:07 -04004883<table style='border-collapse: collapse; width: 62.5em'>
4884 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4885<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4886 <tr style='background-color: #f0f0f0; '>
4887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a></td>
4888 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout position if set</td>
4889 </tr>
4890 <tr>
4891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a></td>
4892 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout thickness if set</td>
4893 </tr>
4894 <tr style='background-color: #f0f0f0; '>
4895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a></td>
4896 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline position if set</td>
4897 </tr>
4898 <tr>
4899 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a></td>
4900 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline thickness if set</td>
4901 </tr>
4902</table>
4903
Cary Clark682c58d2018-05-16 07:07:07 -04004904## <a name='Font_Metrics_Member'>Member</a>
4905
4906
Cary Clarkd2ca79c2018-08-10 13:09:13 -04004907SkPaint::FontMetrics members may be read and written directly without using a member function.
Cary Clark682c58d2018-05-16 07:07:07 -04004908<table style='border-collapse: collapse; width: 62.5em'>
4909 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4910<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4911 <tr style='background-color: #f0f0f0; '>
4912 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAscent'>fAscent</a></td>
4913 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve above baseline</td>
4914 </tr>
4915 <tr>
4916 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a></td>
4917 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>average character width</td>
4918 </tr>
4919 <tr style='background-color: #f0f0f0; '>
4920 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fBottom'>fBottom</a></td>
4921 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent below baseline</td>
4922 </tr>
4923 <tr>
4924 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a></td>
4925 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of an upper-case letter</td>
4926 </tr>
4927 <tr style='background-color: #f0f0f0; '>
4928 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fDescent'>fDescent</a></td>
4929 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve below baseline</td>
4930 </tr>
4931 <tr>
4932 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fFlags'>fFlags</a></td>
4933 <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>
4934 </tr>
4935 <tr style='background-color: #f0f0f0; '>
4936 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fLeading'>fLeading</a></td>
4937 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to add between lines</td>
4938 </tr>
4939 <tr>
4940 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a></td>
4941 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum character width</td>
4942 </tr>
4943 <tr style='background-color: #f0f0f0; '>
4944 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a></td>
4945 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout position relative to baseline</td>
4946 </tr>
4947 <tr>
4948 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a></td>
4949 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout thickness</td>
4950 </tr>
4951 <tr style='background-color: #f0f0f0; '>
4952 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fTop'>fTop</a></td>
4953 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent above baseline</td>
4954 </tr>
4955 <tr>
4956 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a></td>
4957 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline position relative to baseline</td>
4958 </tr>
4959 <tr style='background-color: #f0f0f0; '>
4960 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a></td>
4961 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline thickness</td>
4962 </tr>
4963 <tr>
4964 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a></td>
4965 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of lower-case 'x'</td>
4966 </tr>
4967 <tr style='background-color: #f0f0f0; '>
4968 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMax'>fXMax</a></td>
4969 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum x</td>
4970 </tr>
4971 <tr>
4972 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMin'>fXMin</a></td>
4973 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimum x</td>
4974 </tr>
4975</table>
4976
Cary Clarka560c472017-11-27 10:44:06 -05004977<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004978 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4979 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4980 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4981 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4982 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4983 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004984 };
Cary Clark12799e12017-07-28 15:18:29 -04004985
Cary Clark682c58d2018-05-16 07:07:07 -04004986 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4987 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4988 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4989 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4990 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4991 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4992 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4993 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4994 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4995 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4996 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4997 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4998 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4999 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
5000 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
5001 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04005002
Cary Clark682c58d2018-05-16 07:07:07 -04005003 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness(SkScalar* thickness)</a> const;
5004 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition(SkScalar* position)</a> const;
5005 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness(SkScalar* thickness)</a> const;
5006 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark186d08f2018-04-03 08:43:27 -04005007 };
Cary Clark1a8d7622018-03-05 13:26:16 -05005008</pre>
Cary Clark12799e12017-07-28 15:18:29 -04005009
Cary Clark682c58d2018-05-16 07:07:07 -04005010<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
5011computed 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 -04005012not available.
5013
Cary Clark5538c132018-06-14 12:28:14 -04005014All vertical values are relative to the baseline, on a y-axis pointing down.
5015Zero is on the baseline, negative values are above the baseline, and positive
5016values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05005017
Cary Clark682c58d2018-05-16 07:07:07 -04005018<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 -04005019are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05005020
Cary Clark682c58d2018-05-16 07:07:07 -04005021<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 -04005022are valid, since their value may be zero.
5023
Cary Clark682c58d2018-05-16 07:07:07 -04005024## <a name='SkPaint_FontMetrics_FontMetricsFlags'>Enum SkPaint::FontMetrics::FontMetricsFlags</a>
Cary Clark12799e12017-07-28 15:18:29 -04005025
Cary Clarka560c472017-11-27 10:44:06 -05005026<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04005027 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
5028 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
5029 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
5030 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
5031 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04005032 };
Cary Clark1a8d7622018-03-05 13:26:16 -05005033</pre>
Cary Clark12799e12017-07-28 15:18:29 -04005034
Cary Clark682c58d2018-05-16 07:07:07 -04005035<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 -04005036the underline or strikeout metric may be valid and zero.
5037Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
5038
Cary Clark12799e12017-07-28 15:18:29 -04005039### Constants
5040
Cary Clark682c58d2018-05-16 07:07:07 -04005041<table style='border-collapse: collapse; width: 62.5em'>
5042 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
5043<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
5044<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
5045 <tr style='background-color: #f0f0f0; '>
5046 <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>
5047 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
5048 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5049set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005050 </tr>
5051 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005052 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'><code>SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag</code></a></td>
5053 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
5054 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5055set if fUnderlinePosition is valid</td>
5056 </tr>
5057 <tr style='background-color: #f0f0f0; '>
5058 <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>
5059 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
5060 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5061set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005062 </tr>
5063 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005064 <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>
5065 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
5066 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5067set if fStrikeoutPosition is valid</td>
5068 </tr>
5069</table>
5070
5071### Members
5072
5073<table style='border-collapse: collapse; width: 62.5em'>
5074 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
5075<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Name</th>
5076<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
5077 <tr style='background-color: #f0f0f0; '>
5078 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
5079 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
5080 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5081is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005082 </tr>
5083 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005084 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5085 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
5086 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005087Greatest extent above the baseline for any glyph.
5088Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005089</td>
5090 </tr>
5091 <tr style='background-color: #f0f0f0; '>
5092 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5093 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
5094 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005095Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005096Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005097</td>
5098 </tr>
5099 <tr>
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_fDescent'><code>fDescent</code></a></td>
5102 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005103Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005104Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005105</td>
5106 </tr>
5107 <tr style='background-color: #f0f0f0; '>
5108 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5109 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
5110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005111Greatest extent below the baseline for any glyph.
5112Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005113</td>
5114 </tr>
5115 <tr>
5116 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5117 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
5118 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005119Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005120Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005121</td>
5122 </tr>
5123 <tr style='background-color: #f0f0f0; '>
5124 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5125 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
5126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005127Average character width, if it is available.
5128Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005129</td>
5130 </tr>
5131 <tr>
5132 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
5134 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5135maximum character width</td>
5136 </tr>
5137 <tr style='background-color: #f0f0f0; '>
5138 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5139 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
5140 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005141Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005142Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005143</td>
5144 </tr>
5145 <tr>
5146 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5147 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
5148 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005149Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005150Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005151</td>
5152 </tr>
5153 <tr style='background-color: #f0f0f0; '>
5154 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5155 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
5156 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005157May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005158</td>
5159 </tr>
5160 <tr>
5161 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5162 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
5163 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005164May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005165</td>
5166 </tr>
5167 <tr style='background-color: #f0f0f0; '>
5168 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5169 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
5170 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5171If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5172If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
5173</td>
5174 </tr>
5175 <tr>
5176 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5177 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
5178 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005179Position of the top of the underline stroke relative to the baseline.
5180Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005181
Cary Clark682c58d2018-05-16 07:07:07 -04005182If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5183If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
5184</td>
5185 </tr>
5186 <tr style='background-color: #f0f0f0; '>
5187 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5188 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
5189 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5190If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5191If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
5192</td>
5193 </tr>
5194 <tr>
5195 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5196 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
5197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005198Position of the bottom of the strikeout stroke relative to the baseline.
5199Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005200
Cary Clark682c58d2018-05-16 07:07:07 -04005201If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5202If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
5203</td>
5204 </tr>
5205</table>
Cary Clark12799e12017-07-28 15:18:29 -04005206
Cary Clark682c58d2018-05-16 07:07:07 -04005207<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005208## hasUnderlineThickness
5209
Cary Clark682c58d2018-05-16 07:07:07 -04005210<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5211bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005212</pre>
5213
Cary Clark80247e52018-07-11 16:18:41 -04005214Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04005215<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,
5216return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005217
5218### Parameters
5219
Cary Clark682c58d2018-05-16 07:07:07 -04005220<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
5221 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005222 </tr>
5223</table>
5224
5225### Return Value
5226
5227true if font specifies underline width
5228
5229---
5230
Cary Clark682c58d2018-05-16 07:07:07 -04005231<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005232## hasUnderlinePosition
5233
Cary Clark682c58d2018-05-16 07:07:07 -04005234<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5235bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005236</pre>
5237
Cary Clark80247e52018-07-11 16:18:41 -04005238Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04005239<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,
5240return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005241
5242### Parameters
5243
Cary Clark682c58d2018-05-16 07:07:07 -04005244<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
5245 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005246 </tr>
5247</table>
5248
5249### Return Value
5250
Cary Clark682c58d2018-05-16 07:07:07 -04005251true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005252
5253---
5254
Cary Clark682c58d2018-05-16 07:07:07 -04005255<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005256## hasStrikeoutThickness
5257
Cary Clark682c58d2018-05-16 07:07:07 -04005258<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5259bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005260</pre>
5261
Cary Clark80247e52018-07-11 16:18:41 -04005262Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04005263<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,
5264return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005265
5266### Parameters
5267
Cary Clark682c58d2018-05-16 07:07:07 -04005268<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
5269 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005270 </tr>
5271</table>
5272
5273### Return Value
5274
5275true if font specifies strikeout width
5276
5277---
5278
Cary Clark682c58d2018-05-16 07:07:07 -04005279<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005280## hasStrikeoutPosition
5281
Cary Clark682c58d2018-05-16 07:07:07 -04005282<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5283bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005284</pre>
5285
Cary Clark80247e52018-07-11 16:18:41 -04005286Returns true if <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>, and sets
Cary Clark682c58d2018-05-16 07:07:07 -04005287<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,
5288return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005289
5290### Parameters
5291
Cary Clark682c58d2018-05-16 07:07:07 -04005292<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
5293 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005294 </tr>
5295</table>
5296
5297### Return Value
5298
Cary Clark682c58d2018-05-16 07:07:07 -04005299true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005300
5301---
5302
Cary Clark682c58d2018-05-16 07:07:07 -04005303<a name='SkPaint_getFontMetrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005304## getFontMetrics
5305
Cary Clark682c58d2018-05-16 07:07:07 -04005306<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5307<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 -04005308</pre>
5309
Cary Clark682c58d2018-05-16 07:07:07 -04005310Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
5311The 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 -04005312descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005313If <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>.
5314Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5315dimensions 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>,
5316<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
5317Results 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 -04005318is ignored.
5319
5320### Parameters
5321
Cary Clark682c58d2018-05-16 07:07:07 -04005322<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
5323 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
5324 </tr>
5325 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
5326 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04005327 </tr>
5328</table>
5329
5330### Return Value
5331
5332recommended spacing between lines
5333
5334### Example
5335
5336<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
5337
5338### See Also
5339
Cary Clark682c58d2018-05-16 07:07:07 -04005340<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 -04005341
5342---
5343
Cary Clark682c58d2018-05-16 07:07:07 -04005344<a name='SkPaint_getFontSpacing'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005345## getFontSpacing
5346
Cary Clark682c58d2018-05-16 07:07:07 -04005347<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5348<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005349</pre>
5350
5351Returns the recommended spacing between lines: the sum of metrics
5352descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005353Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5354dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
5355Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005356
5357### Return Value
5358
5359recommended spacing between lines
5360
5361### Example
5362
5363<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
5364
5365#### Example Output
5366
5367~~~~
5368textSize: 12 fontSpacing: 13.9688
5369textSize: 18 fontSpacing: 20.9531
5370textSize: 24 fontSpacing: 27.9375
5371textSize: 32 fontSpacing: 37.25
5372~~~~
5373
5374</fiddle-embed></div>
5375
5376---
5377
Cary Clark682c58d2018-05-16 07:07:07 -04005378<a name='SkPaint_getFontBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005379## getFontBounds
5380
Cary Clark682c58d2018-05-16 07:07:07 -04005381<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5382<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005383</pre>
5384
Cary Clark682c58d2018-05-16 07:07:07 -04005385Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
5386Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
5387ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
5388and <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 -04005389
Cary Clark682c58d2018-05-16 07:07:07 -04005390If <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,
5391returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
5392<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 -04005393
5394### Return Value
5395
Cary Clark682c58d2018-05-16 07:07:07 -04005396union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04005397
5398### Example
5399
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005400<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04005401
5402#### Example Output
5403
5404~~~~
5405metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5406font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5407~~~~
5408
5409</fiddle-embed></div>
5410
5411---
5412
Cary Clark682c58d2018-05-16 07:07:07 -04005413<a name='SkPaint_textToGlyphs'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005414## textToGlyphs
5415
Cary Clark682c58d2018-05-16 07:07:07 -04005416<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5417int <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 -04005418</pre>
5419
Cary Clark682c58d2018-05-16 07:07:07 -04005420Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
5421Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
5422<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>.
5423<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04005424
Cary Clark682c58d2018-05-16 07:07:07 -04005425Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04005426
Cary Clark682c58d2018-05-16 07:07:07 -04005427If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
5428If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04005429
Cary Clark682c58d2018-05-16 07:07:07 -04005430If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
5431<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04005432
5433### Parameters
5434
Cary Clark682c58d2018-05-16 07:07:07 -04005435<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
5436 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5437 </tr>
5438 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
5439 <td>length of character storage in bytes</td>
5440 </tr>
5441 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
5442 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005443 </tr>
5444</table>
5445
5446### Return Value
5447
Cary Clark682c58d2018-05-16 07:07:07 -04005448number 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 -04005449
5450### Example
5451
5452<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
5453
5454---
5455
Cary Clark682c58d2018-05-16 07:07:07 -04005456<a name='SkPaint_countText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005457## countText
5458
Cary Clark682c58d2018-05-16 07:07:07 -04005459<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5460int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005461</pre>
5462
Cary Clark682c58d2018-05-16 07:07:07 -04005463Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
5464Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
5465Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005466
5467### Parameters
5468
Cary Clark682c58d2018-05-16 07:07:07 -04005469<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
5470 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5471 </tr>
5472 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
5473 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04005474 </tr>
5475</table>
5476
5477### Return Value
5478
Cary Clark682c58d2018-05-16 07:07:07 -04005479number 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 -04005480
5481### Example
5482
Cary Clarkf9603982018-07-17 08:20:27 -04005483<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
Cary Clark12799e12017-07-28 15:18:29 -04005484
5485#### Example Output
5486
5487~~~~
5488count = 5
5489~~~~
5490
5491</fiddle-embed></div>
5492
5493---
5494
Cary Clark682c58d2018-05-16 07:07:07 -04005495<a name='SkPaint_containsText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005496## containsText
5497
Cary Clark682c58d2018-05-16 07:07:07 -04005498<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5499bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005500</pre>
5501
Cary Clark682c58d2018-05-16 07:07:07 -04005502Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
5503Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
5504<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005505
Cary Clark682c58d2018-05-16 07:07:07 -04005506If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
5507returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
5508does 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 -04005509
Cary Clark682c58d2018-05-16 07:07:07 -04005510Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04005511
5512### Parameters
5513
Cary Clark682c58d2018-05-16 07:07:07 -04005514<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
5515 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
5516 </tr>
5517 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
5518 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04005519 </tr>
5520</table>
5521
5522### Return Value
5523
Cary Clark682c58d2018-05-16 07:07:07 -04005524true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04005525
Ruiqi Mao94d57c42018-07-02 15:20:10 -04005526<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05005527corresponding to the Unicode surrogate code point.
5528</div>
Cary Clark12799e12017-07-28 15:18:29 -04005529
5530#### Example Output
5531
5532~~~~
55330x00b0 == has char
55340xd800 != has char
5535~~~~
5536
Cary Clark12799e12017-07-28 15:18:29 -04005537### Example
5538
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00005539<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href='#SkPaint_containsText'>containsText</a> returns true that glyph index is greater than zero, not
Cary Clark682c58d2018-05-16 07:07:07 -04005540that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05005541</div>
Cary Clark12799e12017-07-28 15:18:29 -04005542
5543#### Example Output
5544
5545~~~~
55460x01ff == has glyph
55470x0000 != has glyph
55480xffff == has glyph
5549~~~~
5550
5551</fiddle-embed></div>
5552
5553### See Also
5554
Cary Clark682c58d2018-05-16 07:07:07 -04005555<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04005556
5557---
5558
Cary Clark682c58d2018-05-16 07:07:07 -04005559<a name='SkPaint_glyphsToUnichars'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005560## glyphsToUnichars
5561
Cary Clark682c58d2018-05-16 07:07:07 -04005562<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5563void <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 -04005564</pre>
5565
Cary Clark682c58d2018-05-16 07:07:07 -04005566Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
5567<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
5568Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
5569by <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 -04005570
Cary Clark682c58d2018-05-16 07:07:07 -04005571Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005572
5573### Parameters
5574
Cary Clark682c58d2018-05-16 07:07:07 -04005575<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
5576 <td>array of indices into font</td>
5577 </tr>
5578 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
5579 <td>length of glyph array</td>
5580 </tr>
5581 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
5582 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04005583 </tr>
5584</table>
5585
5586### Example
5587
skia-bookmakerb95bbba2018-07-06 05:23:23 +00005588<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 -05005589</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005590
5591---
5592
Cary Clark682c58d2018-05-16 07:07:07 -04005593## <a name='Measure_Text'>Measure Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005594
Cary Clark682c58d2018-05-16 07:07:07 -04005595<a name='SkPaint_measureText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005596## measureText
5597
Cary Clark682c58d2018-05-16 07:07:07 -04005598<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5599<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 -04005600</pre>
5601
Cary Clark682c58d2018-05-16 07:07:07 -04005602Returns the advance width of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5603and the height of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5604The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
5605Uses <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,
5606and <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
5607<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
5608Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
5609The 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 -04005610
5611### Parameters
5612
Cary Clark682c58d2018-05-16 07:07:07 -04005613<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
5614 <td>character codes or glyph indices to be measured</td>
5615 </tr>
5616 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
5617 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
5618 </tr>
5619 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
5620 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005621 </tr>
5622</table>
5623
5624### Return Value
5625
5626advance width or height
5627
5628### Example
5629
Cary Clark83647062018-07-18 16:21:51 -04005630<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005631
5632---
5633
Cary Clark682c58d2018-05-16 07:07:07 -04005634<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05005635
Cary Clark682c58d2018-05-16 07:07:07 -04005636<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5637<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 -04005638</pre>
5639
Cary Clark682c58d2018-05-16 07:07:07 -04005640Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5641and the height of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5642The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
5643Uses <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,
5644and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5645Does 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 -04005646
5647### Parameters
5648
Cary Clark682c58d2018-05-16 07:07:07 -04005649<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
5650 <td>character codes or glyph indices to be measured</td>
5651 </tr>
5652 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
5653 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04005654 </tr>
5655</table>
5656
5657### Return Value
5658
5659advance width or height
5660
5661### Example
5662
5663<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
5664
5665#### Example Output
5666
5667~~~~
5668default width = 5
5669double width = 10
5670~~~~
5671
5672</fiddle-embed></div>
5673
5674---
5675
Cary Clark682c58d2018-05-16 07:07:07 -04005676<a name='SkPaint_breakText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005677## breakText
5678
Cary Clark682c58d2018-05-16 07:07:07 -04005679<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5680size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
5681 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04005682</pre>
5683
Cary Clark682c58d2018-05-16 07:07:07 -04005684Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5685If <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
5686equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5687If <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
5688equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5689Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5690Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
5691Uses <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,
5692and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5693Does 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 -04005694
5695### Parameters
5696
Cary Clark682c58d2018-05-16 07:07:07 -04005697<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
5698 <td>character codes or glyph indices to be measured</td>
5699 </tr>
5700 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
5701 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
5702 </tr>
5703 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
5704 <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>
5705 </tr>
5706 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
5707 <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 -04005708 </tr>
5709</table>
5710
5711### Return Value
5712
Cary Clark682c58d2018-05-16 07:07:07 -04005713bytes 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 -04005714
5715### Example
5716
Cary Clark682c58d2018-05-16 07:07:07 -04005717<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
5718<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 -05005719</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005720
5721---
5722
Cary Clark682c58d2018-05-16 07:07:07 -04005723<a name='SkPaint_getTextWidths'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005724## getTextWidths
5725
Cary Clark682c58d2018-05-16 07:07:07 -04005726<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5727int <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 -04005728</pre>
5729
Cary Clark682c58d2018-05-16 07:07:07 -04005730Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
5731the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
5732Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
5733If <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.
5734if <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.
5735If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the horizontal advance.
5736If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the vertical advance.
5737Uses <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,
5738and <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>.
5739Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
5740Does 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 -04005741
5742### Parameters
5743
Cary Clark682c58d2018-05-16 07:07:07 -04005744<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
5745 <td>character codes or glyph indices to be measured</td>
5746 </tr>
5747 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
5748 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
5749 </tr>
5750 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
5751 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
5752 </tr>
5753 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
5754 <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 -04005755 </tr>
5756</table>
5757
5758### Return Value
5759
Cary Clark682c58d2018-05-16 07:07:07 -04005760glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005761
5762### Example
5763
Cary Clarkf9603982018-07-17 08:20:27 -04005764<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href='undocumented#Glyph'>Glyphs</a> increase for stroked <a href='#SkPaint_getTextWidths_text'>text</a>, but <a href='#SkPaint_getTextWidths_text'>text</a> advance remains the same.
Cary Clark682c58d2018-05-16 07:07:07 -04005765The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05005766</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005767
5768---
5769
Cary Clark682c58d2018-05-16 07:07:07 -04005770## <a name='Text_Path'>Text Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05005771
Cary Clark682c58d2018-05-16 07:07:07 -04005772<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 -04005773
Cary Clark682c58d2018-05-16 07:07:07 -04005774<a name='SkPaint_getTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005775## getTextPath
5776
Cary Clark682c58d2018-05-16 07:07:07 -04005777<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5778void <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 -04005779</pre>
5780
Cary Clark682c58d2018-05-16 07:07:07 -04005781Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
5782Uses <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,
5783and <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.
5784All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
5785Uses <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 -04005786
5787### Parameters
5788
Cary Clark682c58d2018-05-16 07:07:07 -04005789<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
5790 <td>character codes or glyph indices</td>
5791 </tr>
5792 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
5793 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
5794 </tr>
5795 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005796 <td><a href='#SkPaint_getTextPath_x'>x</a>-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005797 </tr>
5798 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005799 <td><a href='#SkPaint_getTextPath_y'>y</a>-axis value of the origin of the <a href='#SkPaint_getTextPath_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005800 </tr>
5801 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
5802 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005803 </tr>
5804</table>
5805
5806### Example
5807
Cary Clark682c58d2018-05-16 07:07:07 -04005808<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 -05005809the offset location. The result is rendered with one draw call.
5810</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005811
5812---
5813
Cary Clark682c58d2018-05-16 07:07:07 -04005814<a name='SkPaint_getPosTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005815## getPosTextPath
5816
Cary Clark682c58d2018-05-16 07:07:07 -04005817<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5818void <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 -04005819</pre>
5820
Cary Clark682c58d2018-05-16 07:07:07 -04005821Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
5822Uses <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,
5823and <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.
5824All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
5825Uses <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>.
5826<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04005827
5828### Parameters
5829
Cary Clark682c58d2018-05-16 07:07:07 -04005830<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
5831 <td>character codes or glyph indices</td>
5832 </tr>
5833 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
5834 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
5835 </tr>
5836 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
5837 <td>positions of each glyph</td>
5838 </tr>
5839 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
5840 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005841 </tr>
5842</table>
5843
5844### Example
5845
Cary Clark682c58d2018-05-16 07:07:07 -04005846<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 -05005847</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005848
5849---
5850
Cary Clark682c58d2018-05-16 07:07:07 -04005851## <a name='Text_Intercepts'>Text Intercepts</a>
Cary Clark08895c42018-02-01 09:37:32 -05005852
Cary Clark682c58d2018-05-16 07:07:07 -04005853<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
5854of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04005855underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005856
Cary Clark682c58d2018-05-16 07:07:07 -04005857<a name='SkPaint_getTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005858## getTextIntercepts
5859
Cary Clark682c58d2018-05-16 07:07:07 -04005860<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5861int <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,
5862 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005863</pre>
5864
Cary Clark682c58d2018-05-16 07:07:07 -04005865Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
5866<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
5867The 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 -05005868the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005869Uses <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,
5870and <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.
5871Uses <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 +00005872
Cary Clark682c58d2018-05-16 07:07:07 -04005873Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005874
Cary Clark682c58d2018-05-16 07:07:07 -04005875<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005876
5877### Parameters
5878
Cary Clark682c58d2018-05-16 07:07:07 -04005879<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
5880 <td>character codes or glyph indices</td>
5881 </tr>
5882 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
5883 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5884 </tr>
5885 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005886 <td><a href='#SkPaint_getTextIntercepts_x'>x</a>-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005887 </tr>
5888 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005889 <td><a href='#SkPaint_getTextIntercepts_y'>y</a>-axis value of the origin of the <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -04005890 </tr>
5891 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5892 <td>lower and upper line parallel to the advance</td>
5893 </tr>
5894 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5895 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005896 </tr>
5897</table>
5898
5899### Return Value
5900
5901number of intersections; may be zero
5902
5903### Example
5904
Cary Clark1a8d7622018-03-05 13:26:16 -05005905<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
5906</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005907
5908---
5909
Cary Clark682c58d2018-05-16 07:07:07 -04005910<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005911## getPosTextIntercepts
5912
Cary Clark682c58d2018-05-16 07:07:07 -04005913<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5914int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
5915 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005916</pre>
5917
Cary Clark682c58d2018-05-16 07:07:07 -04005918Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5919<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5920The 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 -05005921the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005922Uses <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,
5923and <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.
5924Uses <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 +00005925
Cary Clark682c58d2018-05-16 07:07:07 -04005926Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005927
Cary Clark682c58d2018-05-16 07:07:07 -04005928<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005929
5930### Parameters
5931
Cary Clark682c58d2018-05-16 07:07:07 -04005932<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5933 <td>character codes or glyph indices</td>
5934 </tr>
5935 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5936 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5937 </tr>
5938 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5939 <td>positions of each glyph</td>
5940 </tr>
5941 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5942 <td>lower and upper line parallel to the advance</td>
5943 </tr>
5944 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5945 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005946 </tr>
5947</table>
5948
5949### Return Value
5950
Cary Clarka523d2d2017-08-30 08:58:10 -04005951number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005952
5953### Example
5954
skia-bookmaker61cc9fa2018-07-11 05:28:17 +00005955<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 -05005956</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005957
5958---
5959
Cary Clark682c58d2018-05-16 07:07:07 -04005960<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005961## getPosTextHIntercepts
5962
Cary Clark682c58d2018-05-16 07:07:07 -04005963<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5964int <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,
5965 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005966</pre>
5967
Cary Clark682c58d2018-05-16 07:07:07 -04005968Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5969<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5970The 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 -05005971the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005972Uses <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,
5973and <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.
5974Uses <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 +00005975
Cary Clark682c58d2018-05-16 07:07:07 -04005976Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005977
Cary Clark682c58d2018-05-16 07:07:07 -04005978<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005979
5980### Parameters
5981
Cary Clark682c58d2018-05-16 07:07:07 -04005982<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5983 <td>character codes or glyph indices</td>
5984 </tr>
5985 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5986 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5987 </tr>
5988 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5989 <td>positions of each glyph in x</td>
5990 </tr>
5991 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5992 <td>position of each glyph in y</td>
5993 </tr>
5994 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5995 <td>lower and upper line parallel to the advance</td>
5996 </tr>
5997 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5998 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005999 </tr>
6000</table>
6001
6002### Return Value
6003
6004number of intersections; may be zero
6005
6006### Example
6007
Cary Clark80247e52018-07-11 16:18:41 -04006008<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 -05006009</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04006010
6011---
6012
Cary Clark682c58d2018-05-16 07:07:07 -04006013<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006014## getTextBlobIntercepts
6015
Cary Clark682c58d2018-05-16 07:07:07 -04006016<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clarkd2ca79c2018-08-10 13:09:13 -04006017int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='SkTextBlob_Reference#SkTextBlob'>SkTextBlob</a>* blob, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04006018</pre>
6019
Cary Clark682c58d2018-05-16 07:07:07 -04006020Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
6021<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
6022The 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 -05006023the string.
Cary Clark682c58d2018-05-16 07:07:07 -04006024Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
6025and <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.
6026Uses 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 +00006027
Cary Clark682c58d2018-05-16 07:07:07 -04006028<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 -05006029
Cary Clark682c58d2018-05-16 07:07:07 -04006030Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00006031
Cary Clark682c58d2018-05-16 07:07:07 -04006032<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04006033
6034### Parameters
6035
Cary Clark682c58d2018-05-16 07:07:07 -04006036<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
6037 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
6038 </tr>
6039 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
6040 <td>lower and upper line parallel to the advance</td>
6041 </tr>
6042 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
6043 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04006044 </tr>
6045</table>
6046
6047### Return Value
6048
6049number of intersections; may be zero
6050
6051### Example
6052
skia-bookmaker44bad2e2018-07-05 05:35:27 +00006053<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04006054
6055---
6056
Cary Clark682c58d2018-05-16 07:07:07 -04006057<a name='SkPaint_nothingToDraw'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006058## nothingToDraw
6059
Cary Clark682c58d2018-05-16 07:07:07 -04006060<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6061bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04006062</pre>
6063
Cary Clark682c58d2018-05-16 07:07:07 -04006064Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
6065otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04006066
Cary Clark224c7002018-06-27 11:00:21 -04006067Returns true if, for example, <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> combined with <a href='SkColor_Reference#Alpha'>Color Alpha</a> computes a
Cary Clark682c58d2018-05-16 07:07:07 -04006068new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04006069
6070### Return Value
6071
Cary Clark682c58d2018-05-16 07:07:07 -04006072true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04006073
6074### Example
6075
Cary Clark83647062018-07-18 16:21:51 -04006076<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04006077
6078#### Example Output
6079
6080~~~~
6081initial nothing to draw: false
6082blend dst nothing to draw: true
6083blend src over nothing to draw: false
6084alpha 0 nothing to draw: true
6085~~~~
6086
6087</fiddle-embed></div>
6088
6089---
6090
Cary Clark682c58d2018-05-16 07:07:07 -04006091## <a name='Fast_Bounds'>Fast Bounds</a>
Cary Clark08895c42018-02-01 09:37:32 -05006092
Cary Clark682c58d2018-05-16 07:07:07 -04006093<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
6094<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04006095
Cary Clark682c58d2018-05-16 07:07:07 -04006096<a name='SkPaint_canComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006097## canComputeFastBounds
6098
Cary Clark682c58d2018-05-16 07:07:07 -04006099<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6100bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04006101</pre>
6102
Cary Clark682c58d2018-05-16 07:07:07 -04006103Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
6104to 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 -04006105always returns false.
6106
6107### Return Value
6108
Cary Clark682c58d2018-05-16 07:07:07 -04006109true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04006110
6111---
6112
Cary Clark682c58d2018-05-16 07:07:07 -04006113<a name='SkPaint_computeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006114## computeFastBounds
6115
Cary Clark682c58d2018-05-16 07:07:07 -04006116<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6117const <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 -04006118</pre>
6119
Cary Clark682c58d2018-05-16 07:07:07 -04006120Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04006121raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04006122effects 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 -04006123parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04006124for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04006125
Cary Clark682c58d2018-05-16 07:07:07 -04006126The 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
6127should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
6128use 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
6129<a href='SkRect_Reference#Rect'>Rect</a>.
6130
Cary Clark12799e12017-07-28 15:18:29 -04006131### Parameters
6132
Cary Clark682c58d2018-05-16 07:07:07 -04006133<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6134 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6135 </tr>
6136 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6137 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04006138 </tr>
6139</table>
6140
6141### Return Value
6142
6143fast computed bounds
6144
6145---
6146
Cary Clark682c58d2018-05-16 07:07:07 -04006147<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006148## computeFastStrokeBounds
6149
Cary Clark682c58d2018-05-16 07:07:07 -04006150<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6151const <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 -04006152</pre>
6153
6154### Parameters
6155
Cary Clark682c58d2018-05-16 07:07:07 -04006156<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
6157 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6158 </tr>
6159 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
6160 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04006161 </tr>
6162</table>
6163
6164### Return Value
6165
6166fast computed bounds
6167
6168---
6169
Cary Clark682c58d2018-05-16 07:07:07 -04006170<a name='SkPaint_doComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006171## doComputeFastBounds
6172
Cary Clark682c58d2018-05-16 07:07:07 -04006173<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6174const <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 -04006175</pre>
6176
Cary Clark682c58d2018-05-16 07:07:07 -04006177Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
6178account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
6179altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04006180
6181### Parameters
6182
Cary Clark682c58d2018-05-16 07:07:07 -04006183<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6184 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6185 </tr>
6186 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6187 <td>computed bounds of geometry</td>
6188 </tr>
6189 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
6190 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04006191 </tr>
6192</table>
6193
6194### Return Value
6195
6196fast computed bounds
6197
6198---
6199
Cary Clark682c58d2018-05-16 07:07:07 -04006200## <a name='Utility'>Utility</a>
Cary Clark78de7512018-02-07 07:27:09 -05006201
Cary Clark78de7512018-02-07 07:27:09 -05006202
Cary Clark682c58d2018-05-16 07:07:07 -04006203<table style='border-collapse: collapse; width: 62.5em'>
6204 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
6205<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
6206 <tr style='background-color: #f0f0f0; '>
6207 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
6208 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
6209 </tr>
6210 <tr>
6211 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
6212 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
6213 </tr>
6214 <tr style='background-color: #f0f0f0; '>
6215 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
6216 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
6217 </tr>
6218 <tr>
6219 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
6220 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
6221 </tr>
6222 <tr style='background-color: #f0f0f0; '>
6223 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
6224 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
6225 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04006226</table>
Cary Clark224c7002018-06-27 11:00:21 -04006227