blob: a905e4c9107b96c3609cdf4495851738017a0324 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
Cary Clark682c58d2018-05-16 07:07:07 -04004# <a name='Paint'>Paint</a>
Cary Clarke4aa3712017-09-15 02:56:12 -04005
Cary Clark682c58d2018-05-16 07:07:07 -04006# <a name='SkPaint'>Class SkPaint</a>
7<a href='#Paint'>Paint</a> controls options applied when drawing and measuring. <a href='#Paint'>Paint</a> collects all
8options outside of the <a href='SkCanvas_Reference#Clip'>Canvas Clip</a> and <a href='SkCanvas_Reference#Matrix'>Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -04009
Cary Clark7cfcbca2018-01-04 16:11:51 -050010Various options apply to text, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -040011
12Some options may not be implemented on all platforms; in these cases, setting
Cary Clark682c58d2018-05-16 07:07:07 -040013the option has no effect. Some options are conveniences that duplicate <a href='SkCanvas_Reference#Canvas'>Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040014functionality; for instance, text size is identical to matrix scale.
15
Cary Clark682c58d2018-05-16 07:07:07 -040016<a href='#Paint'>Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
17pipeline and multiple pipeline stages may be affected by a single <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040018
Cary Clark682c58d2018-05-16 07:07:07 -040019<a href='#Paint'>Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040020algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark682c58d2018-05-16 07:07:07 -040021<a href='#Paint'>Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -040022
Cary Clark682c58d2018-05-16 07:07:07 -040023The objects contained by <a href='#Paint'>Paint</a> are opaque, and cannot be edited outside of the <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -040024to affect it. The implementation is free to defer computations associated with the
Cary Clark682c58d2018-05-16 07:07:07 -040025<a href='#Paint'>Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
Cary Clarkffb3d682018-05-17 12:17:28 -040026<a href='SkPath_Reference#Path'>Path</a> geometries with <a href='#Anti_Alias'>Anti Aliasing</a>, regardless of how <a href='#SkPaint_kAntiAlias_Flag'>SkPaint::kAntiAlias Flag</a>
Cary Clark682c58d2018-05-16 07:07:07 -040027is set in <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040028
Cary Clark682c58d2018-05-16 07:07:07 -040029<a href='#Paint'>Paint</a> describes a single color, a single font, a single image quality, and so on.
Cary Clark12799e12017-07-28 15:18:29 -040030Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark682c58d2018-05-16 07:07:07 -040031<a href='undocumented#Shader'>Shader</a> attached to <a href='#Paint'>Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040032
Cary Clark682c58d2018-05-16 07:07:07 -040033## Overview
Cary Clark5081eed2018-01-22 07:55:48 -050034
Cary Clark682c58d2018-05-16 07:07:07 -040035<table style='border-collapse: collapse; width: 62.5em'>
36 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
37<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
38 <tr style='background-color: #f0f0f0; '>
39 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constant'>Constants</a></td>
40 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>enum and enum class, and their const values</td>
41 </tr>
42 <tr>
43 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Constructor'>Constructors</a></td>
44 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>functions that construct <a href='#SkPaint'>SkPaint</a></td>
45 </tr>
46 <tr style='background-color: #f0f0f0; '>
47 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Member_Function'>Functions</a></td>
48 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>global and class member functions</td>
49 </tr>
50 <tr>
51 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Operator'>Operators</a></td>
52 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>operator overloading methods</td>
53 </tr>
54 <tr style='background-color: #f0f0f0; '>
55 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Related_Function'>Related Functions</a></td>
56 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>similar member functions grouped together</td>
57 </tr>
58 <tr>
59 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Struct'>Struct Declarations</a></td>
60 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>embedded struct members</td>
61 </tr>
62</table>
Cary Clark12799e12017-07-28 15:18:29 -040063
Cary Clark12799e12017-07-28 15:18:29 -040064
Cary Clark682c58d2018-05-16 07:07:07 -040065## <a name='Related_Function'>Related Function</a>
Cary Clark12799e12017-07-28 15:18:29 -040066
Cary Clark12799e12017-07-28 15:18:29 -040067
Cary Clark682c58d2018-05-16 07:07:07 -040068SkPaint global, <code>struct</code>, and <code>class</code> related member functions share a topic.
69<table style='border-collapse: collapse; width: 62.5em'>
70 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
71<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
72 <tr style='background-color: #f0f0f0; '>
73 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Alpha_Methods'>Alpha Methods</a></td>
74 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkColor_Reference#Alpha'>Alpha</a></td>
75 </tr>
76 <tr>
Cary Clarkffb3d682018-05-17 12:17:28 -040077 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -040078 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximating coverage with transparency</td>
79 </tr>
80 <tr style='background-color: #f0f0f0; '>
81 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Automatic_Hinting'>Automatic Hinting</a></td>
82 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>always adjust glyph paths</td>
83 </tr>
84 <tr>
85 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Blend_Mode_Methods'>Blend Mode Methods</a></td>
Cary Clark224c7002018-06-27 11:00:21 -040086 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -040087 </tr>
88 <tr style='background-color: #f0f0f0; '>
89 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Filter_Methods'>Color Filter Methods</a></td>
90 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Color_Filter'>Color Filter</a></td>
91 </tr>
92 <tr>
93 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Color_Methods'>Color Methods</a></td>
94 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='SkColor_Reference#Color'>Color</a></td>
95 </tr>
96 <tr style='background-color: #f0f0f0; '>
97 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Device_Text'>Device Text</a></td>
98 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>increase precision of glyph position</td>
99 </tr>
100 <tr>
101 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Dither'>Dither</a></td>
102 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distributing color error</td>
103 </tr>
104 <tr style='background-color: #f0f0f0; '>
105 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Draw_Looper_Methods'>Draw Looper Methods</a></td>
106 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Draw_Looper'>Draw Looper</a></td>
107 </tr>
108 <tr>
109 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fake_Bold'>Fake Bold</a></td>
110 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximate font styles</td>
111 </tr>
112 <tr style='background-color: #f0f0f0; '>
113 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fast_Bounds'>Fast Bounds</a></td>
114 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>approximate area required by <a href='#Paint'>Paint</a></td>
115 </tr>
116 <tr>
117 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Fill_Path'>Fill Path</a></td>
118 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>make <a href='SkPath_Reference#Path'>Path</a> from <a href='undocumented#Path_Effect'>Path Effect</a>, stroking</td>
119 </tr>
120 <tr style='background-color: #f0f0f0; '>
121 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Filter_Quality_Methods'>Filter Quality Methods</a></td>
122 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Filter_Quality'>Filter Quality</a></td>
123 </tr>
124 <tr>
125 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
126 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>attributes represented by single bits</td>
127 </tr>
128 <tr style='background-color: #f0f0f0; '>
129 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
130 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a></td>
131 </tr>
132 <tr>
133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Font_Metrics'>Font Metrics</a></td>
134 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>common glyph dimensions</td>
135 </tr>
136 <tr style='background-color: #f0f0f0; '>
137 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a></td>
138 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph spacing affected by hinting</td>
139 </tr>
140 <tr>
141 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
142 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outline adjustment</td>
143 </tr>
144 <tr style='background-color: #f0f0f0; '>
145 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Image_Filter_Methods'>Image Filter Methods</a></td>
146 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Image_Filter'>Image Filter</a></td>
147 </tr>
148 <tr>
149 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Initializers'>Initializers</a></td>
150 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructors and initialization</td>
151 </tr>
152 <tr style='background-color: #f0f0f0; '>
153 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#LCD_Text'>LCD Text</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400154 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text relying on the order of RGB stripes</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400155 </tr>
156 <tr>
157 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Linear_Text'>Linear Text</a></td>
158 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>selects text rendering as <a href='undocumented#Glyph'>Glyph</a> or <a href='SkPath_Reference#Path'>Path</a></td>
159 </tr>
160 <tr style='background-color: #f0f0f0; '>
161 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Management'>Management</a></td>
162 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>paint copying, moving, comparing</td>
163 </tr>
164 <tr>
165 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Mask_Filter_Methods'>Mask Filter Methods</a></td>
166 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Mask_Filter'>Mask Filter</a></td>
167 </tr>
168 <tr style='background-color: #f0f0f0; '>
169 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Measure_Text'>Measure Text</a></td>
170 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>width, height, bounds of text</td>
171 </tr>
172 <tr>
173 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Miter_Limit'>Miter Limit</a></td>
174 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum length of stroked corners</td>
175 </tr>
176 <tr style='background-color: #f0f0f0; '>
177 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Path_Effect_Methods'>Path Effect Methods</a></td>
178 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Path_Effect'>Path Effect</a></td>
179 </tr>
180 <tr>
181 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Shader_Methods'>Shader Methods</a></td>
182 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Shader'>Shader</a></td>
183 </tr>
184 <tr style='background-color: #f0f0f0; '>
185 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Cap'>Stroke Cap</a></td>
186 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decorations at ends of open strokes</td>
187 </tr>
188 <tr>
189 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Join'>Stroke Join</a></td>
190 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decoration at corners of strokes</td>
191 </tr>
192 <tr style='background-color: #f0f0f0; '>
193 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Stroke_Width'>Stroke Width</a></td>
194 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>thickness perpendicular to geometry</td>
195 </tr>
196 <tr>
197 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
198 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>geometry filling, stroking</td>
199 </tr>
200 <tr style='background-color: #f0f0f0; '>
201 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Fill'>Style Fill</a></td>
202 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>fill and stroke</td>
203 </tr>
204 <tr>
205 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Hairline'>Style Hairline</a></td>
206 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lines and curves with minimal width</td>
207 </tr>
208 <tr style='background-color: #f0f0f0; '>
209 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Style_Stroke'>Style Stroke</a></td>
210 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>lines and curves with width</td>
211 </tr>
212 <tr>
213 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Subpixel_Text'>Subpixel Text</a></td>
214 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses pixel transparency to represent fractional offset</td>
215 </tr>
216 <tr style='background-color: #f0f0f0; '>
217 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Align'>Text Align</a></td>
218 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text placement relative to position</td>
219 </tr>
220 <tr>
221 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Encoding'>Text Encoding</a></td>
222 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text encoded as characters or <a href='undocumented#Glyph'>Glyphs</a></td>
223 </tr>
224 <tr style='background-color: #f0f0f0; '>
225 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Intercepts'>Text Intercepts</a></td>
226 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>advanced underline, strike through</td>
227 </tr>
228 <tr>
229 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Path'>Text Path</a></td>
230 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>geometry of <a href='undocumented#Glyph'>Glyphs</a></td>
231 </tr>
232 <tr style='background-color: #f0f0f0; '>
233 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Scale_X'>Text Scale X</a></td>
234 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text horizontal scale</td>
235 </tr>
236 <tr>
237 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Size'>Text Size</a></td>
238 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>overall height in points</td>
239 </tr>
240 <tr style='background-color: #f0f0f0; '>
241 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Text_Skew_X'>Text Skew X</a></td>
242 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>text horizontal slant</td>
243 </tr>
244 <tr>
245 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Typeface_Methods'>Typeface Methods</a></td>
246 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>get and set <a href='undocumented#Typeface'>Typeface</a></td>
247 </tr>
248 <tr style='background-color: #f0f0f0; '>
249 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Utility'>Utility</a></td>
250 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>rarely called management functions</td>
251 </tr>
252 <tr>
253 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#Vertical_Text'>Vertical Text</a></td>
254 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>orient text from top to bottom</td>
255 </tr>
256</table>
Cary Clark12799e12017-07-28 15:18:29 -0400257
Cary Clark682c58d2018-05-16 07:07:07 -0400258## <a name='Constant'>Constant</a>
Cary Clark12799e12017-07-28 15:18:29 -0400259
Cary Clark12799e12017-07-28 15:18:29 -0400260
Cary Clark682c58d2018-05-16 07:07:07 -0400261SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
262<table style='border-collapse: collapse; width: 62.5em'>
263 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
264<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
265 <tr style='background-color: #f0f0f0; '>
266 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Align'>Align</a></td>
267 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph locations relative to text position</td>
268 </tr>
269 <tr>
270 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Cap'>Cap</a></td>
271 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>start and end geometry on stroked shapes</td>
272 </tr>
273 <tr style='background-color: #f0f0f0; '>
274 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Flags'>Flags</a></td>
275 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values described by bits and masks</td>
276 </tr>
277 <tr>
278 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Hinting'>Hinting</a></td>
279 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>level of glyph outline adjustment</td>
280 </tr>
281 <tr style='background-color: #f0f0f0; '>
282 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Join'>Join</a></td>
283 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>corner geometry on stroked shapes</td>
284 </tr>
285 <tr>
286 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_Style'>Style</a></td>
287 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>stroke, fill, or both</td>
288 </tr>
289 <tr style='background-color: #f0f0f0; '>
290 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_TextEncoding'>TextEncoding</a></td>
291 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>character or glyph encoded size</td>
292 </tr>
293 <tr>
294 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAlignCount'>kAlignCount</a></td>
295 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Text_Align'>Text Align</a> values defined</td>
296 </tr>
297 <tr style='background-color: #f0f0f0; '>
298 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAllFlags'>kAllFlags</a></td>
299 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask of all <a href='#SkPaint_Flags'>Flags</a></td>
300 </tr>
301 <tr>
302 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400303 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400304 </tr>
305 <tr style='background-color: #f0f0f0; '>
306 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
307 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Automatic_Hinting'>Automatic Hinting</a></td>
308 </tr>
309 <tr>
310 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kBevel_Join'>kBevel Join</a></td>
311 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>connects outside edges</td>
312 </tr>
313 <tr style='background-color: #f0f0f0; '>
314 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>no stroke extension</td>
316 </tr>
317 <tr>
318 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCapCount'>kCapCount</a></td>
319 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Cap'>Stroke Cap</a> values defined</td>
320 </tr>
321 <tr style='background-color: #f0f0f0; '>
322 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kCenter_Align'>kCenter Align</a></td>
323 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>centers line of glyphs by its width or height</td>
324 </tr>
325 <tr>
326 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Cap'>kDefault Cap</a></td>
327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kButt_Cap'>kButt Cap</a></td>
328 </tr>
329 <tr style='background-color: #f0f0f0; '>
330 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDefault_Join'>kDefault Join</a></td>
331 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to <a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
332 </tr>
333 <tr>
334 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
335 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Dither'>Dither</a></td>
336 </tr>
337 <tr style='background-color: #f0f0f0; '>
338 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
339 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
340 </tr>
341 <tr>
342 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
343 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Fake_Bold'>Fake Bold</a></td>
344 </tr>
345 <tr style='background-color: #f0f0f0; '>
346 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFill_Style'>kFill Style</a></td>
347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to fill geometry</td>
348 </tr>
349 <tr>
350 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kFull_Hinting'>kFull Hinting</a></td>
Cary Clark137b8742018-05-30 09:21:49 -0400351 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>modifies glyph outlines for maximum constrast</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400352 </tr>
353 <tr style='background-color: #f0f0f0; '>
354 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
355 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent glyph indices</td>
356 </tr>
357 <tr>
358 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kJoinCount'>kJoinCount</a></td>
359 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#Stroke_Join'>Stroke Join</a> values defined</td>
360 </tr>
361 <tr style='background-color: #f0f0f0; '>
362 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
363 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#LCD_Text'>LCD Text</a></td>
364 </tr>
365 <tr>
366 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Cap'>kLast Cap</a></td>
367 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>largest <a href='#Stroke_Cap'>Stroke Cap</a> value</td>
368 </tr>
369 <tr style='background-color: #f0f0f0; '>
370 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLast_Join'>kLast Join</a></td>
371 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>equivalent to the largest value for <a href='#Stroke_Join'>Stroke Join</a></td>
372 </tr>
373 <tr>
374 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLeft_Align'>kLeft Align</a></td>
375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>positions glyph by computed font offset</td>
376 </tr>
377 <tr style='background-color: #f0f0f0; '>
378 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
379 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Linear_Text'>Linear Text</a></td>
380 </tr>
381 <tr>
382 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kMiter_Join'>kMiter Join</a></td>
383 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extends to <a href='#Miter_Limit'>Miter Limit</a></td>
384 </tr>
385 <tr style='background-color: #f0f0f0; '>
386 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNo_Hinting'>kNo Hinting</a></td>
387 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines unchanged</td>
388 </tr>
389 <tr>
390 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a></td>
391 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>glyph outlines modified to improve constrast</td>
392 </tr>
393 <tr style='background-color: #f0f0f0; '>
394 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRight_Align'>kRight Align</a></td>
395 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves lines of glyphs by its width or height</td>
396 </tr>
397 <tr>
398 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Cap'>kRound Cap</a></td>
399 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
400 </tr>
401 <tr style='background-color: #f0f0f0; '>
402 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kRound_Join'>kRound Join</a></td>
403 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds circle</td>
404 </tr>
405 <tr>
406 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a></td>
407 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimal modification to improve constrast</td>
408 </tr>
409 <tr style='background-color: #f0f0f0; '>
410 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSquare_Cap'>kSquare Cap</a></td>
411 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>adds square</td>
412 </tr>
413 <tr>
414 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a></td>
415 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to stroke and fill geometry</td>
416 </tr>
417 <tr style='background-color: #f0f0f0; '>
418 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStroke_Style'>kStroke Style</a></td>
419 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set to stroke geometry</td>
420 </tr>
421 <tr>
422 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kStyleCount'>kStyleCount</a></td>
423 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>number of different <a href='#SkPaint_Style'>Style</a> values defined</td>
424 </tr>
425 <tr style='background-color: #f0f0f0; '>
426 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
427 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Subpixel_Text'>Subpixel Text</a></td>
428 </tr>
429 <tr>
430 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a></td>
431 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses two byte words to represent most of Unicode</td>
432 </tr>
433 <tr style='background-color: #f0f0f0; '>
434 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a></td>
435 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses four byte words to represent all of Unicode</td>
436 </tr>
437 <tr>
438 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a></td>
439 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uses bytes to represent UTF-8 or ASCII</td>
440 </tr>
441 <tr style='background-color: #f0f0f0; '>
442 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
443 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>mask for setting <a href='#Vertical_Text'>Vertical Text</a></td>
444 </tr>
445</table>
Cary Clark12799e12017-07-28 15:18:29 -0400446
Cary Clark682c58d2018-05-16 07:07:07 -0400447## <a name='Struct'>Struct</a>
Cary Clark12799e12017-07-28 15:18:29 -0400448
Cary Clark12799e12017-07-28 15:18:29 -0400449
Cary Clark682c58d2018-05-16 07:07:07 -0400450SkPaint uses C++ structs to declare the public data structures and interfaces.
451<table style='border-collapse: collapse; width: 62.5em'>
452 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
453<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
454 <tr style='background-color: #f0f0f0; '>
455 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics'>FontMetrics</a></td>
456 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>values computed by <a href='undocumented#Font_Manager'>Font Manager</a> using <a href='undocumented#Typeface'>Typeface</a></td>
457 </tr>
458</table>
459
Cary Clark682c58d2018-05-16 07:07:07 -0400460## <a name='Constructor'>Constructor</a>
461
462
463SkPaint can be constructed or initialized by these functions, including C++ class constructors.
464<table style='border-collapse: collapse; width: 62.5em'>
465 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
466<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
467 <tr style='background-color: #f0f0f0; '>
468 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_empty_constructor'>SkPaint()</a></td>
469 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>constructs with default values</td>
470 </tr>
471 <tr>
472 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_SkPaint'>SkPaint(SkPaint&& paint)</a></td>
473 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
474 </tr>
475 <tr style='background-color: #f0f0f0; '>
476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_const_SkPaint'>SkPaint(const SkPaint& paint)</a></td>
477 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
478 </tr>
479 <tr>
480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_destructor'>~SkPaint()</a></td>
481 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>decreases <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects</td>
482 </tr>
483</table>
484
Cary Clark682c58d2018-05-16 07:07:07 -0400485## <a name='Operator'>Operator</a>
486
487
488SkPaint operators inline class member functions with arithmetic equivalents.
489<table style='border-collapse: collapse; width: 62.5em'>
490 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
491<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
492 <tr style='background-color: #f0f0f0; '>
493 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a></td>
494 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for inequality</td>
495 </tr>
496 <tr>
497 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a></td>
498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>moves paint without copying it</td>
499 </tr>
500 <tr style='background-color: #f0f0f0; '>
501 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a></td>
502 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>makes a shallow copy</td>
503 </tr>
504 <tr>
505 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a></td>
506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>compares paints for equality</td>
507 </tr>
508</table>
509
Cary Clark682c58d2018-05-16 07:07:07 -0400510## <a name='Member_Function'>Member Function</a>
511
512
513SkPaint member functions read and modify the structure properties.
514<table style='border-collapse: collapse; width: 62.5em'>
515 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
516<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
517 <tr style='background-color: #f0f0f0; '>
518 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_breakText'>breakText</a></td>
519 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text that fits in a width</td>
520 </tr>
521 <tr>
522 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a></td>
523 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if settings allow for fast bounds computation</td>
524 </tr>
525 <tr style='background-color: #f0f0f0; '>
526 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastBounds'>computeFastBounds</a></td>
527 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill bounds for quick reject tests</td>
528 </tr>
529 <tr>
530 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_computeFastStrokeBounds'>computeFastStrokeBounds</a></td>
531 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns stroke bounds for quick reject tests</td>
532 </tr>
533 <tr style='background-color: #f0f0f0; '>
534 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
535 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
536 </tr>
537 <tr>
538 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
539 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
540 </tr>
541 <tr style='background-color: #f0f0f0; '>
542 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_doComputeFastBounds'>doComputeFastBounds</a></td>
543 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns bounds for quick reject tests</td>
544 </tr>
545 <tr>
546 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getAlpha'>getAlpha</a></td>
547 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
548 </tr>
549 <tr style='background-color: #f0f0f0; '>
550 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getBlendMode'>getBlendMode</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400551 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, how colors combine with <a href='undocumented#Device'>Device</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400552 </tr>
553 <tr>
554 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColor'>getColor</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400555 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400556 </tr>
557 <tr style='background-color: #f0f0f0; '>
558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getColorFilter'>getColorFilter</a></td>
559 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Color_Filter'>Color Filter</a>, how colors are altered</td>
560 </tr>
561 <tr>
562 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getDrawLooper'>getDrawLooper</a></td>
563 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
564 </tr>
565 <tr style='background-color: #f0f0f0; '>
566 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFillPath'>getFillPath</a></td>
567 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns fill path equivalent to stroke</td>
568 </tr>
569 <tr>
570 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFilterQuality'>getFilterQuality</a></td>
571 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, image filtering level</td>
572 </tr>
573 <tr style='background-color: #f0f0f0; '>
574 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFlags'>getFlags</a></td>
575 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Flags'>Flags</a> stored in a bit field</td>
576 </tr>
577 <tr>
578 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontBounds'>getFontBounds</a></td>
579 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns union all glyph bounds</td>
580 </tr>
581 <tr style='background-color: #f0f0f0; '>
582 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontMetrics'>getFontMetrics</a></td>
583 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a> metrics scaled by text size</td>
584 </tr>
585 <tr>
586 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getFontSpacing'>getFontSpacing</a></td>
587 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns recommended spacing between lines</td>
588 </tr>
589 <tr style='background-color: #f0f0f0; '>
590 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHash'>getHash</a></td>
591 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns a shallow hash for equality checks</td>
592 </tr>
593 <tr>
594 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getHinting'>getHinting</a></td>
595 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
596 </tr>
597 <tr style='background-color: #f0f0f0; '>
598 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getImageFilter'>getImageFilter</a></td>
599 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
600 </tr>
601 <tr>
602 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getMaskFilter'>getMaskFilter</a></td>
603 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
604 </tr>
605 <tr style='background-color: #f0f0f0; '>
606 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPathEffect'>getPathEffect</a></td>
607 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
608 </tr>
609 <tr>
610 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextHIntercepts'>getPosTextHIntercepts</a></td>
611 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect horizontally positioned text; underlines</td>
612 </tr>
613 <tr style='background-color: #f0f0f0; '>
614 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a></td>
615 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect positioned text; underlines</td>
616 </tr>
617 <tr>
618 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getPosTextPath'>getPosTextPath</a></td>
619 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to positioned text</td>
620 </tr>
621 <tr style='background-color: #f0f0f0; '>
622 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getShader'>getShader</a></td>
623 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
624 </tr>
625 <tr>
626 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeCap'>getStrokeCap</a></td>
627 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Cap'>Cap</a>, the area drawn at path ends</td>
628 </tr>
629 <tr style='background-color: #f0f0f0; '>
630 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a></td>
631 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
632 </tr>
633 <tr>
634 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a></td>
635 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
636 </tr>
637 <tr style='background-color: #f0f0f0; '>
638 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a></td>
639 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns thickness of the stroke</td>
640 </tr>
641 <tr>
642 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getStyle'>getStyle</a></td>
643 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
644 </tr>
645 <tr style='background-color: #f0f0f0; '>
646 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextAlign'>getTextAlign</a></td>
647 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
648 </tr>
649 <tr>
650 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a></td>
651 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect <a href='undocumented#Text_Blob'>Text Blob</a>; underlines</td>
652 </tr>
653 <tr style='background-color: #f0f0f0; '>
654 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextEncoding'>getTextEncoding</a></td>
655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns character or glyph encoded size</td>
656 </tr>
657 <tr>
658 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextIntercepts'>getTextIntercepts</a></td>
659 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns where lines intersect text; underlines</td>
660 </tr>
661 <tr style='background-color: #f0f0f0; '>
662 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextPath'>getTextPath</a></td>
663 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='SkPath_Reference#Path'>Path</a> equivalent to text</td>
664 </tr>
665 <tr>
666 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextScaleX'>getTextScaleX</a></td>
667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal scale; condensed text</td>
668 </tr>
669 <tr style='background-color: #f0f0f0; '>
670 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSize'>getTextSize</a></td>
671 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns text size in points</td>
672 </tr>
673 <tr>
674 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextSkewX'>getTextSkewX</a></td>
675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns the text horizontal skew; oblique text</td>
676 </tr>
677 <tr style='background-color: #f0f0f0; '>
678 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTextWidths'>getTextWidths</a></td>
679 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance and bounds for each glyph in text</td>
680 </tr>
681 <tr>
682 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_getTypeface'>getTypeface</a></td>
683 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns <a href='undocumented#Typeface'>Typeface</a>, font description</td>
684 </tr>
685 <tr style='background-color: #f0f0f0; '>
686 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
687 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
688 </tr>
689 <tr>
690 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAntiAlias'>isAntiAlias</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400691 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Anti_Alias'>Anti Alias</a> is set</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400692 </tr>
693 <tr style='background-color: #f0f0f0; '>
694 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isAutohinted'>isAutohinted</a></td>
695 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='undocumented#Glyph'>Glyphs</a> are always hinted</td>
696 </tr>
697 <tr>
698 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isDither'>isDither</a></td>
699 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Dither'>Dither</a> is set</td>
700 </tr>
701 <tr style='background-color: #f0f0f0; '>
702 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a></td>
703 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is set</td>
704 </tr>
705 <tr>
706 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a></td>
707 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Fake_Bold'>Fake Bold</a> is set</td>
708 </tr>
709 <tr style='background-color: #f0f0f0; '>
710 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a></td>
711 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#LCD_Text'>LCD Text</a> is set</td>
712 </tr>
713 <tr>
714 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isLinearText'>isLinearText</a></td>
715 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if text is converted to <a href='SkPath_Reference#Path'>Path</a></td>
716 </tr>
717 <tr style='background-color: #f0f0f0; '>
718 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSrcOver'>isSrcOver</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400719 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> is <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400720 </tr>
721 <tr>
722 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isSubpixelText'>isSubpixelText</a></td>
723 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Subpixel_Text'>Subpixel Text</a> is set</td>
724 </tr>
725 <tr style='background-color: #f0f0f0; '>
726 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_isVerticalText'>isVerticalText</a></td>
727 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Vertical_Text'>Vertical Text</a> is set</td>
728 </tr>
729 <tr>
730 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_measureText'>measureText</a></td>
731 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns advance width and bounds of text</td>
732 </tr>
733 <tr style='background-color: #f0f0f0; '>
734 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
735 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
736 </tr>
737 <tr>
738 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refColorFilter'>refColorFilter</a></td>
739 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Color_Filter'>Color Filter</a>, how colors are altered</td>
740 </tr>
741 <tr style='background-color: #f0f0f0; '>
742 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refDrawLooper'>refDrawLooper</a></td>
743 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
744 </tr>
745 <tr>
746 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refImageFilter'>refImageFilter</a></td>
747 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
748 </tr>
749 <tr style='background-color: #f0f0f0; '>
750 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refMaskFilter'>refMaskFilter</a></td>
751 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
752 </tr>
753 <tr>
754 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refPathEffect'>refPathEffect</a></td>
755 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
756 </tr>
757 <tr style='background-color: #f0f0f0; '>
758 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refShader'>refShader</a></td>
759 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
760 </tr>
761 <tr>
762 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_refTypeface'>refTypeface</a></td>
763 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>references <a href='undocumented#Typeface'>Typeface</a>, font description</td>
764 </tr>
765 <tr style='background-color: #f0f0f0; '>
766 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_reset'>reset</a></td>
767 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets to default values</td>
768 </tr>
769 <tr>
770 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setARGB'>setARGB</a></td>
771 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets color by component</td>
772 </tr>
773 <tr style='background-color: #f0f0f0; '>
774 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAlpha'>setAlpha</a></td>
775 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a>, color opacity</td>
776 </tr>
777 <tr>
778 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAntiAlias'>setAntiAlias</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400779 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Anti_Alias'>Anti Alias</a></td>
Cary Clark682c58d2018-05-16 07:07:07 -0400780 </tr>
781 <tr style='background-color: #f0f0f0; '>
782 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setAutohinted'>setAutohinted</a></td>
783 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Glyph'>Glyphs</a> to always be hinted</td>
784 </tr>
785 <tr>
786 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setBlendMode'>setBlendMode</a></td>
Cary Clark224c7002018-06-27 11:00:21 -0400787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>, how colors combine with destination</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400788 </tr>
789 <tr style='background-color: #f0f0f0; '>
790 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColor'>setColor</a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -0400791 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color</td>
Cary Clark682c58d2018-05-16 07:07:07 -0400792 </tr>
793 <tr>
794 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setColorFilter'>setColorFilter</a></td>
795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Color_Filter'>Color Filter</a>, alters color</td>
796 </tr>
797 <tr style='background-color: #f0f0f0; '>
798 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDither'>setDither</a></td>
799 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Dither'>Dither</a></td>
800 </tr>
801 <tr>
802 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setDrawLooper'>setDrawLooper</a></td>
803 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Draw_Looper'>Draw Looper</a>, multiple layers</td>
804 </tr>
805 <tr style='background-color: #f0f0f0; '>
806 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a></td>
807 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a></td>
808 </tr>
809 <tr>
810 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a></td>
811 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Fake_Bold'>Fake Bold</a></td>
812 </tr>
813 <tr style='background-color: #f0f0f0; '>
814 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFilterQuality'>setFilterQuality</a></td>
815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level</td>
816 </tr>
817 <tr>
818 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setFlags'>setFlags</a></td>
819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets multiple <a href='#SkPaint_Flags'>Flags</a> in a bit field</td>
820 </tr>
821 <tr style='background-color: #f0f0f0; '>
822 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setHinting'>setHinting</a></td>
823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Hinting'>Hinting</a>, glyph outline adjustment level</td>
824 </tr>
825 <tr>
826 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setImageFilter'>setImageFilter</a></td>
827 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Image_Filter'>Image Filter</a>, alter pixels; blur</td>
828 </tr>
829 <tr style='background-color: #f0f0f0; '>
830 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a></td>
831 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#LCD_Text'>LCD Text</a></td>
832 </tr>
833 <tr>
834 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setLinearText'>setLinearText</a></td>
835 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts to <a href='SkPath_Reference#Path'>Path</a> before draw or measure</td>
836 </tr>
837 <tr style='background-color: #f0f0f0; '>
838 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setMaskFilter'>setMaskFilter</a></td>
839 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Mask_Filter'>Mask Filter</a>, alterations to <a href='undocumented#Mask_Alpha'>Mask Alpha</a></td>
840 </tr>
841 <tr>
842 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setPathEffect'>setPathEffect</a></td>
843 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Path_Effect'>Path Effect</a>, modifications to path geometry; dashing</td>
844 </tr>
845 <tr style='background-color: #f0f0f0; '>
846 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setShader'>setShader</a></td>
847 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Shader'>Shader</a>, multiple drawing colors; gradients</td>
848 </tr>
849 <tr>
850 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeCap'>setStrokeCap</a></td>
851 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Cap'>Cap</a>, the area drawn at path ends</td>
852 </tr>
853 <tr style='background-color: #f0f0f0; '>
854 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a></td>
855 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Join'>Join</a>, geometry on path corners</td>
856 </tr>
857 <tr>
858 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a></td>
859 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#Miter_Limit'>Miter Limit</a>, angles with sharp corners</td>
860 </tr>
861 <tr style='background-color: #f0f0f0; '>
862 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a></td>
863 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets thickness of the stroke</td>
864 </tr>
865 <tr>
866 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setStyle'>setStyle</a></td>
867 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Style'>Style</a>: stroke, fill, or both</td>
868 </tr>
869 <tr style='background-color: #f0f0f0; '>
870 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setSubpixelText'>setSubpixelText</a></td>
871 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Subpixel_Text'>Subpixel Text</a></td>
872 </tr>
873 <tr>
874 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextAlign'>setTextAlign</a></td>
875 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='#SkPaint_Align'>Align</a>: left, center, or right</td>
876 </tr>
877 <tr style='background-color: #f0f0f0; '>
878 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextEncoding'>setTextEncoding</a></td>
879 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets character or glyph encoded size</td>
880 </tr>
881 <tr>
882 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextScaleX'>setTextScaleX</a></td>
883 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal scale; condensed text</td>
884 </tr>
885 <tr style='background-color: #f0f0f0; '>
886 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSize'>setTextSize</a></td>
887 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets text size in points</td>
888 </tr>
889 <tr>
890 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTextSkewX'>setTextSkewX</a></td>
891 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets the text horizontal skew; oblique text</td>
892 </tr>
893 <tr style='background-color: #f0f0f0; '>
894 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setTypeface'>setTypeface</a></td>
895 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets <a href='undocumented#Typeface'>Typeface</a>, font description</td>
896 </tr>
897 <tr>
898 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_setVerticalText'>setVerticalText</a></td>
899 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>sets or clears <a href='#Vertical_Text'>Vertical Text</a></td>
900 </tr>
901 <tr style='background-color: #f0f0f0; '>
902 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
903 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
904 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -0400905</table>
906
Cary Clark682c58d2018-05-16 07:07:07 -0400907## <a name='Initializers'>Initializers</a>
908
909<a name='SkPaint_empty_constructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400910## SkPaint
911
Cary Clark682c58d2018-05-16 07:07:07 -0400912<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
913<a href='#SkPaint'>SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -0400914</pre>
915
Cary Clark682c58d2018-05-16 07:07:07 -0400916Constructs <a href='#Paint'>Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400917
918| attribute | default value |
919| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -0400920| <a href='#Anti_Alias'>Anti Alias</a> | false |
Cary Clark224c7002018-06-27 11:00:21 -0400921| <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> | <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a> |
Cary Clark682c58d2018-05-16 07:07:07 -0400922| <a href='SkColor_Reference#Color'>Color</a> | <a href='SkColor_Reference#SK_ColorBLACK'>SK ColorBLACK</a> |
923| <a href='SkColor_Reference#Alpha'>Color Alpha</a> | 255 |
924| <a href='undocumented#Color_Filter'>Color Filter</a> | nullptr |
925| <a href='#Dither'>Dither</a> | false |
926| <a href='undocumented#Draw_Looper'>Draw Looper</a> | nullptr |
927| <a href='#Fake_Bold'>Fake Bold</a> | false |
928| <a href='undocumented#Filter_Quality'>Filter Quality</a> | <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a> |
929| <a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> | false |
930| <a href='#Automatic_Hinting'>Automatic Hinting</a> | false |
931| <a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> | false |
932| <a href='#SkPaint_Hinting'>Hinting</a> | <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> |
933| <a href='undocumented#Image_Filter'>Image Filter</a> | nullptr |
934| <a href='#LCD_Text'>LCD Text</a> | false |
935| <a href='#Linear_Text'>Linear Text</a> | false |
936| <a href='#Miter_Limit'>Miter Limit</a> | 4 |
937| <a href='undocumented#Mask_Filter'>Mask Filter</a> | nullptr |
938| <a href='undocumented#Path_Effect'>Path Effect</a> | nullptr |
939| <a href='undocumented#Shader'>Shader</a> | nullptr |
940| <a href='#SkPaint_Style'>Style</a> | <a href='#SkPaint_kFill_Style'>kFill Style</a> |
941| <a href='#Text_Align'>Text Align</a> | <a href='#SkPaint_kLeft_Align'>kLeft Align</a> |
942| <a href='#Text_Encoding'>Text Encoding</a> | <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> |
943| <a href='#Text_Scale_X'>Text Scale X</a> | 1 |
944| <a href='#Text_Size'>Text Size</a> | 12 |
945| <a href='#Text_Skew_X'>Text Skew X</a> | 0 |
946| <a href='undocumented#Typeface'>Typeface</a> | nullptr |
947| <a href='#Stroke_Cap'>Stroke Cap</a> | <a href='#SkPaint_kButt_Cap'>kButt Cap</a> |
948| <a href='#Stroke_Join'>Stroke Join</a> | <a href='#SkPaint_kMiter_Join'>kMiter Join</a> |
949| <a href='#Stroke_Width'>Stroke Width</a> | 0 |
950| <a href='#Subpixel_Text'>Subpixel Text</a> | false |
951| <a href='#Vertical_Text'>Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400952
953The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500954paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400955build system.
956
957### Return Value
958
Cary Clark682c58d2018-05-16 07:07:07 -0400959default initialized <a href='#Paint'>Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400960
961### Example
962
963<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
964
965---
966
Cary Clark682c58d2018-05-16 07:07:07 -0400967<a name='SkPaint_copy_const_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -0400968## SkPaint
969
Cary Clark682c58d2018-05-16 07:07:07 -0400970<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
971<a href='#SkPaint'>SkPaint</a>(const <a href='#SkPaint'>SkPaint</a>& paint)
Cary Clark12799e12017-07-28 15:18:29 -0400972</pre>
973
Cary Clark682c58d2018-05-16 07:07:07 -0400974Makes a shallow copy of <a href='#Paint'>Paint</a>. <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
975<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> are shared
976between the original <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a> and the copy. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400977their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400978
Cary Clark682c58d2018-05-16 07:07:07 -0400979The referenced objects <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
980<a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> cannot be modified after they are created.
981This prevents objects with <a href='undocumented#Reference_Count'>Reference Count</a> from being modified once <a href='#Paint'>Paint</a> refers to them.
Cary Clark12799e12017-07-28 15:18:29 -0400982
983### Parameters
984
Cary Clark682c58d2018-05-16 07:07:07 -0400985<table> <tr> <td><a name='SkPaint_copy_const_SkPaint_paint'><code><strong>paint</strong></code></a></td>
986 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -0400987 </tr>
988</table>
989
990### Return Value
991
Cary Clark682c58d2018-05-16 07:07:07 -0400992shallow copy of <a href='#SkPaint_copy_const_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400993
994### Example
995
skia-bookmaker44bad2e2018-07-05 05:35:27 +0000996<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
Cary Clark12799e12017-07-28 15:18:29 -0400997
998#### Example Output
999
1000~~~~
1001SK_ColorRED == paint1.getColor()
1002SK_ColorBLUE == paint2.getColor()
1003~~~~
1004
1005</fiddle-embed></div>
1006
1007---
1008
Cary Clark682c58d2018-05-16 07:07:07 -04001009<a name='SkPaint_move_SkPaint'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001010## SkPaint
1011
Cary Clark682c58d2018-05-16 07:07:07 -04001012<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1013<a href='#SkPaint'>SkPaint</a>(<a href='#SkPaint'>SkPaint</a>&& paint)
Cary Clark12799e12017-07-28 15:18:29 -04001014</pre>
1015
Cary Clarkd0530ba2017-09-14 11:25:39 -04001016Implements a move constructor to avoid increasing the reference counts
Cary Clark682c58d2018-05-16 07:07:07 -04001017of objects referenced by the <a href='#SkPaint_move_SkPaint_paint'>paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001018
Cary Clark682c58d2018-05-16 07:07:07 -04001019After the call, <a href='#SkPaint_move_SkPaint_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001020
1021### Parameters
1022
Cary Clark682c58d2018-05-16 07:07:07 -04001023<table> <tr> <td><a name='SkPaint_move_SkPaint_paint'><code><strong>paint</strong></code></a></td>
1024 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001025 </tr>
1026</table>
1027
1028### Return Value
1029
Cary Clark682c58d2018-05-16 07:07:07 -04001030content of <a href='#SkPaint_move_SkPaint_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001031
1032### Example
1033
1034<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
1035
1036#### Example Output
1037
1038~~~~
1039path effect unique: true
1040~~~~
1041
1042</fiddle-embed></div>
1043
1044---
1045
Cary Clark682c58d2018-05-16 07:07:07 -04001046<a name='SkPaint_reset'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001047## reset
1048
Cary Clark682c58d2018-05-16 07:07:07 -04001049<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1050void <a href='#SkPaint_reset'>reset</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001051</pre>
1052
Cary Clark682c58d2018-05-16 07:07:07 -04001053Sets all <a href='#Paint'>Paint</a> contents to their initial values. This is equivalent to replacing
1054<a href='#Paint'>Paint</a> with the result of <a href='#SkPaint_empty_constructor'>SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001055
1056### Example
1057
1058<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
1059
1060#### Example Output
1061
1062~~~~
1063paint1 == paint2
1064~~~~
1065
1066</fiddle-embed></div>
1067
1068---
1069
Cary Clark682c58d2018-05-16 07:07:07 -04001070<a name='SkPaint_destructor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001071## ~SkPaint
1072
Cary Clark682c58d2018-05-16 07:07:07 -04001073<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1074<a href='#SkPaint_destructor'>~SkPaint</a>()
Cary Clark12799e12017-07-28 15:18:29 -04001075</pre>
1076
Cary Clark682c58d2018-05-16 07:07:07 -04001077Decreases <a href='#Paint'>Paint</a> <a href='undocumented#Reference_Count'>Reference Count</a> of owned objects: <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
1078<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a>. If the
1079objects containing <a href='undocumented#Reference_Count'>Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -04001080
1081---
1082
Cary Clark682c58d2018-05-16 07:07:07 -04001083## <a name='Management'>Management</a>
Cary Clark12799e12017-07-28 15:18:29 -04001084
Cary Clark682c58d2018-05-16 07:07:07 -04001085<a name='SkPaint_copy_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001086## operator=
1087
Cary Clark682c58d2018-05-16 07:07:07 -04001088<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1089<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_copy_operator'>operator=(const SkPaint& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001090</pre>
1091
Cary Clark682c58d2018-05-16 07:07:07 -04001092Makes a shallow copy of <a href='#Paint'>Paint</a>. <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>,
1093<a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>, <a href='undocumented#Draw_Looper'>Draw Looper</a>, and <a href='undocumented#Image_Filter'>Image Filter</a> are shared
1094between the original <a href='#SkPaint_copy_operator_paint'>paint</a> and the copy. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the
Cary Clark12799e12017-07-28 15:18:29 -04001095prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark682c58d2018-05-16 07:07:07 -04001096resulting count is zero. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the parameter <a href='#SkPaint_copy_operator_paint'>paint</a>
1097are increased by one. <a href='#SkPaint_copy_operator_paint'>paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -04001098
1099### Parameters
1100
Cary Clark682c58d2018-05-16 07:07:07 -04001101<table> <tr> <td><a name='SkPaint_copy_operator_paint'><code><strong>paint</strong></code></a></td>
1102 <td>original to copy</td>
Cary Clark12799e12017-07-28 15:18:29 -04001103 </tr>
1104</table>
1105
1106### Return Value
1107
Cary Clark682c58d2018-05-16 07:07:07 -04001108content of <a href='#SkPaint_copy_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001109
1110### Example
1111
1112<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
1113
1114#### Example Output
1115
1116~~~~
1117SK_ColorRED == paint1.getColor()
1118SK_ColorRED == paint2.getColor()
1119~~~~
1120
1121</fiddle-embed></div>
1122
1123---
1124
Cary Clark682c58d2018-05-16 07:07:07 -04001125<a name='SkPaint_move_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001126## operator=
1127
Cary Clark682c58d2018-05-16 07:07:07 -04001128<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1129<a href='#SkPaint'>SkPaint</a>& <a href='#SkPaint_move_operator'>operator=(SkPaint&& paint)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001130</pre>
1131
Cary Clark682c58d2018-05-16 07:07:07 -04001132Moves the <a href='#SkPaint_move_operator_paint'>paint</a> to avoid increasing the reference counts
1133of objects referenced by the <a href='#SkPaint_move_operator_paint'>paint</a> parameter. Objects containing <a href='undocumented#Reference_Count'>Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -04001134prior destination are decreased by one; those objects are deleted if the resulting count
1135is zero.
Cary Clark12799e12017-07-28 15:18:29 -04001136
Cary Clark682c58d2018-05-16 07:07:07 -04001137After the call, <a href='#SkPaint_move_operator_paint'>paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -04001138
1139### Parameters
1140
Cary Clark682c58d2018-05-16 07:07:07 -04001141<table> <tr> <td><a name='SkPaint_move_operator_paint'><code><strong>paint</strong></code></a></td>
1142 <td>original to move</td>
Cary Clark12799e12017-07-28 15:18:29 -04001143 </tr>
1144</table>
1145
1146### Return Value
1147
Cary Clark682c58d2018-05-16 07:07:07 -04001148content of <a href='#SkPaint_move_operator_paint'>paint</a>
Cary Clark12799e12017-07-28 15:18:29 -04001149
1150### Example
1151
1152<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
1153
1154#### Example Output
1155
1156~~~~
1157SK_ColorRED == paint2.getColor()
1158~~~~
1159
1160</fiddle-embed></div>
1161
1162---
1163
Cary Clark682c58d2018-05-16 07:07:07 -04001164<a name='SkPaint_equal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001165## operator==
1166
Cary Clark682c58d2018-05-16 07:07:07 -04001167<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1168bool <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001169</pre>
1170
Cary Clark682c58d2018-05-16 07:07:07 -04001171Compares <a href='#SkPaint_equal_operator_a'>a</a> and <a href='#SkPaint_equal_operator_b'>b</a>, and returns true if <a href='#SkPaint_equal_operator_a'>a</a> and <a href='#SkPaint_equal_operator_b'>b</a> are equivalent. May return false
1172if <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
1173<a href='undocumented#Draw_Looper'>Draw Looper</a>, or <a href='undocumented#Image_Filter'>Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001174
1175### Parameters
1176
Cary Clark682c58d2018-05-16 07:07:07 -04001177<table> <tr> <td><a name='SkPaint_equal_operator_a'><code><strong>a</strong></code></a></td>
1178 <td><a href='#Paint'>Paint</a> to compare</td>
1179 </tr>
1180 <tr> <td><a name='SkPaint_equal_operator_b'><code><strong>b</strong></code></a></td>
1181 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001182 </tr>
1183</table>
1184
1185### Return Value
1186
Cary Clark682c58d2018-05-16 07:07:07 -04001187true if <a href='#Paint'>Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001188
1189### Example
1190
1191<div><fiddle-embed name="7481a948e34672720337a631830586dd">
1192
1193#### Example Output
1194
1195~~~~
1196paint1 == paint2
1197paint1 != paint2
1198~~~~
1199
1200</fiddle-embed></div>
1201
Cary Clark06c20f32018-03-20 15:53:27 -04001202### See Also
1203
Cary Clark682c58d2018-05-16 07:07:07 -04001204<a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001205
Cary Clark12799e12017-07-28 15:18:29 -04001206---
1207
Cary Clark682c58d2018-05-16 07:07:07 -04001208<a name='SkPaint_notequal_operator'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001209## operator!=
1210
Cary Clark682c58d2018-05-16 07:07:07 -04001211<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1212bool <a href='#SkPaint_notequal_operator'>operator!=(const SkPaint& a, const SkPaint& b)</a>
Cary Clark12799e12017-07-28 15:18:29 -04001213</pre>
1214
Cary Clark682c58d2018-05-16 07:07:07 -04001215Compares <a href='#SkPaint_notequal_operator_a'>a</a> and <a href='#SkPaint_notequal_operator_b'>b</a>, and returns true if <a href='#SkPaint_notequal_operator_a'>a</a> and <a href='#SkPaint_notequal_operator_b'>b</a> are not equivalent. May return true
1216if <a href='undocumented#Typeface'>Typeface</a>, <a href='undocumented#Path_Effect'>Path Effect</a>, <a href='undocumented#Shader'>Shader</a>, <a href='undocumented#Mask_Filter'>Mask Filter</a>, <a href='undocumented#Color_Filter'>Color Filter</a>,
1217<a href='undocumented#Draw_Looper'>Draw Looper</a>, or <a href='undocumented#Image_Filter'>Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001218
1219### Parameters
1220
Cary Clark682c58d2018-05-16 07:07:07 -04001221<table> <tr> <td><a name='SkPaint_notequal_operator_a'><code><strong>a</strong></code></a></td>
1222 <td><a href='#Paint'>Paint</a> to compare</td>
1223 </tr>
1224 <tr> <td><a name='SkPaint_notequal_operator_b'><code><strong>b</strong></code></a></td>
1225 <td><a href='#Paint'>Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -04001226 </tr>
1227</table>
1228
1229### Return Value
1230
Cary Clark682c58d2018-05-16 07:07:07 -04001231true if <a href='#Paint'>Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -04001232
1233### Example
1234
skia-bookmakera717ca92018-07-08 05:32:09 +00001235<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
Cary Clark12799e12017-07-28 15:18:29 -04001236
1237#### Example Output
1238
1239~~~~
1240paint1 == paint2
1241paint1 == paint2
1242~~~~
1243
1244</fiddle-embed></div>
1245
Cary Clark06c20f32018-03-20 15:53:27 -04001246### See Also
1247
Cary Clark682c58d2018-05-16 07:07:07 -04001248<a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001249
Cary Clark12799e12017-07-28 15:18:29 -04001250---
1251
Cary Clark682c58d2018-05-16 07:07:07 -04001252<a name='SkPaint_getHash'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001253## getHash
1254
Cary Clark682c58d2018-05-16 07:07:07 -04001255<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1256uint32_t <a href='#SkPaint_getHash'>getHash</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001257</pre>
1258
Cary Clark682c58d2018-05-16 07:07:07 -04001259Returns a hash generated from <a href='#Paint'>Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -04001260Identical hashes guarantee that the paints are
1261equivalent, but differing hashes do not guarantee that the paints have differing
1262contents.
1263
Cary Clark682c58d2018-05-16 07:07:07 -04001264If <a href='#SkPaint_equal_operator'>operator==(const SkPaint& a, const SkPaint& b)</a> returns true for two paints,
Cary Clark12799e12017-07-28 15:18:29 -04001265their hashes are also equal.
1266
1267The hash returned is platform and implementation specific.
1268
1269### Return Value
1270
1271a shallow hash
1272
1273### Example
1274
1275<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
1276
1277#### Example Output
1278
1279~~~~
1280paint1 == paint2
1281paint1.getHash() == paint2.getHash()
1282~~~~
1283
1284</fiddle-embed></div>
1285
1286---
1287
Cary Clark682c58d2018-05-16 07:07:07 -04001288## <a name='Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001289
Cary Clark682c58d2018-05-16 07:07:07 -04001290## <a name='SkPaint_Hinting'>Enum SkPaint::Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001291
Cary Clarka560c472017-11-27 10:44:06 -05001292<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001293 enum <a href='#SkPaint_Hinting'>Hinting</a> {
1294 <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> = 0,
1295 <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> = 1,
1296 <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> = 2,
1297 <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> = 3,
Cary Clark186d08f2018-04-03 08:43:27 -04001298 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001299</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001300
Cary Clark682c58d2018-05-16 07:07:07 -04001301<a href='#SkPaint_Hinting'>Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
1302look at a given point size on font engines that support it. <a href='#SkPaint_Hinting'>Hinting</a> may have a
Cary Clark12799e12017-07-28 15:18:29 -04001303muted effect or no effect at all depending on the platform.
1304
Cary Clark7cfcbca2018-01-04 16:11:51 -05001305The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark682c58d2018-05-16 07:07:07 -04001306as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001307
1308### Constants
1309
Cary Clark682c58d2018-05-16 07:07:07 -04001310<table style='border-collapse: collapse; width: 62.5em'>
1311 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1312<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1313<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1314 <tr style='background-color: #f0f0f0; '>
1315 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNo_Hinting'><code>SkPaint::kNo_Hinting</code></a></td>
1316 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
1317 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1318Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001319With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
1320bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -04001321outline being loaded should not be fitted to the pixel grid but simply scaled
Cary Clark1a8d7622018-03-05 13:26:16 -05001322to 26.6 fractional pixels.
1323</td>
Cary Clark12799e12017-07-28 15:18:29 -04001324 </tr>
1325 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001326 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSlight_Hinting'><code>SkPaint::kSlight_Hinting</code></a></td>
1327 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
1328 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1329Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001330With FreeType, this is equivalent in spirit to the
1331FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -04001332lighter hinting algorithm for non-monochrome modes.
Cary Clark682c58d2018-05-16 07:07:07 -04001333Generated <a href='undocumented#Glyph'>Glyphs</a> may be fuzzy but better resemble their original shape.
Cary Clark1a8d7622018-03-05 13:26:16 -05001334</td>
Cary Clark12799e12017-07-28 15:18:29 -04001335 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001336 <tr style='background-color: #f0f0f0; '>
1337 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kNormal_Hinting'><code>SkPaint::kNormal_Hinting</code></a></td>
1338 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
1339 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1340Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001341With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
1342choosing the default hinting algorithm, which is optimized for standard
Cary Clark1a8d7622018-03-05 13:26:16 -05001343gray-level rendering.
1344</td>
Cary Clark12799e12017-07-28 15:18:29 -04001345 </tr>
1346 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001347 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFull_Hinting'><code>SkPaint::kFull_Hinting</code></a></td>
1348 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
1349 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04001350Modifies glyph outlines for maximum constrast. With FreeType, this selects
Cary Clark682c58d2018-05-16 07:07:07 -04001351FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is set.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001352FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
1353horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
Cary Clark1a8d7622018-03-05 13:26:16 -05001354variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.
1355</td>
Cary Clark12799e12017-07-28 15:18:29 -04001356 </tr>
1357</table>
1358
Cary Clark682c58d2018-05-16 07:07:07 -04001359On <a href='undocumented#OS_X'>OS X</a> and iOS, hinting controls whether <a href='undocumented#Core_Graphics'>Core Graphics</a> dilates the font outlines
Cary Clark137b8742018-05-30 09:21:49 -04001360to account for LCD text. No hinting uses <a href='undocumented#Core_Text'>Core Text</a> <a href='undocumented#Grayscale'>Grayscale</a> output.
Cary Clark682c58d2018-05-16 07:07:07 -04001361Normal hinting uses <a href='undocumented#Core_Text'>Core Text</a> LCD output. If <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is clear,
Cary Clark137b8742018-05-30 09:21:49 -04001362the LCD output is reduced to a single <a href='undocumented#Grayscale'>Grayscale</a> channel.
Cary Clark12799e12017-07-28 15:18:29 -04001363
Cary Clark682c58d2018-05-16 07:07:07 -04001364On Windows with DirectWrite, <a href='#SkPaint_Hinting'>Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -04001365
Cary Clark682c58d2018-05-16 07:07:07 -04001366<a href='#SkPaint_Hinting'>Hinting</a> defaults to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1367Set <a href='undocumented#SkPaintDefaults_Hinting'>SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04001368
Cary Clark682c58d2018-05-16 07:07:07 -04001369<a name='SkPaint_getHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001370## getHinting
1371
Cary Clark682c58d2018-05-16 07:07:07 -04001372<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1373<a href='#SkPaint_Hinting'>Hinting</a> <a href='#SkPaint_getHinting'>getHinting</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001374</pre>
1375
1376Returns level of glyph outline adjustment.
1377
1378### Return Value
1379
Cary Clark682c58d2018-05-16 07:07:07 -04001380one of: <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001381
1382### Example
1383
1384<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
1385
1386#### Example Output
1387
1388~~~~
1389SkPaint::kNormal_Hinting == paint.getHinting()
1390~~~~
1391
1392</fiddle-embed></div>
1393
1394---
1395
Cary Clark682c58d2018-05-16 07:07:07 -04001396<a name='SkPaint_setHinting'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001397## setHinting
1398
Cary Clark682c58d2018-05-16 07:07:07 -04001399<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1400void <a href='#SkPaint_setHinting'>setHinting</a>(<a href='#SkPaint_Hinting'>Hinting</a> hintingLevel)
Cary Clark12799e12017-07-28 15:18:29 -04001401</pre>
1402
1403Sets level of glyph outline adjustment.
Cary Clark682c58d2018-05-16 07:07:07 -04001404Does not check for valid values of <a href='#SkPaint_setHinting_hintingLevel'>hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001405
Cary Clark682c58d2018-05-16 07:07:07 -04001406| <a href='#SkPaint_Hinting'>Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -04001407| --- | --- | --- |
Cary Clark682c58d2018-05-16 07:07:07 -04001408| <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
1409| <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
1410| <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
1411| <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -04001412
1413### Parameters
1414
Cary Clark682c58d2018-05-16 07:07:07 -04001415<table> <tr> <td><a name='SkPaint_setHinting_hintingLevel'><code><strong>hintingLevel</strong></code></a></td>
1416 <td>one of: <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>, <a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>, <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>, <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001417 </tr>
1418</table>
1419
1420### Example
1421
1422<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
1423
1424#### Example Output
1425
1426~~~~
1427paint1 == paint2
1428~~~~
1429
1430</fiddle-embed></div>
1431
1432---
1433
Cary Clark682c58d2018-05-16 07:07:07 -04001434## <a name='Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001435
Cary Clark682c58d2018-05-16 07:07:07 -04001436## <a name='SkPaint_Flags'>Enum SkPaint::Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001437
Cary Clarka560c472017-11-27 10:44:06 -05001438<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001439 enum <a href='#SkPaint_Flags'>Flags</a> {
1440 <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> = 0x01,
1441 <a href='#SkPaint_kDither_Flag'>kDither Flag</a> = 0x04,
1442 <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> = 0x20,
1443 <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> = 0x40,
1444 <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> = 0x80,
1445 <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> = 0x200,
1446 <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> = 0x400,
1447 <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> = 0x800,
1448 <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> = 0x1000,
Cary Clark12799e12017-07-28 15:18:29 -04001449
Cary Clark682c58d2018-05-16 07:07:07 -04001450 <a href='#SkPaint_kAllFlags'>kAllFlags</a> = 0xFFFF,
Cary Clark186d08f2018-04-03 08:43:27 -04001451 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001452
Cary Clark12799e12017-07-28 15:18:29 -04001453</pre>
1454
Cary Clark682c58d2018-05-16 07:07:07 -04001455The bit values stored in <a href='#SkPaint_Flags'>Flags</a>.
1456The default value for <a href='#SkPaint_Flags'>Flags</a>, normally zero, can be changed at compile time
1457with a custom definition of <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a>.
1458All flags can be read and written explicitly; <a href='#SkPaint_Flags'>Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -04001459multiple settings at once.
1460
1461### Constants
1462
Cary Clark682c58d2018-05-16 07:07:07 -04001463<table style='border-collapse: collapse; width: 62.5em'>
1464 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1465<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1466<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1467 <tr style='background-color: #f0f0f0; '>
1468 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAntiAlias_Flag'><code>SkPaint::kAntiAlias_Flag</code></a></td>
1469 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
1470 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clarkffb3d682018-05-17 12:17:28 -04001471mask for setting Anti_Alias</td>
Cary Clark12799e12017-07-28 15:18:29 -04001472 </tr>
1473 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001474 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDither_Flag'><code>SkPaint::kDither_Flag</code></a></td>
1475 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
1476 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1477mask for setting Dither</td>
1478 </tr>
1479 <tr style='background-color: #f0f0f0; '>
1480 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFakeBoldText_Flag'><code>SkPaint::kFakeBoldText_Flag</code></a></td>
1481 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0020</td>
1482 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1483mask for setting Fake_Bold</td>
Cary Clark12799e12017-07-28 15:18:29 -04001484 </tr>
1485 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001486 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLinearText_Flag'><code>SkPaint::kLinearText_Flag</code></a></td>
1487 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0040</td>
1488 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1489mask for setting Linear_Text</td>
1490 </tr>
1491 <tr style='background-color: #f0f0f0; '>
1492 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSubpixelText_Flag'><code>SkPaint::kSubpixelText_Flag</code></a></td>
1493 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0080</td>
1494 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1495mask for setting Subpixel_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001496 </tr>
1497 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001498 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLCDRenderText_Flag'><code>SkPaint::kLCDRenderText_Flag</code></a></td>
1499 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0200</td>
1500 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1501mask for setting LCD_Text</td>
1502 </tr>
1503 <tr style='background-color: #f0f0f0; '>
1504 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kEmbeddedBitmapText_Flag'><code>SkPaint::kEmbeddedBitmapText_Flag</code></a></td>
1505 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0400</td>
1506 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1507mask for setting Font_Embedded_Bitmaps</td>
Cary Clark12799e12017-07-28 15:18:29 -04001508 </tr>
1509 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001510 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAutoHinting_Flag'><code>SkPaint::kAutoHinting_Flag</code></a></td>
1511 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0800</td>
1512 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1513mask for setting Automatic_Hinting</td>
1514 </tr>
1515 <tr style='background-color: #f0f0f0; '>
1516 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kVerticalText_Flag'><code>SkPaint::kVerticalText_Flag</code></a></td>
1517 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x1000</td>
1518 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1519mask for setting Vertical_Text</td>
Cary Clark12799e12017-07-28 15:18:29 -04001520 </tr>
1521 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001522 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAllFlags'><code>SkPaint::kAllFlags</code></a></td>
1523 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0xFFFF</td>
1524 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1525mask of all <a href='#SkPaint_Flags'>Flags</a>, including private flags and flags reserved for future use</td>
Cary Clark12799e12017-07-28 15:18:29 -04001526 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001527<a href='#SkPaint_Flags'>Flags</a> default to all flags clear, disabling the associated feature.
1528</table>
Cary Clark12799e12017-07-28 15:18:29 -04001529
Cary Clark682c58d2018-05-16 07:07:07 -04001530## <a name='SkPaint_ReserveFlags'>Enum SkPaint::ReserveFlags</a>
Cary Clark06c20f32018-03-20 15:53:27 -04001531
Cary Clark682c58d2018-05-16 07:07:07 -04001532Deprecated.
Cary Clark12799e12017-07-28 15:18:29 -04001533
Cary Clark4855f782018-02-06 09:41:53 -05001534soonOnly valid for Android framework.
1535
Cary Clarka560c472017-11-27 10:44:06 -05001536<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04001537 enum <a href='#SkPaint_ReserveFlags'>ReserveFlags</a> {
1538 <a href='#SkPaint_kUnderlineText_ReserveFlag'>kUnderlineText ReserveFlag</a> = 0x08,
1539 <a href='#SkPaint_kStrikeThruText_ReserveFlag'>kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark186d08f2018-04-03 08:43:27 -04001540 };
Cary Clark1a8d7622018-03-05 13:26:16 -05001541</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001542
1543### Constants
1544
Cary Clark682c58d2018-05-16 07:07:07 -04001545<table style='border-collapse: collapse; width: 62.5em'>
1546 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
1547<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
1548<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
1549 <tr style='background-color: #f0f0f0; '>
1550 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUnderlineText_ReserveFlag'><code>SkPaint::kUnderlineText_ReserveFlag</code></a></td>
1551 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
1552 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1553Deprecated.
1554
1555soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001556 </tr>
1557 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001558 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrikeThruText_ReserveFlag'><code>SkPaint::kStrikeThruText_ReserveFlag</code></a></td>
1559 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0010</td>
1560 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
1561Deprecated.
1562
1563soon</td>
Cary Clark12799e12017-07-28 15:18:29 -04001564 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04001565</table>
Cary Clark4855f782018-02-06 09:41:53 -05001566
Cary Clark682c58d2018-05-16 07:07:07 -04001567<a name='SkPaint_getFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001568## getFlags
1569
Cary Clark682c58d2018-05-16 07:07:07 -04001570<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1571uint32_t <a href='#SkPaint_getFlags'>getFlags</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001572</pre>
1573
Cary Clark682c58d2018-05-16 07:07:07 -04001574Returns paint settings described by <a href='#SkPaint_Flags'>Flags</a>. Each setting uses one
1575bit, and can be tested with <a href='#SkPaint_Flags'>Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -04001576
1577### Return Value
1578
Cary Clark682c58d2018-05-16 07:07:07 -04001579zero, one, or more bits described by <a href='#SkPaint_Flags'>Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -04001580
1581### Example
1582
1583<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
1584
1585#### Example Output
1586
1587~~~~
1588(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
1589~~~~
1590
1591</fiddle-embed></div>
1592
1593---
1594
Cary Clark682c58d2018-05-16 07:07:07 -04001595<a name='SkPaint_setFlags'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001596## setFlags
1597
Cary Clark682c58d2018-05-16 07:07:07 -04001598<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1599void <a href='#SkPaint_setFlags'>setFlags</a>(uint32_t flags)
Cary Clark12799e12017-07-28 15:18:29 -04001600</pre>
1601
Cary Clark682c58d2018-05-16 07:07:07 -04001602Replaces <a href='#SkPaint_Flags'>Flags</a> with <a href='#SkPaint_setFlags_flags'>flags</a>, the union of the <a href='#SkPaint_Flags'>Flags</a> members.
1603All <a href='#SkPaint_Flags'>Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -04001604
1605### Parameters
1606
Cary Clark682c58d2018-05-16 07:07:07 -04001607<table> <tr> <td><a name='SkPaint_setFlags_flags'><code><strong>flags</strong></code></a></td>
1608 <td>union of <a href='#SkPaint_Flags'>Flags</a> for <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001609 </tr>
1610</table>
1611
1612### Example
1613
1614<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
1615
1616#### Example Output
1617
1618~~~~
1619paint.isAntiAlias()
1620paint.isDither()
1621~~~~
1622
1623</fiddle-embed></div>
1624
1625---
1626
Cary Clarkffb3d682018-05-17 12:17:28 -04001627## <a name='Anti_Alias'>Anti Alias</a>
Cary Clark08895c42018-02-01 09:37:32 -05001628
Cary Clarkffb3d682018-05-17 12:17:28 -04001629<a href='#Anti_Alias'>Anti Alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark682c58d2018-05-16 07:07:07 -04001630If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
1631If <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> is set, pixels are drawn with <a href='SkColor_Reference#Alpha'>Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001632
Cary Clark682c58d2018-05-16 07:07:07 -04001633The rule for <a href='undocumented#Alias'>Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -04001634passing through the pixel center may, but is not required to, draw the pixel.
1635
Cary Clark682c58d2018-05-16 07:07:07 -04001636<a href='undocumented#Raster_Engine'>Raster Engine</a> draws <a href='undocumented#Alias'>Aliased</a> pixels whose centers are on or to the right of the start of an
1637active <a href='SkPath_Reference#Path'>Path</a> edge, and whose center is to the left of the end of the active <a href='SkPath_Reference#Path'>Path</a> edge.
Cary Clark12799e12017-07-28 15:18:29 -04001638
Cary Clarkffb3d682018-05-17 12:17:28 -04001639A platform may only support <a href='#Anti_Alias'>Anti Aliased</a> drawing. Some GPU-backed platforms use
1640<a href='undocumented#Supersampling'>Supersampling</a> to <a href='#Anti_Alias'>Anti Alias</a> all drawing, and have no mechanism to selectively
Cary Clark682c58d2018-05-16 07:07:07 -04001641<a href='undocumented#Alias'>Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001642
Cary Clarkffb3d682018-05-17 12:17:28 -04001643The amount of coverage computed for <a href='#Anti_Alias'>Anti Aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -04001644
Cary Clarkffb3d682018-05-17 12:17:28 -04001645<a href='#Anti_Alias'>Anti Alias</a> is disabled by default.
1646<a href='#Anti_Alias'>Anti Alias</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001647at compile time.
1648
1649### Example
1650
1651<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
1652A blue line draws only where the pixel centers are contained.
Cary Clark682c58d2018-05-16 07:07:07 -04001653The lines are drawn into <a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, then drawn magnified to make the
1654<a href='undocumented#Alias'>Aliasing</a> easier to see.
Cary Clark1a8d7622018-03-05 13:26:16 -05001655</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001656
Cary Clark682c58d2018-05-16 07:07:07 -04001657<a name='SkPaint_isAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001658## isAntiAlias
1659
Cary Clark682c58d2018-05-16 07:07:07 -04001660<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1661bool <a href='#SkPaint_isAntiAlias'>isAntiAlias</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001662</pre>
1663
Cary Clark682c58d2018-05-16 07:07:07 -04001664If true, pixels on the active edges of <a href='SkPath_Reference#Path'>Path</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -04001665
Cary Clark682c58d2018-05-16 07:07:07 -04001666Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001667
1668### Return Value
1669
Cary Clark682c58d2018-05-16 07:07:07 -04001670<a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001671
1672### Example
1673
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001674<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
Cary Clark12799e12017-07-28 15:18:29 -04001675
1676#### Example Output
1677
1678~~~~
1679paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1680paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
1681~~~~
1682
1683</fiddle-embed></div>
1684
1685---
1686
Cary Clark682c58d2018-05-16 07:07:07 -04001687<a name='SkPaint_setAntiAlias'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001688## setAntiAlias
1689
Cary Clark682c58d2018-05-16 07:07:07 -04001690<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1691void <a href='#SkPaint_setAntiAlias'>setAntiAlias</a>(bool aa)
Cary Clark12799e12017-07-28 15:18:29 -04001692</pre>
1693
Cary Clark682c58d2018-05-16 07:07:07 -04001694Requests, but does not require, that <a href='SkPath_Reference#Path'>Path</a> edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -04001695partial transparency.
1696
Cary Clark682c58d2018-05-16 07:07:07 -04001697Sets <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is true.
1698Clears <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a> if <a href='#SkPaint_setAntiAlias_aa'>aa</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001699
1700### Parameters
1701
Cary Clark682c58d2018-05-16 07:07:07 -04001702<table> <tr> <td><a name='SkPaint_setAntiAlias_aa'><code><strong>aa</strong></code></a></td>
1703 <td>setting for <a href='#SkPaint_kAntiAlias_Flag'>kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001704 </tr>
1705</table>
1706
1707### Example
1708
skia-bookmakerb95bbba2018-07-06 05:23:23 +00001709<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
Cary Clark12799e12017-07-28 15:18:29 -04001710
1711#### Example Output
1712
1713~~~~
1714paint1 == paint2
1715~~~~
1716
1717</fiddle-embed></div>
1718
1719---
1720
Cary Clark682c58d2018-05-16 07:07:07 -04001721## <a name='Dither'>Dither</a>
Cary Clark08895c42018-02-01 09:37:32 -05001722
Cary Clark682c58d2018-05-16 07:07:07 -04001723<a href='#Dither'>Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001724This can help to smooth color transitions and reducing banding in gradients.
Cary Clark682c58d2018-05-16 07:07:07 -04001725Dithering lessens visible banding from <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
1726and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> gradients,
1727and improves rendering into a <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001728
1729Dithering is always enabled for linear gradients drawing into
Cary Clark682c58d2018-05-16 07:07:07 -04001730<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and <a href='SkImageInfo_Reference#kRGBA_8888_SkColorType'>kRGBA_8888_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
1731<a href='#Dither'>Dither</a> cannot be enabled for <a href='SkImageInfo_Reference#kAlpha_8_SkColorType'>kAlpha_8_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a> and
1732<a href='SkImageInfo_Reference#kRGBA_F16_SkColorType'>kRGBA_F16_SkColorType</a> <a href='SkSurface_Reference#Surface'>Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001733
Cary Clark682c58d2018-05-16 07:07:07 -04001734<a href='#Dither'>Dither</a> is disabled by default.
1735<a href='#Dither'>Dither</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to <a href='#SkPaint_kDither_Flag'>kDither Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001736at compile time.
1737
Cary Clark682c58d2018-05-16 07:07:07 -04001738Some platform implementations may ignore dithering. SetSK_IGNORE_GPU_DITHERto ignore <a href='#Dither'>Dither</a> on <a href='undocumented#GPU_Surface'>GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001739
1740### Example
1741
skia-bookmaker44bad2e2018-07-05 05:35:27 +00001742<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
Cary Clark1a8d7622018-03-05 13:26:16 -05001743alternating nearby colors from pixel to pixel.
1744</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001745
1746### Example
1747
1748<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark224c7002018-06-27 11:00:21 -04001749Drawing the gradient repeatedly with <a href='SkBlendMode_Reference#SkBlendMode_kPlus'>SkBlendMode::kPlus</a> exaggerates the
Cary Clark1a8d7622018-03-05 13:26:16 -05001750dither, making it easier to see.
1751</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001752
Cary Clark682c58d2018-05-16 07:07:07 -04001753<a name='SkPaint_isDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001754## isDither
1755
Cary Clark682c58d2018-05-16 07:07:07 -04001756<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1757bool <a href='#SkPaint_isDither'>isDither</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001758</pre>
1759
1760If true, color error may be distributed to smooth color transition.
skia-bookmaker525f9a92018-05-03 06:27:39 +00001761
Cary Clark682c58d2018-05-16 07:07:07 -04001762Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kDither_Flag'>kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001763
1764### Return Value
1765
Cary Clark682c58d2018-05-16 07:07:07 -04001766<a href='#SkPaint_kDither_Flag'>kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001767
1768### Example
1769
1770<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1771
1772#### Example Output
1773
1774~~~~
1775paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1776paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1777~~~~
1778
1779</fiddle-embed></div>
1780
1781---
1782
Cary Clark682c58d2018-05-16 07:07:07 -04001783<a name='SkPaint_setDither'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001784## setDither
1785
Cary Clark682c58d2018-05-16 07:07:07 -04001786<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1787void <a href='#SkPaint_setDither'>setDither</a>(bool dither)
Cary Clark12799e12017-07-28 15:18:29 -04001788</pre>
1789
1790Requests, but does not require, to distribute color error.
1791
Cary Clark682c58d2018-05-16 07:07:07 -04001792Sets <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is true.
1793Clears <a href='#SkPaint_kDither_Flag'>kDither Flag</a> if <a href='#SkPaint_setDither_dither'>dither</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001794
1795### Parameters
1796
Cary Clark682c58d2018-05-16 07:07:07 -04001797<table> <tr> <td><a name='SkPaint_setDither_dither'><code><strong>dither</strong></code></a></td>
1798 <td>setting for <a href='#SkPaint_kDither_Flag'>kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001799 </tr>
1800</table>
1801
1802### Example
1803
1804<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1805
1806#### Example Output
1807
1808~~~~
1809paint1 == paint2
1810~~~~
1811
1812</fiddle-embed></div>
1813
1814### See Also
1815
Cary Clark682c58d2018-05-16 07:07:07 -04001816<a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001817
1818---
1819
1820### See Also
1821
Cary Clarkffb3d682018-05-17 12:17:28 -04001822Gradient <a href='SkImageInfo_Reference#kRGB_565_SkColorType'>kRGB_565_SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001823
Cary Clark682c58d2018-05-16 07:07:07 -04001824## <a name='Device_Text'>Device Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05001825
Cary Clark682c58d2018-05-16 07:07:07 -04001826<a href='#LCD_Text'>LCD Text</a> and <a href='#Subpixel_Text'>Subpixel Text</a> increase the precision of glyph position.
Cary Clark12799e12017-07-28 15:18:29 -04001827
Cary Clarkffb3d682018-05-17 12:17:28 -04001828When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> takes advantage of the organization of RGB stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001829create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001830on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001831<a href='#LCD_Text'>LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clarkffb3d682018-05-17 12:17:28 -04001832the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001833
Cary Clark682c58d2018-05-16 07:07:07 -04001834<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001835As the opaqueness
1836of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1837
1838Either or both techniques can be enabled.
Cary Clark682c58d2018-05-16 07:07:07 -04001839<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> and <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> are clear by default.
1840<a href='#LCD_Text'>LCD Text</a> or <a href='#Subpixel_Text'>Subpixel Text</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
1841<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> or <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> (or both) at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001842
1843### Example
1844
Cary Clark682c58d2018-05-16 07:07:07 -04001845<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href='#LCD_Text'>LCD Text</a> and <a href='#Subpixel_Text'>Subpixel Text</a>.
1846When <a href='#Subpixel_Text'>Subpixel Text</a> is disabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are identical, but not evenly spaced.
1847When <a href='#Subpixel_Text'>Subpixel Text</a> is enabled, the comma <a href='undocumented#Glyph'>Glyphs</a> are unique, but appear evenly spaced.
Cary Clark1a8d7622018-03-05 13:26:16 -05001848</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001849
Cary Clark682c58d2018-05-16 07:07:07 -04001850## <a name='Linear_Text'>Linear Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001851
Cary Clark682c58d2018-05-16 07:07:07 -04001852<a href='#Linear_Text'>Linear Text</a> selects whether text is rendered as a <a href='undocumented#Glyph'>Glyph</a> or as a <a href='SkPath_Reference#Path'>Path</a>.
1853If <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is set, it has the same effect as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a>.
1854If <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear, it is the same as setting <a href='#SkPaint_Hinting'>Hinting</a> to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001855
Cary Clark682c58d2018-05-16 07:07:07 -04001856<a name='SkPaint_isLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001857## isLinearText
1858
Cary Clark682c58d2018-05-16 07:07:07 -04001859<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1860bool <a href='#SkPaint_isLinearText'>isLinearText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001861</pre>
1862
Cary Clark682c58d2018-05-16 07:07:07 -04001863If true, text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001864
Cary Clark682c58d2018-05-16 07:07:07 -04001865Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001866
1867### Return Value
1868
Cary Clark682c58d2018-05-16 07:07:07 -04001869<a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001870
1871### Example
1872
1873<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1874
1875### See Also
1876
Cary Clark682c58d2018-05-16 07:07:07 -04001877<a href='#SkPaint_setLinearText'>setLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001878
1879---
1880
Cary Clark682c58d2018-05-16 07:07:07 -04001881<a name='SkPaint_setLinearText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001882## setLinearText
1883
Cary Clark682c58d2018-05-16 07:07:07 -04001884<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1885void <a href='#SkPaint_setLinearText'>setLinearText</a>(bool linearText)
Cary Clark12799e12017-07-28 15:18:29 -04001886</pre>
1887
Cary Clark682c58d2018-05-16 07:07:07 -04001888If true, text is converted to <a href='SkPath_Reference#Path'>Path</a> before drawing and measuring.
1889By default, <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001890
Cary Clark682c58d2018-05-16 07:07:07 -04001891Sets <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is true.
1892Clears <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a> if <a href='#SkPaint_setLinearText_linearText'>linearText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001893
1894### Parameters
1895
Cary Clark682c58d2018-05-16 07:07:07 -04001896<table> <tr> <td><a name='SkPaint_setLinearText_linearText'><code><strong>linearText</strong></code></a></td>
1897 <td>setting for <a href='#SkPaint_kLinearText_Flag'>kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001898 </tr>
1899</table>
1900
1901### Example
1902
1903<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1904
1905### See Also
1906
Cary Clark682c58d2018-05-16 07:07:07 -04001907<a href='#SkPaint_isLinearText'>isLinearText</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001908
1909---
1910
Cary Clark682c58d2018-05-16 07:07:07 -04001911## <a name='Subpixel_Text'>Subpixel Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001912
Cary Clark682c58d2018-05-16 07:07:07 -04001913<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001914As the opaqueness
1915of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1916
Cary Clark682c58d2018-05-16 07:07:07 -04001917<a name='SkPaint_isSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001918## isSubpixelText
1919
Cary Clark682c58d2018-05-16 07:07:07 -04001920<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1921bool <a href='#SkPaint_isSubpixelText'>isSubpixelText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001922</pre>
1923
Cary Clark682c58d2018-05-16 07:07:07 -04001924If true, <a href='undocumented#Glyph'>Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001925
Cary Clark682c58d2018-05-16 07:07:07 -04001926Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001927
1928### Return Value
1929
Cary Clark682c58d2018-05-16 07:07:07 -04001930<a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001931
1932### Example
1933
1934<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1935
1936#### Example Output
1937
1938~~~~
1939paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1940paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1941~~~~
1942
1943</fiddle-embed></div>
1944
1945---
1946
Cary Clark682c58d2018-05-16 07:07:07 -04001947<a name='SkPaint_setSubpixelText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001948## setSubpixelText
1949
Cary Clark682c58d2018-05-16 07:07:07 -04001950<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1951void <a href='#SkPaint_setSubpixelText'>setSubpixelText</a>(bool subpixelText)
Cary Clark12799e12017-07-28 15:18:29 -04001952</pre>
1953
Cary Clark682c58d2018-05-16 07:07:07 -04001954Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001955
Cary Clark682c58d2018-05-16 07:07:07 -04001956Sets <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is true.
1957Clears <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a> if <a href='#SkPaint_setSubpixelText_subpixelText'>subpixelText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001958
1959### Parameters
1960
Cary Clark682c58d2018-05-16 07:07:07 -04001961<table> <tr> <td><a name='SkPaint_setSubpixelText_subpixelText'><code><strong>subpixelText</strong></code></a></td>
1962 <td>setting for <a href='#SkPaint_kSubpixelText_Flag'>kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001963 </tr>
1964</table>
1965
1966### Example
1967
1968<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1969
1970#### Example Output
1971
1972~~~~
1973paint1 == paint2
1974~~~~
1975
1976</fiddle-embed></div>
1977
1978---
1979
Cary Clark682c58d2018-05-16 07:07:07 -04001980## <a name='LCD_Text'>LCD Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04001981
Cary Clarkffb3d682018-05-17 12:17:28 -04001982When set, <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> takes advantage of the organization of RGB stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001983create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001984on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark682c58d2018-05-16 07:07:07 -04001985<a href='#LCD_Text'>LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clarkffb3d682018-05-17 12:17:28 -04001986the color components as RGB or BGR.
Cary Clark12799e12017-07-28 15:18:29 -04001987
Cary Clark682c58d2018-05-16 07:07:07 -04001988<a name='SkPaint_isLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04001989## isLCDRenderText
1990
Cary Clark682c58d2018-05-16 07:07:07 -04001991<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
1992bool <a href='#SkPaint_isLCDRenderText'>isLCDRenderText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04001993</pre>
1994
Cary Clark682c58d2018-05-16 07:07:07 -04001995If true, <a href='undocumented#Glyph'>Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001996
Cary Clark682c58d2018-05-16 07:07:07 -04001997Returns true if <a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> is set.
Cary Clark12799e12017-07-28 15:18:29 -04001998
1999### Return Value
2000
Cary Clark682c58d2018-05-16 07:07:07 -04002001<a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002002
2003### Example
2004
skia-bookmakera717ca92018-07-08 05:32:09 +00002005<div><fiddle-embed name="bca6379ccef62cb081b10db7381deb27">
Cary Clark12799e12017-07-28 15:18:29 -04002006
2007#### Example Output
2008
2009~~~~
2010paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2011paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
2012~~~~
2013
2014</fiddle-embed></div>
2015
2016---
2017
Cary Clark682c58d2018-05-16 07:07:07 -04002018<a name='SkPaint_setLCDRenderText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002019## setLCDRenderText
2020
Cary Clark682c58d2018-05-16 07:07:07 -04002021<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2022void <a href='#SkPaint_setLCDRenderText'>setLCDRenderText</a>(bool lcdText)
Cary Clark12799e12017-07-28 15:18:29 -04002023</pre>
2024
Cary Clark682c58d2018-05-16 07:07:07 -04002025Requests, but does not require, that <a href='undocumented#Glyph'>Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04002026
Cary Clark682c58d2018-05-16 07:07:07 -04002027Sets <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is true.
2028Clears <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a> if <a href='#SkPaint_setLCDRenderText_lcdText'>lcdText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04002029
2030### Parameters
2031
Cary Clark682c58d2018-05-16 07:07:07 -04002032<table> <tr> <td><a name='SkPaint_setLCDRenderText_lcdText'><code><strong>lcdText</strong></code></a></td>
2033 <td>setting for <a href='#SkPaint_kLCDRenderText_Flag'>kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002034 </tr>
2035</table>
2036
2037### Example
2038
2039<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
2040
2041#### Example Output
2042
2043~~~~
2044paint1 == paint2
2045~~~~
2046
2047</fiddle-embed></div>
2048
2049---
2050
Cary Clark682c58d2018-05-16 07:07:07 -04002051## <a name='Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a>
Cary Clark08895c42018-02-01 09:37:32 -05002052
Cary Clark682c58d2018-05-16 07:07:07 -04002053<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href='undocumented#Glyph'>Glyphs</a>.
2054<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> when set chooses an embedded bitmap glyph over an outline contained
Cary Clark7cfcbca2018-01-04 16:11:51 -05002055in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04002056
Cary Clark682c58d2018-05-16 07:07:07 -04002057FreeType selects the bitmap glyph if available when <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is set, and selects
2058the outline glyph if <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002059Windows may select the bitmap glyph but is not required to do so.
Cary Clark682c58d2018-05-16 07:07:07 -04002060<a href='undocumented#OS_X'>OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04002061
Cary Clark682c58d2018-05-16 07:07:07 -04002062<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> is disabled by default.
2063<a href='#Font_Embedded_Bitmaps'>Font Embedded Bitmaps</a> can be enabled by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
2064<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002065
2066### Example
2067
Cary Clarka560c472017-11-27 10:44:06 -05002068<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
Cary Clark1a8d7622018-03-05 13:26:16 -05002069<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
Cary Clarka560c472017-11-27 10:44:06 -05002070 includes an embedded bitmap Glyph at odd font sizes. This example works
2071 on platforms that use FreeType as their Font_Engine.
2072 Windows may, but is not required to, return a bitmap glyph if
2073 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
2074 bitmap.allocN32Pixels(30, 15);
2075 bitmap.eraseColor(0);
2076 SkCanvas offscreen(bitmap);
2077 SkPaint paint;
2078 paint.setAntiAlias(true);
2079 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05002080 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05002081 for (bool embedded : { false, true}) {
2082 paint.setEmbeddedBitmapText(embedded);
2083 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
2084 }
2085 canvas->drawBitmap(bitmap, 0, 0);
2086 canvas->scale(10, 10);
2087 canvas->drawBitmap(bitmap, -2, 1);
Cary Clark1a8d7622018-03-05 13:26:16 -05002088
Cary Clarka560c472017-11-27 10:44:06 -05002089</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002090
Cary Clark682c58d2018-05-16 07:07:07 -04002091<a name='SkPaint_isEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002092## isEmbeddedBitmapText
2093
Cary Clark682c58d2018-05-16 07:07:07 -04002094<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2095bool <a href='#SkPaint_isEmbeddedBitmapText'>isEmbeddedBitmapText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002096</pre>
2097
Cary Clark682c58d2018-05-16 07:07:07 -04002098If true, <a href='undocumented#Engine'>Font Engine</a> may return <a href='undocumented#Glyph'>Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04002099
Cary Clark682c58d2018-05-16 07:07:07 -04002100Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002101
2102### Return Value
2103
Cary Clark682c58d2018-05-16 07:07:07 -04002104<a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002105
2106### Example
2107
2108<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
2109
2110#### Example Output
2111
2112~~~~
2113paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2114paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
2115~~~~
2116
2117</fiddle-embed></div>
2118
2119---
2120
Cary Clark682c58d2018-05-16 07:07:07 -04002121<a name='SkPaint_setEmbeddedBitmapText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002122## setEmbeddedBitmapText
2123
Cary Clark682c58d2018-05-16 07:07:07 -04002124<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2125void <a href='#SkPaint_setEmbeddedBitmapText'>setEmbeddedBitmapText</a>(bool useEmbeddedBitmapText)
Cary Clark12799e12017-07-28 15:18:29 -04002126</pre>
2127
2128Requests, but does not require, to use bitmaps in fonts instead of outlines.
2129
Cary Clark682c58d2018-05-16 07:07:07 -04002130Sets <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is true.
2131Clears <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a> if <a href='#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'>useEmbeddedBitmapText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04002132
2133### Parameters
2134
Cary Clark682c58d2018-05-16 07:07:07 -04002135<table> <tr> <td><a name='SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText'><code><strong>useEmbeddedBitmapText</strong></code></a></td>
2136 <td>setting for <a href='#SkPaint_kEmbeddedBitmapText_Flag'>kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002137 </tr>
2138</table>
2139
2140### Example
2141
2142<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
2143
2144#### Example Output
2145
2146~~~~
2147paint1 == paint2
2148~~~~
2149
2150</fiddle-embed></div>
2151
2152---
2153
Cary Clark682c58d2018-05-16 07:07:07 -04002154## <a name='Automatic_Hinting'>Automatic Hinting</a>
Cary Clark08895c42018-02-01 09:37:32 -05002155
Cary Clark682c58d2018-05-16 07:07:07 -04002156If <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, <a href='#Automatic_Hinting'>Automatic Hinting</a>
2157instructs the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2158<a href='#Automatic_Hinting'>Automatic Hinting</a> has no effect if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNo_Hinting'>kNo Hinting</a> or
2159<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002160
Cary Clark682c58d2018-05-16 07:07:07 -04002161<a href='#Automatic_Hinting'>Automatic Hinting</a> only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002162
Cary Clark682c58d2018-05-16 07:07:07 -04002163<a name='SkPaint_isAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002164## isAutohinted
2165
Cary Clark682c58d2018-05-16 07:07:07 -04002166<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2167bool <a href='#SkPaint_isAutohinted'>isAutohinted</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002168</pre>
2169
Cary Clark682c58d2018-05-16 07:07:07 -04002170If true, and if <a href='#SkPaint_Hinting'>Hinting</a> is set to <a href='#SkPaint_kNormal_Hinting'>kNormal Hinting</a> or <a href='#SkPaint_kFull_Hinting'>kFull Hinting</a>, and if
2171platform uses FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>, instruct the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint
2172<a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002173
Cary Clark682c58d2018-05-16 07:07:07 -04002174Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002175
2176### Return Value
2177
Cary Clark682c58d2018-05-16 07:07:07 -04002178<a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002179
2180### Example
2181
2182<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
2183
2184#### Example Output
2185
2186~~~~
2187paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2188paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
2189~~~~
2190
2191</fiddle-embed></div>
2192
2193### See Also
2194
Cary Clark682c58d2018-05-16 07:07:07 -04002195<a href='#SkPaint_setAutohinted'>setAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002196
2197---
2198
Cary Clark682c58d2018-05-16 07:07:07 -04002199<a name='SkPaint_setAutohinted'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002200## setAutohinted
2201
Cary Clark682c58d2018-05-16 07:07:07 -04002202<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2203void <a href='#SkPaint_setAutohinted'>setAutohinted</a>(bool useAutohinter)
Cary Clark12799e12017-07-28 15:18:29 -04002204</pre>
2205
Cary Clark682c58d2018-05-16 07:07:07 -04002206If <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,
2207instruct the <a href='undocumented#Font_Manager'>Font Manager</a> to always hint <a href='undocumented#Glyph'>Glyphs</a>.
2208<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
2209<a href='#SkPaint_kSlight_Hinting'>kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002210
Cary Clark682c58d2018-05-16 07:07:07 -04002211Only affects platforms that use FreeType as the <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002212
Cary Clark682c58d2018-05-16 07:07:07 -04002213Sets <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a> if <a href='#SkPaint_setAutohinted_useAutohinter'>useAutohinter</a> is true.
2214Clears <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 -04002215
2216### Parameters
2217
Cary Clark682c58d2018-05-16 07:07:07 -04002218<table> <tr> <td><a name='SkPaint_setAutohinted_useAutohinter'><code><strong>useAutohinter</strong></code></a></td>
2219 <td>setting for <a href='#SkPaint_kAutoHinting_Flag'>kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002220 </tr>
2221</table>
2222
2223### Example
2224
2225<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
2226
2227### See Also
2228
Cary Clark682c58d2018-05-16 07:07:07 -04002229<a href='#SkPaint_isAutohinted'>isAutohinted</a> <a href='#SkPaint_Hinting'>Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04002230
2231---
2232
Cary Clark682c58d2018-05-16 07:07:07 -04002233## <a name='Vertical_Text'>Vertical Text</a>
Cary Clark08895c42018-02-01 09:37:32 -05002234
Cary Clark682c58d2018-05-16 07:07:07 -04002235<a href='undocumented#Text'>Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
2236using <a href='undocumented#Advance'>Font Advance</a> to position subsequent <a href='undocumented#Glyph'>Glyphs</a>. By default, each successive glyph
2237is positioned to the right of the preceding glyph. <a href='#Vertical_Text'>Vertical Text</a> sets successive
2238<a href='undocumented#Glyph'>Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04002239
Cary Clark682c58d2018-05-16 07:07:07 -04002240Skia 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 -05002241font substitution,
Cary Clark137b8742018-05-30 09:21:49 -04002242textual substitution, line layout, or contextual spacing like <a href='undocumented#Kerning'>Kerning</a> pairs. Use
Cary Clark682c58d2018-05-16 07:07:07 -04002243a text shaping engine like <a href='https://harfbuzz.org/'>HarfBuzz</a></a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04002244into glyph series.
2245
Cary Clark682c58d2018-05-16 07:07:07 -04002246<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 -04002247
Cary Clark682c58d2018-05-16 07:07:07 -04002248<a href='#SkPaint_Flags'>Flags</a> <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if clear draws text left to right.
2249<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 -04002250
Cary Clark682c58d2018-05-16 07:07:07 -04002251<a href='#Vertical_Text'>Vertical Text</a> is clear by default.
2252<a href='#Vertical_Text'>Vertical Text</a> can be set by default by setting <a href='undocumented#SkPaintDefaults_Flags'>SkPaintDefaults Flags</a> to
2253<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04002254
2255### Example
2256
2257<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
2258
Cary Clark682c58d2018-05-16 07:07:07 -04002259<a name='SkPaint_isVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002260## isVerticalText
2261
Cary Clark682c58d2018-05-16 07:07:07 -04002262<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2263bool <a href='#SkPaint_isVerticalText'>isVerticalText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002264</pre>
2265
Cary Clark682c58d2018-05-16 07:07:07 -04002266If true, <a href='undocumented#Glyph'>Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04002267
Cary Clark682c58d2018-05-16 07:07:07 -04002268Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002269
2270### Return Value
2271
Cary Clark682c58d2018-05-16 07:07:07 -04002272<a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002273
2274### Example
2275
2276<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
2277
2278#### Example Output
2279
2280~~~~
2281paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2282paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
2283~~~~
2284
2285</fiddle-embed></div>
2286
2287---
2288
Cary Clark682c58d2018-05-16 07:07:07 -04002289<a name='SkPaint_setVerticalText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002290## setVerticalText
2291
Cary Clark682c58d2018-05-16 07:07:07 -04002292<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2293void <a href='#SkPaint_setVerticalText'>setVerticalText</a>(bool verticalText)
Cary Clark12799e12017-07-28 15:18:29 -04002294</pre>
2295
2296If true, text advance positions the next glyph below the previous glyph instead of to the
2297right of previous glyph.
2298
Cary Clark682c58d2018-05-16 07:07:07 -04002299Sets <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is true.
2300Clears <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04002301
2302### Parameters
2303
Cary Clark682c58d2018-05-16 07:07:07 -04002304<table> <tr> <td><a name='SkPaint_setVerticalText_verticalText'><code><strong>verticalText</strong></code></a></td>
2305 <td>setting for <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002306 </tr>
2307</table>
2308
2309### Example
2310
2311<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
2312
2313#### Example Output
2314
2315~~~~
2316paint1 == paint2
2317~~~~
2318
2319</fiddle-embed></div>
2320
2321---
2322
Cary Clark682c58d2018-05-16 07:07:07 -04002323## <a name='Fake_Bold'>Fake Bold</a>
Cary Clark08895c42018-02-01 09:37:32 -05002324
Cary Clark682c58d2018-05-16 07:07:07 -04002325<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 -05002326is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clark682c58d2018-05-16 07:07:07 -04002327bold font face using the platform <a href='undocumented#Font_Manager'>Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002328
Cary Clark682c58d2018-05-16 07:07:07 -04002329Use <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 -04002330is not available.
2331
Cary Clark7cfcbca2018-01-04 16:11:51 -05002332A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clark682c58d2018-05-16 07:07:07 -04002333the font engine to create the bold <a href='undocumented#Glyph'>Glyphs</a>. Otherwise, the extra bold is computed
2334by 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 -04002335
Cary Clark682c58d2018-05-16 07:07:07 -04002336<a href='#Fake_Bold'>Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04002337
2338### Example
2339
2340<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
2341
Cary Clark682c58d2018-05-16 07:07:07 -04002342<a name='SkPaint_isFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002343## isFakeBoldText
2344
Cary Clark682c58d2018-05-16 07:07:07 -04002345<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2346bool <a href='#SkPaint_isFakeBoldText'>isFakeBoldText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002347</pre>
2348
2349If true, approximate bold by increasing the stroke width when creating glyph bitmaps
2350from outlines.
2351
Cary Clark682c58d2018-05-16 07:07:07 -04002352Equivalent to <a href='#SkPaint_getFlags'>getFlags</a> masked with <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002353
2354### Return Value
2355
Cary Clark682c58d2018-05-16 07:07:07 -04002356<a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04002357
2358### Example
2359
2360<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
2361
2362#### Example Output
2363
2364~~~~
2365paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2366paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
2367~~~~
2368
2369</fiddle-embed></div>
2370
2371---
2372
Cary Clark682c58d2018-05-16 07:07:07 -04002373<a name='SkPaint_setFakeBoldText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002374## setFakeBoldText
2375
Cary Clark682c58d2018-05-16 07:07:07 -04002376<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2377void <a href='#SkPaint_setFakeBoldText'>setFakeBoldText</a>(bool fakeBoldText)
Cary Clark12799e12017-07-28 15:18:29 -04002378</pre>
2379
Cary Clarkce101242017-09-01 15:51:02 -04002380Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04002381
Cary Clark682c58d2018-05-16 07:07:07 -04002382Sets <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a> if <a href='#SkPaint_setFakeBoldText_fakeBoldText'>fakeBoldText</a> is true.
2383Clears <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 -04002384
2385### Parameters
2386
Cary Clark682c58d2018-05-16 07:07:07 -04002387<table> <tr> <td><a name='SkPaint_setFakeBoldText_fakeBoldText'><code><strong>fakeBoldText</strong></code></a></td>
2388 <td>setting for <a href='#SkPaint_kFakeBoldText_Flag'>kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002389 </tr>
2390</table>
2391
2392### Example
2393
2394<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
2395
2396#### Example Output
2397
2398~~~~
2399paint1 == paint2
2400~~~~
2401
2402</fiddle-embed></div>
2403
2404---
2405
Cary Clark682c58d2018-05-16 07:07:07 -04002406## <a name='Full_Hinting_Spacing'>Full Hinting Spacing</a>
Cary Clark08895c42018-02-01 09:37:32 -05002407
Cary Clark682c58d2018-05-16 07:07:07 -04002408if <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 -04002409spacing 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 -04002410<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
2411FreeType as their <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002412
Cary Clark137b8742018-05-30 09:21:49 -04002413<a href='#Full_Hinting_Spacing'>Full Hinting Spacing</a> is not related to text <a href='undocumented#Kerning'>Kerning</a>, where the space between
2414a 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 -04002415
Cary Clark682c58d2018-05-16 07:07:07 -04002416<a name='SkPaint_isDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002417## isDevKernText
2418
Cary Clark682c58d2018-05-16 07:07:07 -04002419<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2420bool <a href='#SkPaint_isDevKernText'>isDevKernText</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002421</pre>
2422
Cary Clark682c58d2018-05-16 07:07:07 -04002423Deprecated.
2424
Cary Clark12799e12017-07-28 15:18:29 -04002425---
2426
Cary Clark682c58d2018-05-16 07:07:07 -04002427<a name='SkPaint_setDevKernText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002428## setDevKernText
2429
Cary Clark682c58d2018-05-16 07:07:07 -04002430<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2431void <a href='#SkPaint_setDevKernText'>setDevKernText</a>(bool)
Cary Clark12799e12017-07-28 15:18:29 -04002432</pre>
2433
Cary Clark682c58d2018-05-16 07:07:07 -04002434Deprecated.
2435
Cary Clark12799e12017-07-28 15:18:29 -04002436---
2437
Cary Clark682c58d2018-05-16 07:07:07 -04002438## <a name='Filter_Quality_Methods'>Filter Quality Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05002439
Cary Clark682c58d2018-05-16 07:07:07 -04002440<a href='undocumented#Filter_Quality'>Filter Quality</a> trades speed for image filtering when the image is scaled.
2441A lower <a href='undocumented#Filter_Quality'>Filter Quality</a> draws faster, but has less fidelity.
2442A higher <a href='undocumented#Filter_Quality'>Filter Quality</a> draws slower, but looks better.
2443If 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 -04002444in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04002445
Cary Clark682c58d2018-05-16 07:07:07 -04002446<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 -04002447
2448<table> <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002449 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmap'>SkCanvas::drawBitmap</a></td>
2450 </tr> <tr>
2451 <td><a href='SkCanvas_Reference#SkCanvas_drawBitmapRect'>SkCanvas::drawBitmapRect</a></td>
2452 </tr> <tr>
2453 <td><a href='SkCanvas_Reference#SkCanvas_drawImage'>SkCanvas::drawImage</a></td>
2454 </tr> <tr>
2455 <td><a href='SkCanvas_Reference#SkCanvas_drawImageRect'>SkCanvas::drawImageRect</a></td>
2456 </tr>
Cary Clark12799e12017-07-28 15:18:29 -04002457</table>
2458
Cary Clark682c58d2018-05-16 07:07:07 -04002459and 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 -04002460
Cary Clark682c58d2018-05-16 07:07:07 -04002461<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 -04002462
2463### Example
2464
skia-bookmaker525f9a92018-05-03 06:27:39 +00002465<div><fiddle-embed name="69369cff2f5b145a6f616092513266a0"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002466
Cary Clark682c58d2018-05-16 07:07:07 -04002467<a name='SkPaint_getFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002468## getFilterQuality
2469
Cary Clark682c58d2018-05-16 07:07:07 -04002470<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2471<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='#SkPaint_getFilterQuality'>getFilterQuality</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002472</pre>
2473
Cary Clark682c58d2018-05-16 07:07:07 -04002474Returns <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002475draws faster; a higher setting looks better when the image is scaled.
2476
2477### Return Value
2478
Cary Clark682c58d2018-05-16 07:07:07 -04002479one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2480<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04002481
2482### Example
2483
2484<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
2485
2486#### Example Output
2487
2488~~~~
2489kNone_SkFilterQuality == paint.getFilterQuality()
2490~~~~
2491
2492</fiddle-embed></div>
2493
2494---
2495
Cary Clark682c58d2018-05-16 07:07:07 -04002496<a name='SkPaint_setFilterQuality'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002497## setFilterQuality
2498
Cary Clark682c58d2018-05-16 07:07:07 -04002499<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2500void <a href='#SkPaint_setFilterQuality'>setFilterQuality</a>(<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> quality)
Cary Clark12799e12017-07-28 15:18:29 -04002501</pre>
2502
Cary Clark682c58d2018-05-16 07:07:07 -04002503Sets <a href='undocumented#Filter_Quality'>Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04002504draws faster; a higher setting looks better when the image is scaled.
Cary Clark682c58d2018-05-16 07:07:07 -04002505Does not check to see if <a href='#SkPaint_setFilterQuality_quality'>quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04002506
2507### Parameters
2508
Cary Clark682c58d2018-05-16 07:07:07 -04002509<table> <tr> <td><a name='SkPaint_setFilterQuality_quality'><code><strong>quality</strong></code></a></td>
2510 <td>one of: <a href='undocumented#kNone_SkFilterQuality'>kNone_SkFilterQuality</a>, <a href='undocumented#kLow_SkFilterQuality'>kLow_SkFilterQuality</a>,
2511<a href='undocumented#kMedium_SkFilterQuality'>kMedium_SkFilterQuality</a>, <a href='undocumented#kHigh_SkFilterQuality'>kHigh_SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002512 </tr>
2513</table>
2514
2515### Example
2516
2517<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
2518
2519#### Example Output
2520
2521~~~~
2522kHigh_SkFilterQuality == paint.getFilterQuality()
2523~~~~
2524
2525</fiddle-embed></div>
2526
2527### See Also
2528
Cary Clark682c58d2018-05-16 07:07:07 -04002529<a href='undocumented#SkFilterQuality'>SkFilterQuality</a> <a href='undocumented#Image_Scaling'>Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04002530
2531---
2532
Cary Clark682c58d2018-05-16 07:07:07 -04002533## <a name='Color_Methods'>Color Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002534
Cary Clarkab2621d2018-01-30 10:08:57 -05002535| name | description |
2536| --- | --- |
Cary Clarkffb3d682018-05-17 12:17:28 -04002537| <a href='#SkPaint_getColor'>getColor</a> | returns <a href='SkColor_Reference#Alpha'>Color Alpha</a> and RGB, one drawing color |
2538| <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 -04002539
Cary Clarkffb3d682018-05-17 12:17:28 -04002540<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 -05002541values used to draw a filled or stroked shape in a 32-bit value. Each component
2542occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
2543All values in any combination are valid.
2544
Cary Clark682c58d2018-05-16 07:07:07 -04002545<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 -04002546RGB: red, blue, and green.
Cary Clarkab2621d2018-01-30 10:08:57 -05002547
Cary Clarkffb3d682018-05-17 12:17:28 -04002548The 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 -05002549positions on the output device, which may have more or fewer bits, and may have
2550a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04002551
Cary Clarkffb3d682018-05-17 12:17:28 -04002552| bit positions | <a href='SkColor_Reference#Alpha'>Color Alpha</a> | red | blue | green |
Cary Clark12799e12017-07-28 15:18:29 -04002553| --- | --- | --- | --- | --- |
2554| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
2555
2556### Example
2557
2558<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
2559
Cary Clark682c58d2018-05-16 07:07:07 -04002560<a name='SkPaint_getColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002561## getColor
2562
Cary Clark682c58d2018-05-16 07:07:07 -04002563<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2564<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_getColor'>getColor</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002565</pre>
2566
Cary Clarkffb3d682018-05-17 12:17:28 -04002567Retrieves <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 -04002568Use 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 -04002569a color component.
2570
2571### Return Value
2572
Cary Clarkffb3d682018-05-17 12:17:28 -04002573<a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB
Cary Clark12799e12017-07-28 15:18:29 -04002574
2575### Example
2576
2577<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
2578
2579#### Example Output
2580
2581~~~~
2582Yellow is 100% red, 100% green, and 0% blue.
2583~~~~
2584
2585</fiddle-embed></div>
2586
2587### See Also
2588
Cary Clark682c58d2018-05-16 07:07:07 -04002589<a href='SkColor_Reference#SkColor'>SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04002590
2591---
2592
Cary Clark682c58d2018-05-16 07:07:07 -04002593<a name='SkPaint_setColor'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002594## setColor
2595
Cary Clark682c58d2018-05-16 07:07:07 -04002596<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2597void <a href='#SkPaint_setColor'>setColor</a>(<a href='SkColor_Reference#SkColor'>SkColor</a> color)
Cary Clark12799e12017-07-28 15:18:29 -04002598</pre>
2599
Cary Clarkffb3d682018-05-17 12:17:28 -04002600Sets <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,
2601<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 -04002602
2603### Parameters
2604
Cary Clark682c58d2018-05-16 07:07:07 -04002605<table> <tr> <td><a name='SkPaint_setColor_color'><code><strong>color</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002606 <td><a href='undocumented#Unpremultiply'>Unpremultiplied</a> ARGB</td>
Cary Clark12799e12017-07-28 15:18:29 -04002607 </tr>
2608</table>
2609
2610### Example
2611
skia-bookmaker233c6522018-07-04 05:33:26 +00002612<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
Cary Clark12799e12017-07-28 15:18:29 -04002613
2614#### Example Output
2615
2616~~~~
2617green1 == green2
2618~~~~
2619
2620</fiddle-embed></div>
2621
2622### See Also
2623
Cary Clark682c58d2018-05-16 07:07:07 -04002624<a href='SkColor_Reference#SkColor'>SkColor</a> <a href='#SkPaint_setARGB'>setARGB</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002625
2626---
2627
Cary Clark682c58d2018-05-16 07:07:07 -04002628## <a name='Alpha_Methods'>Alpha Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04002629
Cary Clarkffb3d682018-05-17 12:17:28 -04002630<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 -04002631
Cary Clark682c58d2018-05-16 07:07:07 -04002632<a name='SkPaint_getAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002633## getAlpha
2634
Cary Clark682c58d2018-05-16 07:07:07 -04002635<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2636uint8_t <a href='#SkPaint_getAlpha'>getAlpha</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002637</pre>
2638
Cary Clark682c58d2018-05-16 07:07:07 -04002639Retrieves <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 -04002640
2641### Return Value
2642
Cary Clark682c58d2018-05-16 07:07:07 -04002643<a href='SkColor_Reference#Alpha'>Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04002644
2645### Example
2646
2647<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
2648
2649#### Example Output
2650
2651~~~~
2652255 == paint.getAlpha()
2653~~~~
2654
2655</fiddle-embed></div>
2656
2657---
2658
Cary Clark682c58d2018-05-16 07:07:07 -04002659<a name='SkPaint_setAlpha'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002660## setAlpha
2661
Cary Clark682c58d2018-05-16 07:07:07 -04002662<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2663void <a href='#SkPaint_setAlpha'>setAlpha</a>(<a href='undocumented#U8CPU'>U8CPU</a> a)
Cary Clark12799e12017-07-28 15:18:29 -04002664</pre>
2665
Cary Clarkffb3d682018-05-17 12:17:28 -04002666Replaces <a href='SkColor_Reference#Alpha'>Alpha</a>, leaving RGB
Cary Clark12799e12017-07-28 15:18:29 -04002667unchanged. An out of range value triggers an assert in the debug
Cary Clark682c58d2018-05-16 07:07:07 -04002668build. <a href='#SkPaint_setAlpha_a'>a</a> is <a href='#SkPaint_setAlpha_a'>a</a> value from zero to 255.
2669<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 -04002670fully opaque.
2671
2672### Parameters
2673
Cary Clark682c58d2018-05-16 07:07:07 -04002674<table> <tr> <td><a name='SkPaint_setAlpha_a'><code><strong>a</strong></code></a></td>
2675 <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 -04002676 </tr>
2677</table>
2678
2679### Example
2680
2681<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
2682
2683#### Example Output
2684
2685~~~~
26860x44112233 == paint.getColor()
2687~~~~
2688
2689</fiddle-embed></div>
2690
2691---
2692
Cary Clark682c58d2018-05-16 07:07:07 -04002693<a name='SkPaint_setARGB'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002694## setARGB
2695
Cary Clark682c58d2018-05-16 07:07:07 -04002696<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2697void <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 -04002698</pre>
2699
Cary Clark682c58d2018-05-16 07:07:07 -04002700Sets <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 -04002701The 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 -04002702
2703### Parameters
2704
Cary Clark682c58d2018-05-16 07:07:07 -04002705<table> <tr> <td><a name='SkPaint_setARGB_a'><code><strong>a</strong></code></a></td>
2706 <td>amount of <a href='SkColor_Reference#Alpha'>Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2707 </tr>
2708 <tr> <td><a name='SkPaint_setARGB_r'><code><strong>r</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002709 <td>amount of red, from no red (0) to full red (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002710 </tr>
2711 <tr> <td><a name='SkPaint_setARGB_g'><code><strong>g</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002712 <td>amount of green, from no green (0) to full green (255)</td>
Cary Clark682c58d2018-05-16 07:07:07 -04002713 </tr>
2714 <tr> <td><a name='SkPaint_setARGB_b'><code><strong>b</strong></code></a></td>
Cary Clarkffb3d682018-05-17 12:17:28 -04002715 <td>amount of blue, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002716 </tr>
2717</table>
2718
2719### Example
2720
2721<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2722
2723#### Example Output
2724
2725~~~~
2726transRed1 == transRed2
2727~~~~
2728
2729</fiddle-embed></div>
2730
2731### See Also
2732
Cary Clark682c58d2018-05-16 07:07:07 -04002733<a href='#SkPaint_setColor'>setColor</a> <a href='SkColor_Reference#SkColorSetARGB'>SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002734
2735---
2736
Cary Clark682c58d2018-05-16 07:07:07 -04002737## <a name='Style'>Style</a>
Cary Clark08895c42018-02-01 09:37:32 -05002738
Cary Clark682c58d2018-05-16 07:07:07 -04002739<a href='#SkPaint_Style'>Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2740Some shapes ignore <a href='#SkPaint_Style'>Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002741
Cary Clark682c58d2018-05-16 07:07:07 -04002742Set <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 -04002743The fill covers the area inside the geometry for most shapes.
2744
Cary Clark682c58d2018-05-16 07:07:07 -04002745Set <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 -04002746
Cary Clark682c58d2018-05-16 07:07:07 -04002747## <a name='Style_Fill'>Style Fill</a>
Cary Clark12799e12017-07-28 15:18:29 -04002748
2749### See Also
2750
Cary Clark682c58d2018-05-16 07:07:07 -04002751<a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002752
Cary Clark682c58d2018-05-16 07:07:07 -04002753## <a name='Style_Stroke'>Style Stroke</a>
Cary Clark12799e12017-07-28 15:18:29 -04002754
Cary Clarkbc5697d2017-10-04 14:31:33 -04002755The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark682c58d2018-05-16 07:07:07 -04002756<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>.
2757The 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 -04002758The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002759
Cary Clark682c58d2018-05-16 07:07:07 -04002760As <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
2761may 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 -04002762
Cary Clark682c58d2018-05-16 07:07:07 -04002763## <a name='Style_Hairline'>Style Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002764
Cary Clark682c58d2018-05-16 07:07:07 -04002765<a href='#Stroke_Width'>Stroke Width</a> of zero has a special meaning and switches drawing to use <a href='#Style_Hairline'>Hairline</a>.
2766<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 -05002767flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002768
Cary Clark682c58d2018-05-16 07:07:07 -04002769<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
2770two 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
2771pixel. 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 -05002772GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002773while stroking.
2774
Cary Clark682c58d2018-05-16 07:07:07 -04002775## <a name='SkPaint_Style'>Enum SkPaint::Style</a>
Cary Clark12799e12017-07-28 15:18:29 -04002776
Cary Clarka560c472017-11-27 10:44:06 -05002777<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04002778 enum <a href='#SkPaint_Style'>Style</a> {
2779 <a href='#SkPaint_kFill_Style'>kFill Style</a>,
2780 <a href='#SkPaint_kStroke_Style'>kStroke Style</a>,
2781 <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04002782 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04002783
Cary Clark682c58d2018-05-16 07:07:07 -04002784 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 -05002785</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002786
Cary Clark682c58d2018-05-16 07:07:07 -04002787Set <a href='#SkPaint_Style'>Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002788The stroke and fill
2789share all paint attributes; for instance, they are drawn with the same color.
2790
Cary Clark682c58d2018-05-16 07:07:07 -04002791Use <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 -04002792a fill draw.
2793
2794### Constants
2795
Cary Clark682c58d2018-05-16 07:07:07 -04002796<table style='border-collapse: collapse; width: 62.5em'>
2797 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
2798<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
2799<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
2800 <tr style='background-color: #f0f0f0; '>
2801 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kFill_Style'><code>SkPaint::kFill_Style</code></a></td>
2802 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
2803 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark224c7002018-06-27 11:00:21 -04002804Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002805<a href='SkBitmap_Reference#Bitmap'>Bitmap</a>, <a href='SkImage_Reference#Image'>Image</a>, <a href='undocumented#Patch'>Patches</a>, <a href='undocumented#Region'>Region</a>, <a href='undocumented#Sprite'>Sprites</a>, and <a href='undocumented#Vertices'>Vertices</a> are painted as if
2806<a href='#SkPaint_kFill_Style'>kFill Style</a> is set, and ignore the set <a href='#SkPaint_Style'>Style</a>.
2807The <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 -04002808and to create an unfilled hole inside the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002809<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 -05002810</td>
Cary Clark12799e12017-07-28 15:18:29 -04002811 </tr>
2812 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002813 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStroke_Style'><code>SkPaint::kStroke_Style</code></a></td>
2814 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
2815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark224c7002018-06-27 11:00:21 -04002816Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Arc'>Arcs</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002817<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,
2818and ignore the set <a href='#SkPaint_Style'>Style</a>.
2819The stroke construction is unaffected by the <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a>.
2820</td>
2821 </tr>
2822 <tr style='background-color: #f0f0f0; '>
2823 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStrokeAndFill_Style'><code>SkPaint::kStrokeAndFill_Style</code></a></td>
2824 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
2825 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark224c7002018-06-27 11:00:21 -04002826Applies to <a href='SkRect_Reference#Rect'>Rect</a>, <a href='undocumented#Region'>Region</a>, <a href='SkRRect_Reference#RRect'>Round Rect</a>, <a href='undocumented#Circle'>Circles</a>, <a href='undocumented#Oval'>Ovals</a>, <a href='SkPath_Reference#Path'>Path</a>, and <a href='undocumented#Text'>Text</a>.
Cary Clark682c58d2018-05-16 07:07:07 -04002827<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>,
2828and the set <a href='SkPath_Reference#Fill_Type'>Path Fill Type</a> is ignored.
Cary Clark1a8d7622018-03-05 13:26:16 -05002829</td>
Cary Clark12799e12017-07-28 15:18:29 -04002830 </tr>
2831 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002832 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kStyleCount'><code>SkPaint::kStyleCount</code></a></td>
2833 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
2834 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
2835May be used to verify that <a href='#SkPaint_Style'>Style</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05002836</td>
Cary Clark12799e12017-07-28 15:18:29 -04002837 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04002838</table>
Cary Clark12799e12017-07-28 15:18:29 -04002839
Cary Clark682c58d2018-05-16 07:07:07 -04002840<a name='SkPaint_getStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002841## getStyle
2842
Cary Clark682c58d2018-05-16 07:07:07 -04002843<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2844<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002845</pre>
2846
2847Whether the geometry is filled, stroked, or filled and stroked.
2848
2849### Return Value
2850
Cary Clark682c58d2018-05-16 07:07:07 -04002851one 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 -04002852
2853### Example
2854
2855<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2856
2857#### Example Output
2858
2859~~~~
2860SkPaint::kFill_Style == paint.getStyle()
2861~~~~
2862
2863</fiddle-embed></div>
2864
2865### See Also
2866
Cary Clark682c58d2018-05-16 07:07:07 -04002867<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_setStyle'>setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002868
2869---
2870
Cary Clark682c58d2018-05-16 07:07:07 -04002871<a name='SkPaint_setStyle'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002872## setStyle
2873
Cary Clark682c58d2018-05-16 07:07:07 -04002874<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2875void <a href='#SkPaint_setStyle'>setStyle</a>(<a href='#SkPaint_Style'>Style</a> style)
Cary Clark12799e12017-07-28 15:18:29 -04002876</pre>
2877
2878Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark682c58d2018-05-16 07:07:07 -04002879Has 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 -04002880
2881### Parameters
2882
Cary Clark682c58d2018-05-16 07:07:07 -04002883<table> <tr> <td><a name='SkPaint_setStyle_style'><code><strong>style</strong></code></a></td>
2884 <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 -04002885 </tr>
2886</table>
2887
2888### Example
2889
2890<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2891
2892### See Also
2893
Cary Clark682c58d2018-05-16 07:07:07 -04002894<a href='#SkPaint_Style'>Style</a> <a href='#SkPaint_getStyle'>getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002895
2896---
2897
2898### See Also
2899
Cary Clark682c58d2018-05-16 07:07:07 -04002900<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 -04002901
Cary Clark682c58d2018-05-16 07:07:07 -04002902## <a name='Stroke_Width'>Stroke Width</a>
Cary Clark08895c42018-02-01 09:37:32 -05002903
Cary Clark682c58d2018-05-16 07:07:07 -04002904<a href='#Stroke_Width'>Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002905of the stroke perpendicular to the path direction when the paint style is
Cary Clark682c58d2018-05-16 07:07:07 -04002906set 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 -04002907
2908When width is greater than zero, the stroke encompasses as many pixels partially
2909or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002910the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002911
Cary Clark682c58d2018-05-16 07:07:07 -04002912The stroke dimensions are scaled by the canvas matrix, but <a href='#Style_Hairline'>Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002913remains one pixel wide regardless of scaling.
2914
2915The default width for the paint is zero.
2916
2917### Example
2918
skia-bookmaker525f9a92018-05-03 06:27:39 +00002919<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 -05002920line and the platform implementation.
2921</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002922
Cary Clark682c58d2018-05-16 07:07:07 -04002923<a name='SkPaint_getStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002924## getStrokeWidth
2925
Cary Clark682c58d2018-05-16 07:07:07 -04002926<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2927<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeWidth'>getStrokeWidth</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04002928</pre>
2929
Cary Clark682c58d2018-05-16 07:07:07 -04002930Returns the thickness of the pen used by <a href='#Paint'>Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002931outline the shape.
2932
2933### Return Value
2934
Cary Clark682c58d2018-05-16 07:07:07 -04002935zero for <a href='#Style_Hairline'>Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002936
2937### Example
2938
skia-bookmakerb95bbba2018-07-06 05:23:23 +00002939<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
Cary Clark12799e12017-07-28 15:18:29 -04002940
2941#### Example Output
2942
2943~~~~
29440 == paint.getStrokeWidth()
2945~~~~
2946
2947</fiddle-embed></div>
2948
2949---
2950
Cary Clark682c58d2018-05-16 07:07:07 -04002951<a name='SkPaint_setStrokeWidth'></a>
Cary Clark12799e12017-07-28 15:18:29 -04002952## setStrokeWidth
2953
Cary Clark682c58d2018-05-16 07:07:07 -04002954<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
2955void <a href='#SkPaint_setStrokeWidth'>setStrokeWidth</a>(<a href='undocumented#SkScalar'>SkScalar</a> width)
Cary Clark12799e12017-07-28 15:18:29 -04002956</pre>
2957
2958Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002959outline the shape.
Cary Clark682c58d2018-05-16 07:07:07 -04002960Has no effect if <a href='#SkPaint_setStrokeWidth_width'>width</a> is less than zero.
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_setStrokeWidth_width'><code><strong>width</strong></code></a></td>
2965 <td>zero thickness for <a href='#Style_Hairline'>Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002966 </tr>
2967</table>
2968
2969### Example
2970
2971<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2972
2973#### Example Output
2974
2975~~~~
29765 == paint.getStrokeWidth()
2977~~~~
2978
2979</fiddle-embed></div>
2980
2981---
2982
Cary Clark682c58d2018-05-16 07:07:07 -04002983## <a name='Miter_Limit'>Miter Limit</a>
Cary Clark08895c42018-02-01 09:37:32 -05002984
Cary Clark682c58d2018-05-16 07:07:07 -04002985<a href='#Miter_Limit'>Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002986relative to the stroke width.
2987
Cary Clark682c58d2018-05-16 07:07:07 -04002988<a href='#Miter_Limit'>Miter Limit</a> is used when the <a href='#Stroke_Join'>Stroke Join</a>
2989is 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>
2990or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002991
Cary Clark682c58d2018-05-16 07:07:07 -04002992If the miter at a corner exceeds this limit, <a href='#SkPaint_kMiter_Join'>kMiter Join</a>
2993is replaced with <a href='#SkPaint_kBevel_Join'>kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002994
Cary Clark682c58d2018-05-16 07:07:07 -04002995<a href='#Miter_Limit'>Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002996
Cary Clark682c58d2018-05-16 07:07:07 -04002997miter limit = 1 / sin ( angle / 2 )<a href='#Miter_Limit'>Miter Limit</a> default value is 4.
2998The default may be changed at compile time by setting <a href='undocumented#SkPaintDefaults_MiterLimit'>SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002999in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04003000
3001Here are some miter limits and the angles that triggers them.
3002
3003| miter limit | angle in degrees |
3004| --- | --- |
3005| 10 | 11.48 |
3006| 9 | 12.76 |
3007| 8 | 14.36 |
3008| 7 | 16.43 |
3009| 6 | 19.19 |
3010| 5 | 23.07 |
3011| 4 | 28.96 |
3012| 3 | 38.94 |
3013| 2 | 60 |
3014| 1 | 180 |
3015
3016### Example
3017
3018<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
3019When the miter limit is decreased slightly, the miter join is replaced
Cary Clark1a8d7622018-03-05 13:26:16 -05003020by a bevel join.
3021</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003022
Cary Clark682c58d2018-05-16 07:07:07 -04003023<a name='SkPaint_getStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003024## getStrokeMiter
3025
Cary Clark682c58d2018-05-16 07:07:07 -04003026<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3027<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getStrokeMiter'>getStrokeMiter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003028</pre>
3029
3030The limit at which a sharp corner is drawn beveled.
3031
3032### Return Value
3033
Cary Clark682c58d2018-05-16 07:07:07 -04003034zero and greater <a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003035
3036### Example
3037
3038<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
3039
3040#### Example Output
3041
3042~~~~
3043default miter limit == 4
3044~~~~
3045
3046</fiddle-embed></div>
3047
3048### See Also
3049
Cary Clark682c58d2018-05-16 07:07:07 -04003050<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 -04003051
3052---
3053
Cary Clark682c58d2018-05-16 07:07:07 -04003054<a name='SkPaint_setStrokeMiter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003055## setStrokeMiter
3056
Cary Clark682c58d2018-05-16 07:07:07 -04003057<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3058void <a href='#SkPaint_setStrokeMiter'>setStrokeMiter</a>(<a href='undocumented#SkScalar'>SkScalar</a> miter)
Cary Clark12799e12017-07-28 15:18:29 -04003059</pre>
3060
3061The limit at which a sharp corner is drawn beveled.
3062Valid values are zero and greater.
Cary Clark682c58d2018-05-16 07:07:07 -04003063Has no effect if <a href='#SkPaint_setStrokeMiter_miter'>miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04003064
3065### Parameters
3066
Cary Clark682c58d2018-05-16 07:07:07 -04003067<table> <tr> <td><a name='SkPaint_setStrokeMiter_miter'><code><strong>miter</strong></code></a></td>
3068 <td>zero and greater <a href='#Miter_Limit'>Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003069 </tr>
3070</table>
3071
3072### Example
3073
skia-bookmakera717ca92018-07-08 05:32:09 +00003074<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
Cary Clark12799e12017-07-28 15:18:29 -04003075
3076#### Example Output
3077
3078~~~~
3079default miter limit == 8
3080~~~~
3081
3082</fiddle-embed></div>
3083
3084### See Also
3085
Cary Clark682c58d2018-05-16 07:07:07 -04003086<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 -04003087
3088---
3089
Cary Clark682c58d2018-05-16 07:07:07 -04003090## <a name='Stroke_Cap'>Stroke Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003091
Cary Clark682c58d2018-05-16 07:07:07 -04003092## <a name='SkPaint_Cap'>Enum SkPaint::Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003093
Cary Clarka560c472017-11-27 10:44:06 -05003094<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003095 enum <a href='#SkPaint_Cap'>Cap</a> {
3096 <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
3097 <a href='#SkPaint_kRound_Cap'>kRound Cap</a>,
3098 <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003099
Cary Clark682c58d2018-05-16 07:07:07 -04003100 <a href='#SkPaint_kLast_Cap'>kLast Cap</a> = <a href='#SkPaint_kSquare_Cap'>kSquare Cap</a>,
3101 <a href='#SkPaint_kDefault_Cap'>kDefault Cap</a> = <a href='#SkPaint_kButt_Cap'>kButt Cap</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003102 };
Cary Clark6fc50412017-09-21 12:31:06 -04003103
Cary Clark682c58d2018-05-16 07:07:07 -04003104 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 -05003105</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003106
Cary Clark682c58d2018-05-16 07:07:07 -04003107<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 -04003108
3109### Constants
3110
Cary Clark682c58d2018-05-16 07:07:07 -04003111<table style='border-collapse: collapse; width: 62.5em'>
3112 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3113<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3114<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3115 <tr style='background-color: #f0f0f0; '>
3116 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kButt_Cap'><code>SkPaint::kButt_Cap</code></a></td>
3117 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3118 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3119Does not extend the stroke past the beginning or the end.
Cary Clark1a8d7622018-03-05 13:26:16 -05003120</td>
Cary Clark12799e12017-07-28 15:18:29 -04003121 </tr>
3122 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003123 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Cap'><code>SkPaint::kRound_Cap</code></a></td>
3124 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3125 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3126Adds a circle with a diameter equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark1a8d7622018-03-05 13:26:16 -05003127and end.
3128</td>
Cary Clark12799e12017-07-28 15:18:29 -04003129 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003130 <tr style='background-color: #f0f0f0; '>
3131 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kSquare_Cap'><code>SkPaint::kSquare_Cap</code></a></td>
3132 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3133 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3134Adds a square with sides equal to <a href='#Stroke_Width'>Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04003135and end. The square sides are parallel to the initial and final direction
Cary Clark1a8d7622018-03-05 13:26:16 -05003136of the stroke.
3137</td>
Cary Clark12799e12017-07-28 15:18:29 -04003138 </tr>
3139 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003140 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Cap'><code>SkPaint::kLast_Cap</code></a></td>
3141 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3142 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3143Equivalent to the largest value for <a href='#Stroke_Cap'>Stroke Cap</a>.
3144</td>
3145 </tr>
3146 <tr style='background-color: #f0f0f0; '>
3147 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Cap'><code>SkPaint::kDefault_Cap</code></a></td>
3148 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3149 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3150<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 -05003151</td>
Cary Clark12799e12017-07-28 15:18:29 -04003152 </tr>
3153 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003154 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCapCount'><code>SkPaint::kCapCount</code></a></td>
3155 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3156 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3157May be used to verify that <a href='#Stroke_Cap'>Stroke Cap</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003158</td>
Cary Clark12799e12017-07-28 15:18:29 -04003159 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003160</table>
Cary Clark12799e12017-07-28 15:18:29 -04003161
Cary Clark682c58d2018-05-16 07:07:07 -04003162Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3163follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003164
Cary Clark682c58d2018-05-16 07:07:07 -04003165If 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 -04003166visible beginning and end.
3167
Cary Clark682c58d2018-05-16 07:07:07 -04003168<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 -04003169
Cary Clark682c58d2018-05-16 07:07:07 -04003170<a href='#SkPaint_kButt_Cap'>kButt Cap</a> and <a href='SkPath_Reference#Contour_Zero_Length'>Zero Length Contour</a> is not drawn.
3171<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 -04003172at the contour point.
Cary Clark682c58d2018-05-16 07:07:07 -04003173<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
3174<a href='#Stroke_Width'>Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04003175
Cary Clark682c58d2018-05-16 07:07:07 -04003176<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 -04003177
Cary Clark12799e12017-07-28 15:18:29 -04003178### Example
3179
Cary Clark2ade9972017-11-02 17:49:34 -04003180<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003181
Cary Clark682c58d2018-05-16 07:07:07 -04003182<a name='SkPaint_getStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003183## getStrokeCap
3184
Cary Clark682c58d2018-05-16 07:07:07 -04003185<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3186<a href='#SkPaint_Cap'>Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003187</pre>
3188
3189The geometry drawn at the beginning and end of strokes.
3190
3191### Return Value
3192
Cary Clark682c58d2018-05-16 07:07:07 -04003193one 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 -04003194
3195### Example
3196
3197<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
3198
3199#### Example Output
3200
3201~~~~
3202kButt_Cap == default stroke cap
3203~~~~
3204
3205</fiddle-embed></div>
3206
3207### See Also
3208
Cary Clark682c58d2018-05-16 07:07:07 -04003209<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003210
3211---
3212
Cary Clark682c58d2018-05-16 07:07:07 -04003213<a name='SkPaint_setStrokeCap'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003214## setStrokeCap
3215
Cary Clark682c58d2018-05-16 07:07:07 -04003216<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3217void <a href='#SkPaint_setStrokeCap'>setStrokeCap</a>(<a href='#SkPaint_Cap'>Cap</a> cap)
Cary Clark12799e12017-07-28 15:18:29 -04003218</pre>
3219
3220The geometry drawn at the beginning and end of strokes.
3221
3222### Parameters
3223
Cary Clark682c58d2018-05-16 07:07:07 -04003224<table> <tr> <td><a name='SkPaint_setStrokeCap_cap'><code><strong>cap</strong></code></a></td>
3225 <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>;
3226has no effect if <a href='#SkPaint_setStrokeCap_cap'>cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04003227 </tr>
3228</table>
3229
3230### Example
3231
3232<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
3233
3234#### Example Output
3235
3236~~~~
3237kRound_Cap == paint.getStrokeCap()
3238~~~~
3239
3240</fiddle-embed></div>
3241
3242### See Also
3243
Cary Clark682c58d2018-05-16 07:07:07 -04003244<a href='#Stroke_Cap'>Stroke Cap</a> <a href='#SkPaint_getStrokeCap'>getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04003245
3246---
3247
Cary Clark682c58d2018-05-16 07:07:07 -04003248## <a name='Stroke_Join'>Stroke Join</a>
Cary Clark08895c42018-02-01 09:37:32 -05003249
Cary Clark682c58d2018-05-16 07:07:07 -04003250<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 -04003251
Cary Clark682c58d2018-05-16 07:07:07 -04003252Stroke describes the area covered by a pen of <a href='#Stroke_Width'>Stroke Width</a> as it
3253follows the <a href='SkPath_Reference#Contour'>Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04003254
3255If the contour direction changes abruptly, because the tangent direction leading
3256to the end of a curve within the contour does not match the tangent direction of
Cary Clark682c58d2018-05-16 07:07:07 -04003257the following curve, the pair of curves meet at <a href='#Stroke_Join'>Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003258
3259### Example
3260
Cary Clark2ade9972017-11-02 17:49:34 -04003261<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003262
Cary Clark682c58d2018-05-16 07:07:07 -04003263## <a name='SkPaint_Join'>Enum SkPaint::Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04003264
Cary Clarka560c472017-11-27 10:44:06 -05003265<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04003266 enum <a href='#SkPaint_Join'>Join</a> {
3267 <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
3268 <a href='#SkPaint_kRound_Join'>kRound Join</a>,
3269 <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003270
Cary Clark682c58d2018-05-16 07:07:07 -04003271 <a href='#SkPaint_kLast_Join'>kLast Join</a> = <a href='#SkPaint_kBevel_Join'>kBevel Join</a>,
3272 <a href='#SkPaint_kDefault_Join'>kDefault Join</a> = <a href='#SkPaint_kMiter_Join'>kMiter Join</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04003273 };
Cary Clark6fc50412017-09-21 12:31:06 -04003274
Cary Clark682c58d2018-05-16 07:07:07 -04003275 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 -05003276</pre>
Cary Clark12799e12017-07-28 15:18:29 -04003277
Cary Clark682c58d2018-05-16 07:07:07 -04003278<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 -04003279affects the four corners of a stroked rectangle, and the connected segments in a
3280stroked path.
3281
3282Choose miter join to draw sharp corners. Choose round join to draw a circle with a
3283radius equal to the stroke width on top of the corner. Choose bevel join to minimally
3284connect the thick strokes.
3285
Cary Clark7cfcbca2018-01-04 16:11:51 -05003286The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04003287not contain the actual join. For instance, a fill path constructed with round joins does
3288not necessarily include circles at each connected segment.
3289
3290### Constants
3291
Cary Clark682c58d2018-05-16 07:07:07 -04003292<table style='border-collapse: collapse; width: 62.5em'>
3293 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
3294<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
3295<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
3296 <tr style='background-color: #f0f0f0; '>
3297 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kMiter_Join'><code>SkPaint::kMiter_Join</code></a></td>
3298 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
3299 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3300Extends the outside corner to the extent allowed by <a href='#Miter_Limit'>Miter Limit</a>.
3301If 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 -05003302</td>
Cary Clark12799e12017-07-28 15:18:29 -04003303 </tr>
3304 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003305 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRound_Join'><code>SkPaint::kRound_Join</code></a></td>
3306 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3307 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3308Adds a circle with a diameter of <a href='#Stroke_Width'>Stroke Width</a> at the sharp corner.
3309</td>
3310 </tr>
3311 <tr style='background-color: #f0f0f0; '>
3312 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kBevel_Join'><code>SkPaint::kBevel_Join</code></a></td>
3313 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3314 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3315Connects the outside edges of the sharp corner.
Cary Clark1a8d7622018-03-05 13:26:16 -05003316</td>
Cary Clark12799e12017-07-28 15:18:29 -04003317 </tr>
3318 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003319 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLast_Join'><code>SkPaint::kLast_Join</code></a></td>
3320 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
3321 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3322equivalent to the largest value for Stroke_Join</td>
3323 </tr>
3324 <tr style='background-color: #f0f0f0; '>
3325 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kDefault_Join'><code>SkPaint::kDefault_Join</code></a></td>
3326 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
3327 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3328<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 -05003329</td>
Cary Clark12799e12017-07-28 15:18:29 -04003330 </tr>
3331 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04003332 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kJoinCount'><code>SkPaint::kJoinCount</code></a></td>
3333 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
3334 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
3335May be used to verify that <a href='#Stroke_Join'>Stroke Join</a> is a legal value.
Cary Clark1a8d7622018-03-05 13:26:16 -05003336</td>
Cary Clark12799e12017-07-28 15:18:29 -04003337 </tr>
3338</table>
3339
3340### Example
3341
3342<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
3343
3344### See Also
3345
Cary Clark682c58d2018-05-16 07:07:07 -04003346<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 -04003347
Cary Clark682c58d2018-05-16 07:07:07 -04003348<a name='SkPaint_getStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003349## getStrokeJoin
3350
Cary Clark682c58d2018-05-16 07:07:07 -04003351<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3352<a href='#SkPaint_Join'>Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003353</pre>
3354
Cary Clark0c5f5462017-12-15 11:21:51 -05003355The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003356
3357### Return Value
3358
Cary Clark682c58d2018-05-16 07:07:07 -04003359one 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 -04003360
3361### Example
3362
skia-bookmaker44bad2e2018-07-05 05:35:27 +00003363<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
Cary Clark12799e12017-07-28 15:18:29 -04003364
3365#### Example Output
3366
3367~~~~
3368kMiter_Join == default stroke join
3369~~~~
3370
3371</fiddle-embed></div>
3372
3373### See Also
3374
Cary Clark682c58d2018-05-16 07:07:07 -04003375<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003376
3377---
3378
Cary Clark682c58d2018-05-16 07:07:07 -04003379<a name='SkPaint_setStrokeJoin'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003380## setStrokeJoin
3381
Cary Clark682c58d2018-05-16 07:07:07 -04003382<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3383void <a href='#SkPaint_setStrokeJoin'>setStrokeJoin</a>(<a href='#SkPaint_Join'>Join</a> join)
Cary Clark12799e12017-07-28 15:18:29 -04003384</pre>
3385
Cary Clark0c5f5462017-12-15 11:21:51 -05003386The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04003387
3388### Parameters
3389
Cary Clark682c58d2018-05-16 07:07:07 -04003390<table> <tr> <td><a name='SkPaint_setStrokeJoin_join'><code><strong>join</strong></code></a></td>
3391 <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 -04003392otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04003393 </tr>
3394</table>
3395
3396### Example
3397
3398<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
3399
3400#### Example Output
3401
3402~~~~
3403kMiter_Join == paint.getStrokeJoin()
3404~~~~
3405
3406</fiddle-embed></div>
3407
3408### See Also
3409
Cary Clark682c58d2018-05-16 07:07:07 -04003410<a href='#Stroke_Join'>Stroke Join</a> <a href='#SkPaint_getStrokeJoin'>getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04003411
3412---
3413
3414### See Also
3415
Cary Clark682c58d2018-05-16 07:07:07 -04003416<a href='#Miter_Limit'>Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04003417
Cary Clark682c58d2018-05-16 07:07:07 -04003418## <a name='Fill_Path'>Fill Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05003419
Cary Clark682c58d2018-05-16 07:07:07 -04003420<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 -04003421
Cary Clark682c58d2018-05-16 07:07:07 -04003422If <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
3423replaces the destination <a href='SkPath_Reference#Path'>Path</a>. Otherwise, the source <a href='SkPath_Reference#Path'>Path</a> is replaces the
3424destination <a href='SkPath_Reference#Path'>Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003425
Cary Clark682c58d2018-05-16 07:07:07 -04003426Fill <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
3427the <a href='undocumented#Path_Effect'>Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04003428
Cary Clark682c58d2018-05-16 07:07:07 -04003429If <a href='#SkPaint_Style'>Style</a> is <a href='#SkPaint_kStroke_Style'>kStroke Style</a> or <a href='#SkPaint_kStrokeAndFill_Style'>kStrokeAndFill Style</a>,
3430and <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>,
3431and <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 -04003432
Cary Clark682c58d2018-05-16 07:07:07 -04003433Fill <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 -04003434
Cary Clark682c58d2018-05-16 07:07:07 -04003435If 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>
3436returns false since <a href='#Style_Hairline'>Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04003437
Cary Clark682c58d2018-05-16 07:07:07 -04003438<a name='SkPaint_getFillPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003439## getFillPath
3440
Cary Clark682c58d2018-05-16 07:07:07 -04003441<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3442bool <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 -04003443</pre>
3444
3445The filled equivalent of the stroked path.
3446
3447### Parameters
3448
Cary Clark682c58d2018-05-16 07:07:07 -04003449<table> <tr> <td><a name='SkPaint_getFillPath_src'><code><strong>src</strong></code></a></td>
3450 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3451 </tr>
3452 <tr> <td><a name='SkPaint_getFillPath_dst'><code><strong>dst</strong></code></a></td>
3453 <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>
3454 </tr>
3455 <tr> <td><a name='SkPaint_getFillPath_cullRect'><code><strong>cullRect</strong></code></a></td>
3456 <td>optional limit passed to <a href='undocumented#Path_Effect'>Path Effect</a></td>
3457 </tr>
3458 <tr> <td><a name='SkPaint_getFillPath_resScale'><code><strong>resScale</strong></code></a></td>
3459 <td>if > 1, increase precision, else if (0 < res < 1) reduce precision
Cary Clark12799e12017-07-28 15:18:29 -04003460to favor speed and size</td>
3461 </tr>
3462</table>
3463
3464### Return Value
3465
Cary Clark682c58d2018-05-16 07:07:07 -04003466true 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 -04003467
3468### Example
3469
Cary Clark682c58d2018-05-16 07:07:07 -04003470<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.
3471At the lowest precision, the <a href='SkPath_Reference#Quad'>Quad</a> stroke is approximated by a rectangle.
Cary Clark1a8d7622018-03-05 13:26:16 -05003472At the highest precision, the filled path has high fidelity compared to the original stroke.
3473</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003474
3475---
3476
Cary Clark682c58d2018-05-16 07:07:07 -04003477<a name='SkPaint_getFillPath_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05003478
Cary Clark682c58d2018-05-16 07:07:07 -04003479<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3480bool <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 -04003481</pre>
3482
3483The filled equivalent of the stroked path.
3484
Cary Clark682c58d2018-05-16 07:07:07 -04003485Replaces <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>.
3486<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 -04003487
3488### Parameters
3489
Cary Clark682c58d2018-05-16 07:07:07 -04003490<table> <tr> <td><a name='SkPaint_getFillPath_2_src'><code><strong>src</strong></code></a></td>
3491 <td><a href='SkPath_Reference#Path'>Path</a> read to create a filled version</td>
3492 </tr>
3493 <tr> <td><a name='SkPaint_getFillPath_2_dst'><code><strong>dst</strong></code></a></td>
3494 <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 -04003495 </tr>
3496</table>
3497
3498### Return Value
3499
Cary Clark682c58d2018-05-16 07:07:07 -04003500true 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 -04003501
3502### Example
3503
3504<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
3505
3506---
3507
3508### See Also
3509
Cary Clark682c58d2018-05-16 07:07:07 -04003510<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 -04003511
Cary Clark682c58d2018-05-16 07:07:07 -04003512## <a name='Shader_Methods'>Shader Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003513
Cary Clark682c58d2018-05-16 07:07:07 -04003514<a href='undocumented#Shader'>Shader</a> defines the colors used when drawing a shape.
3515<a href='undocumented#Shader'>Shader</a> may be an image, a gradient, or a computed fill.
3516If <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 -04003517
Cary Clark682c58d2018-05-16 07:07:07 -04003518<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>.
3519If <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 -04003520the fill.
3521
Cary Clark682c58d2018-05-16 07:07:07 -04003522The 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 -04003523
3524### Example
3525
3526<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
3527
Cary Clark682c58d2018-05-16 07:07:07 -04003528If <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 -04003529
3530### Example
3531
skia-bookmaker525f9a92018-05-03 06:27:39 +00003532<div><fiddle-embed name="fe80fd80b98a20823db7fb9a077243c7"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003533
Cary Clark682c58d2018-05-16 07:07:07 -04003534<a name='SkPaint_getShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003535## getShader
3536
Cary Clark682c58d2018-05-16 07:07:07 -04003537<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3538<a href='undocumented#SkShader'>SkShader</a>* <a href='#SkPaint_getShader'>getShader</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003539</pre>
3540
3541Optional colors used when filling a path, such as a gradient.
3542
Cary Clark682c58d2018-05-16 07:07:07 -04003543Does not alter <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003544
3545### Return Value
3546
Cary Clark682c58d2018-05-16 07:07:07 -04003547<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003548
3549### Example
3550
3551<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
3552
3553#### Example Output
3554
3555~~~~
3556nullptr == shader
3557nullptr != shader
3558~~~~
3559
3560</fiddle-embed></div>
3561
3562---
3563
Cary Clark682c58d2018-05-16 07:07:07 -04003564<a name='SkPaint_refShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003565## refShader
3566
Cary Clark682c58d2018-05-16 07:07:07 -04003567<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3568<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 -04003569</pre>
3570
3571Optional colors used when filling a path, such as a gradient.
3572
Cary Clark682c58d2018-05-16 07:07:07 -04003573Increases <a href='undocumented#Shader'>Shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003574
3575### Return Value
3576
Cary Clark682c58d2018-05-16 07:07:07 -04003577<a href='undocumented#Shader'>Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003578
3579### Example
3580
3581<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
3582
3583#### Example Output
3584
3585~~~~
3586shader unique: true
3587shader unique: false
3588~~~~
3589
3590</fiddle-embed></div>
3591
3592---
3593
Cary Clark682c58d2018-05-16 07:07:07 -04003594<a name='SkPaint_setShader'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003595## setShader
3596
Cary Clark682c58d2018-05-16 07:07:07 -04003597<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3598void <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 -04003599</pre>
3600
3601Optional colors used when filling a path, such as a gradient.
3602
Cary Clark682c58d2018-05-16 07:07:07 -04003603Sets <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>.
3604Increments <a href='#SkPaint_setShader_shader'>shader</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003605
3606### Parameters
3607
Cary Clark682c58d2018-05-16 07:07:07 -04003608<table> <tr> <td><a name='SkPaint_setShader_shader'><code><strong>shader</strong></code></a></td>
3609 <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 -04003610 </tr>
3611</table>
3612
3613### Example
3614
Cary Clark82f1f742018-06-28 08:50:35 -04003615<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003616
3617---
3618
Cary Clark682c58d2018-05-16 07:07:07 -04003619## <a name='Color_Filter_Methods'>Color Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003620
Cary Clark682c58d2018-05-16 07:07:07 -04003621<a href='undocumented#Color_Filter'>Color Filter</a> alters the color used when drawing a shape.
Cary Clark224c7002018-06-27 11:00:21 -04003622<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 -04003623If <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 -04003624
Cary Clark682c58d2018-05-16 07:07:07 -04003625The 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 -04003626
3627### Example
3628
3629<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
3630
Cary Clark682c58d2018-05-16 07:07:07 -04003631<a name='SkPaint_getColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003632## getColorFilter
3633
Cary Clark682c58d2018-05-16 07:07:07 -04003634<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3635<a href='undocumented#SkColorFilter'>SkColorFilter</a>* <a href='#SkPaint_getColorFilter'>getColorFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003636</pre>
3637
Cary Clark682c58d2018-05-16 07:07:07 -04003638Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3639Does 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 -04003640
3641### Return Value
3642
Cary Clark682c58d2018-05-16 07:07:07 -04003643<a href='undocumented#Color_Filter'>Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003644
3645### Example
3646
3647<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
3648
3649#### Example Output
3650
3651~~~~
3652nullptr == color filter
3653nullptr != color filter
3654~~~~
3655
3656</fiddle-embed></div>
3657
3658---
3659
Cary Clark682c58d2018-05-16 07:07:07 -04003660<a name='SkPaint_refColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003661## refColorFilter
3662
Cary Clark682c58d2018-05-16 07:07:07 -04003663<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3664<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 -04003665</pre>
3666
Cary Clark682c58d2018-05-16 07:07:07 -04003667Returns <a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr.
3668Increases <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 -04003669
3670### Return Value
3671
Cary Clark682c58d2018-05-16 07:07:07 -04003672<a href='undocumented#Color_Filter'>Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04003673
3674### Example
3675
3676<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
3677
3678#### Example Output
3679
3680~~~~
3681color filter unique: true
3682color filter unique: false
3683~~~~
3684
3685</fiddle-embed></div>
3686
3687---
3688
Cary Clark682c58d2018-05-16 07:07:07 -04003689<a name='SkPaint_setColorFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003690## setColorFilter
3691
Cary Clark682c58d2018-05-16 07:07:07 -04003692<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3693void <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 -04003694</pre>
3695
Cary Clark682c58d2018-05-16 07:07:07 -04003696Sets <a href='undocumented#Color_Filter'>Color Filter</a> to filter, decreasing <a href='undocumented#Reference_Count'>Reference Count</a> of the previous
3697<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 -04003698
Cary Clark682c58d2018-05-16 07:07:07 -04003699Increments filter <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003700
3701### Parameters
3702
Cary Clark682c58d2018-05-16 07:07:07 -04003703<table> <tr> <td><a name='SkPaint_setColorFilter_colorFilter'><code><strong>colorFilter</strong></code></a></td>
3704 <td><a href='undocumented#Color_Filter'>Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04003705 </tr>
3706</table>
3707
3708### Example
3709
Cary Clark82f1f742018-06-28 08:50:35 -04003710<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003711
3712---
3713
Cary Clark682c58d2018-05-16 07:07:07 -04003714## <a name='Blend_Mode_Methods'>Blend Mode Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003715
Cary Clark224c7002018-06-27 11:00:21 -04003716<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> describes how <a href='SkColor_Reference#Color'>Color</a> combines with the destination color.
3717The default setting, <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04003718over the destination color.
3719
3720### Example
3721
3722<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
3723
3724### See Also
3725
Cary Clark224c7002018-06-27 11:00:21 -04003726<a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04003727
Cary Clark682c58d2018-05-16 07:07:07 -04003728<a name='SkPaint_getBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003729## getBlendMode
3730
Cary Clark682c58d2018-05-16 07:07:07 -04003731<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003732<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> <a href='#SkPaint_getBlendMode'>getBlendMode</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003733</pre>
3734
Cary Clark224c7002018-06-27 11:00:21 -04003735Returns <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
3736By default, returns <a href='SkBlendMode_Reference#SkBlendMode_kSrcOver'>SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003737
3738### Return Value
3739
3740mode used to combine source color with destination color
3741
3742### Example
3743
skia-bookmaker525f9a92018-05-03 06:27:39 +00003744<div><fiddle-embed name="a1e059c8f6740fa2044cc64152b39dda">
Cary Clark12799e12017-07-28 15:18:29 -04003745
3746#### Example Output
3747
3748~~~~
3749kSrcOver == getBlendMode
3750kSrcOver != getBlendMode
3751~~~~
3752
3753</fiddle-embed></div>
3754
3755---
3756
Cary Clark682c58d2018-05-16 07:07:07 -04003757<a name='SkPaint_isSrcOver'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003758## isSrcOver
3759
Cary Clark682c58d2018-05-16 07:07:07 -04003760<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3761bool <a href='#SkPaint_isSrcOver'>isSrcOver</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003762</pre>
3763
Cary Clark224c7002018-06-27 11:00:21 -04003764Returns 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 -04003765
3766### Return Value
3767
Cary Clark224c7002018-06-27 11:00:21 -04003768true 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 -04003769
3770### Example
3771
3772<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3773
3774#### Example Output
3775
3776~~~~
3777isSrcOver == true
3778isSrcOver != true
3779~~~~
3780
3781</fiddle-embed></div>
3782
3783---
3784
Cary Clark682c58d2018-05-16 07:07:07 -04003785<a name='SkPaint_setBlendMode'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003786## setBlendMode
3787
Cary Clark682c58d2018-05-16 07:07:07 -04003788<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
Cary Clark224c7002018-06-27 11:00:21 -04003789void <a href='#SkPaint_setBlendMode'>setBlendMode</a>(<a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> mode)
Cary Clark12799e12017-07-28 15:18:29 -04003790</pre>
3791
Cary Clark224c7002018-06-27 11:00:21 -04003792Sets <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a> to <a href='#SkPaint_setBlendMode_mode'>mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003793Does not check for valid input.
3794
3795### Parameters
3796
Cary Clark682c58d2018-05-16 07:07:07 -04003797<table> <tr> <td><a name='SkPaint_setBlendMode_mode'><code><strong>mode</strong></code></a></td>
Cary Clark224c7002018-06-27 11:00:21 -04003798 <td><a href='SkBlendMode_Reference#SkBlendMode'>SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003799 </tr>
3800</table>
3801
3802### Example
3803
3804<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3805
3806#### Example Output
3807
3808~~~~
3809isSrcOver == true
3810isSrcOver != true
3811~~~~
3812
3813</fiddle-embed></div>
3814
3815---
3816
Cary Clark682c58d2018-05-16 07:07:07 -04003817## <a name='Path_Effect_Methods'>Path Effect Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003818
Cary Clark682c58d2018-05-16 07:07:07 -04003819<a href='undocumented#Path_Effect'>Path Effect</a> modifies the path geometry before drawing it.
3820<a href='undocumented#Path_Effect'>Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
3821If <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 -04003822
3823### Example
3824
3825<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3826
3827### See Also
3828
Cary Clark682c58d2018-05-16 07:07:07 -04003829<a href='undocumented#Path_Effect'>Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003830
Cary Clark682c58d2018-05-16 07:07:07 -04003831<a name='SkPaint_getPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003832## getPathEffect
3833
Cary Clark682c58d2018-05-16 07:07:07 -04003834<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3835<a href='undocumented#SkPathEffect'>SkPathEffect</a>* <a href='#SkPaint_getPathEffect'>getPathEffect</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003836</pre>
3837
Cary Clark682c58d2018-05-16 07:07:07 -04003838Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3839Does 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 -04003840
3841### Return Value
3842
Cary Clark682c58d2018-05-16 07:07:07 -04003843<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003844
3845### Example
3846
skia-bookmakerb95bbba2018-07-06 05:23:23 +00003847<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
Cary Clark12799e12017-07-28 15:18:29 -04003848
3849#### Example Output
3850
3851~~~~
3852nullptr == path effect
3853nullptr != path effect
3854~~~~
3855
3856</fiddle-embed></div>
3857
3858---
3859
Cary Clark682c58d2018-05-16 07:07:07 -04003860<a name='SkPaint_refPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003861## refPathEffect
3862
Cary Clark682c58d2018-05-16 07:07:07 -04003863<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3864<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 -04003865</pre>
3866
Cary Clark682c58d2018-05-16 07:07:07 -04003867Returns <a href='undocumented#Path_Effect'>Path Effect</a> if set, or nullptr.
3868Increases <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 -04003869
3870### Return Value
3871
Cary Clark682c58d2018-05-16 07:07:07 -04003872<a href='undocumented#Path_Effect'>Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003873
3874### Example
3875
skia-bookmakera717ca92018-07-08 05:32:09 +00003876<div><fiddle-embed name="7cdea37741d50f0594c6244eb07fd175">
Cary Clark12799e12017-07-28 15:18:29 -04003877
3878#### Example Output
3879
3880~~~~
3881path effect unique: true
3882path effect unique: false
3883~~~~
3884
3885</fiddle-embed></div>
3886
3887---
3888
Cary Clark682c58d2018-05-16 07:07:07 -04003889<a name='SkPaint_setPathEffect'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003890## setPathEffect
3891
Cary Clark682c58d2018-05-16 07:07:07 -04003892<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3893void <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 -04003894</pre>
3895
Cary Clark682c58d2018-05-16 07:07:07 -04003896Sets <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
3897<a href='undocumented#Path_Effect'>Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003898
Cary Clark682c58d2018-05-16 07:07:07 -04003899Increments <a href='#SkPaint_setPathEffect_pathEffect'>pathEffect</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003900
3901### Parameters
3902
Cary Clark682c58d2018-05-16 07:07:07 -04003903<table> <tr> <td><a name='SkPaint_setPathEffect_pathEffect'><code><strong>pathEffect</strong></code></a></td>
3904 <td>replace <a href='SkPath_Reference#Path'>Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003905 </tr>
3906</table>
3907
3908### Example
3909
3910<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3911
3912---
3913
Cary Clark682c58d2018-05-16 07:07:07 -04003914## <a name='Mask_Filter_Methods'>Mask Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05003915
Cary Clark682c58d2018-05-16 07:07:07 -04003916<a href='undocumented#Mask_Filter'>Mask Filter</a> uses coverage of the shape drawn to create <a href='undocumented#Mask_Alpha'>Mask Alpha</a>.
3917<a href='undocumented#Mask_Filter'>Mask Filter</a> takes a Mask, and returns a Mask.
Cary Clark6fc50412017-09-21 12:31:06 -04003918
Cary Clark682c58d2018-05-16 07:07:07 -04003919<a href='undocumented#Mask_Filter'>Mask Filter</a> may change the geometry and transparency of the shape, such as
3920creating 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 -04003921modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003922
3923### Example
3924
Cary Clark681287e2018-03-16 11:34:15 -04003925<div><fiddle-embed name="55d7b9d482ac8e17a6153f555a8adb8d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003926
Cary Clark682c58d2018-05-16 07:07:07 -04003927<a name='SkPaint_getMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003928## getMaskFilter
3929
Cary Clark682c58d2018-05-16 07:07:07 -04003930<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3931<a href='undocumented#SkMaskFilter'>SkMaskFilter</a>* <a href='#SkPaint_getMaskFilter'>getMaskFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04003932</pre>
3933
Cary Clark682c58d2018-05-16 07:07:07 -04003934Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
3935Does 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 -04003936
3937### Return Value
3938
Cary Clark682c58d2018-05-16 07:07:07 -04003939<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003940
3941### Example
3942
Cary Clark681287e2018-03-16 11:34:15 -04003943<div><fiddle-embed name="5ac4b31371726da87bb7390b385e9fee">
Cary Clark12799e12017-07-28 15:18:29 -04003944
3945#### Example Output
3946
3947~~~~
3948nullptr == mask filter
3949nullptr != mask filter
3950~~~~
3951
3952</fiddle-embed></div>
3953
3954---
3955
Cary Clark682c58d2018-05-16 07:07:07 -04003956<a name='SkPaint_refMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003957## refMaskFilter
3958
Cary Clark682c58d2018-05-16 07:07:07 -04003959<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3960<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 -04003961</pre>
3962
Cary Clark682c58d2018-05-16 07:07:07 -04003963Returns <a href='undocumented#Mask_Filter'>Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003964
Cary Clark682c58d2018-05-16 07:07:07 -04003965Increases <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 -04003966
3967### Return Value
3968
Cary Clark682c58d2018-05-16 07:07:07 -04003969<a href='undocumented#Mask_Filter'>Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003970
3971### Example
3972
Cary Clark681287e2018-03-16 11:34:15 -04003973<div><fiddle-embed name="084b0dc3cebd78718c651d58f257f799">
Cary Clark12799e12017-07-28 15:18:29 -04003974
3975#### Example Output
3976
3977~~~~
3978mask filter unique: true
3979mask filter unique: false
3980~~~~
3981
3982</fiddle-embed></div>
3983
3984---
3985
Cary Clark682c58d2018-05-16 07:07:07 -04003986<a name='SkPaint_setMaskFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04003987## setMaskFilter
3988
Cary Clark682c58d2018-05-16 07:07:07 -04003989<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
3990void <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 -04003991</pre>
3992
Cary Clark682c58d2018-05-16 07:07:07 -04003993Sets <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
3994<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
3995<a href='undocumented#Mask_Alpha'>Mask Alpha</a> unaltered.
Cary Clark6fc50412017-09-21 12:31:06 -04003996
Cary Clark682c58d2018-05-16 07:07:07 -04003997Increments <a href='#SkPaint_setMaskFilter_maskFilter'>maskFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003998
3999### Parameters
4000
Cary Clark682c58d2018-05-16 07:07:07 -04004001<table> <tr> <td><a name='SkPaint_setMaskFilter_maskFilter'><code><strong>maskFilter</strong></code></a></td>
4002 <td>modifies clipping mask generated from drawn geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04004003 </tr>
4004</table>
4005
4006### Example
4007
Cary Clark681287e2018-03-16 11:34:15 -04004008<div><fiddle-embed name="a993831c40f3e134f809134e3b74e4a6"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004009
4010---
4011
Cary Clark682c58d2018-05-16 07:07:07 -04004012## <a name='Typeface_Methods'>Typeface Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004013
Cary Clark682c58d2018-05-16 07:07:07 -04004014<a href='undocumented#Typeface'>Typeface</a> identifies the font used when drawing and measuring text.
4015<a href='undocumented#Typeface'>Typeface</a> may be specified by name, from a file, or from a data stream.
4016The default <a href='undocumented#Typeface'>Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04004017implementation.
4018
4019### Example
4020
Cary Clark82f1f742018-06-28 08:50:35 -04004021<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004022
Cary Clark682c58d2018-05-16 07:07:07 -04004023<a name='SkPaint_getTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004024## getTypeface
4025
Cary Clark682c58d2018-05-16 07:07:07 -04004026<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4027<a href='undocumented#SkTypeface'>SkTypeface</a>* <a href='#SkPaint_getTypeface'>getTypeface</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004028</pre>
4029
Cary Clark682c58d2018-05-16 07:07:07 -04004030Returns <a href='undocumented#Typeface'>Typeface</a> if set, or nullptr.
Cary Clark81abc432018-06-25 16:30:08 -04004031Does not alter <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004032
4033### Return Value
4034
Cary Clark682c58d2018-05-16 07:07:07 -04004035<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004036
4037### Example
4038
Cary Clark71961fb2018-01-05 14:21:59 -05004039<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04004040
4041#### Example Output
4042
4043~~~~
4044nullptr == typeface
4045nullptr != typeface
4046~~~~
4047
4048</fiddle-embed></div>
4049
4050---
4051
Cary Clark682c58d2018-05-16 07:07:07 -04004052<a name='SkPaint_refTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004053## refTypeface
4054
Cary Clark682c58d2018-05-16 07:07:07 -04004055<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4056<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 -04004057</pre>
4058
Cary Clark682c58d2018-05-16 07:07:07 -04004059Increases <a href='undocumented#Typeface'>Typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004060
4061### Return Value
4062
Cary Clark682c58d2018-05-16 07:07:07 -04004063<a href='undocumented#Typeface'>Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004064
4065### Example
4066
skia-bookmakera717ca92018-07-08 05:32:09 +00004067<div><fiddle-embed name="8b5aa7e555a0dc31be69db7cadf471a1">
Cary Clark12799e12017-07-28 15:18:29 -04004068
4069#### Example Output
4070
4071~~~~
4072typeface1 != typeface2
4073typeface1 == typeface2
4074~~~~
4075
4076</fiddle-embed></div>
4077
4078---
4079
Cary Clark682c58d2018-05-16 07:07:07 -04004080<a name='SkPaint_setTypeface'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004081## setTypeface
4082
Cary Clark682c58d2018-05-16 07:07:07 -04004083<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4084void <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 -04004085</pre>
4086
Cary Clark682c58d2018-05-16 07:07:07 -04004087Sets <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>.
4088Pass nullptr to clear <a href='undocumented#Typeface'>Typeface</a> and use the default <a href='#SkPaint_setTypeface_typeface'>typeface</a>. Increments
4089<a href='#SkPaint_setTypeface_typeface'>typeface</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004090
4091### Parameters
4092
Cary Clark682c58d2018-05-16 07:07:07 -04004093<table> <tr> <td><a name='SkPaint_setTypeface_typeface'><code><strong>typeface</strong></code></a></td>
4094 <td>font and style used to draw text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004095 </tr>
4096</table>
4097
4098### Example
4099
Cary Clark71961fb2018-01-05 14:21:59 -05004100<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004101
4102---
4103
Cary Clark682c58d2018-05-16 07:07:07 -04004104## <a name='Image_Filter_Methods'>Image Filter Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004105
Cary Clark682c58d2018-05-16 07:07:07 -04004106<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 -04004107with <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,
4108which is drawn to the device using the set <a href='SkBlendMode_Reference#Blend_Mode'>Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04004109
Cary Clark682c58d2018-05-16 07:07:07 -04004110<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>
4111can 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.
4112<a href='undocumented#Image_Filter'>Image Filter</a> operates independently of and can be used in combination with
4113<a href='undocumented#Mask_Filter'>Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004114
4115### Example
4116
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004117<div><fiddle-embed name="ece04ee3d3761e3425f37c8f06f054c1"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004118
Cary Clark682c58d2018-05-16 07:07:07 -04004119<a name='SkPaint_getImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004120## getImageFilter
4121
Cary Clark682c58d2018-05-16 07:07:07 -04004122<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4123<a href='undocumented#SkImageFilter'>SkImageFilter</a>* <a href='#SkPaint_getImageFilter'>getImageFilter</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004124</pre>
4125
Cary Clark682c58d2018-05-16 07:07:07 -04004126Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4127Does 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 -04004128
4129### Return Value
4130
Cary Clark682c58d2018-05-16 07:07:07 -04004131<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004132
4133### Example
4134
skia-bookmakerb95bbba2018-07-06 05:23:23 +00004135<div><fiddle-embed name="c11f8eaa1dd149bc18db21e23ce26904">
Cary Clark12799e12017-07-28 15:18:29 -04004136
4137#### Example Output
4138
4139~~~~
4140nullptr == image filter
4141nullptr != image filter
4142~~~~
4143
4144</fiddle-embed></div>
4145
4146---
4147
Cary Clark682c58d2018-05-16 07:07:07 -04004148<a name='SkPaint_refImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004149## refImageFilter
4150
Cary Clark682c58d2018-05-16 07:07:07 -04004151<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4152<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 -04004153</pre>
4154
Cary Clark682c58d2018-05-16 07:07:07 -04004155Returns <a href='undocumented#Image_Filter'>Image Filter</a> if set, or nullptr.
4156Increases <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 -04004157
4158### Return Value
4159
Cary Clark682c58d2018-05-16 07:07:07 -04004160<a href='undocumented#Image_Filter'>Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004161
4162### Example
4163
4164<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
4165
4166#### Example Output
4167
4168~~~~
4169image filter unique: true
4170image filter unique: false
4171~~~~
4172
4173</fiddle-embed></div>
4174
4175---
4176
Cary Clark682c58d2018-05-16 07:07:07 -04004177<a name='SkPaint_setImageFilter'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004178## setImageFilter
4179
Cary Clark682c58d2018-05-16 07:07:07 -04004180<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4181void <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 -04004182</pre>
4183
Cary Clark682c58d2018-05-16 07:07:07 -04004184Sets <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
4185<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 -04004186on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04004187
Cary Clark682c58d2018-05-16 07:07:07 -04004188Increments <a href='#SkPaint_setImageFilter_imageFilter'>imageFilter</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004189
4190### Parameters
4191
Cary Clark682c58d2018-05-16 07:07:07 -04004192<table> <tr> <td><a name='SkPaint_setImageFilter_imageFilter'><code><strong>imageFilter</strong></code></a></td>
4193 <td>how <a href='SkImage_Reference#Image'>Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04004194 </tr>
4195</table>
4196
4197### Example
4198
4199<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
4200
4201---
4202
Cary Clark682c58d2018-05-16 07:07:07 -04004203## <a name='Draw_Looper_Methods'>Draw Looper Methods</a>
Cary Clark08895c42018-02-01 09:37:32 -05004204
Cary Clark682c58d2018-05-16 07:07:07 -04004205<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 -04004206to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04004207
Cary Clark682c58d2018-05-16 07:07:07 -04004208<a href='undocumented#Draw_Looper'>Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
4209<a href='undocumented#Draw_Looper'>Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
4210Set <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 -04004211
4212### Example
4213
4214<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
4215
Cary Clark682c58d2018-05-16 07:07:07 -04004216<a name='SkPaint_getDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004217## getDrawLooper
4218
Cary Clark682c58d2018-05-16 07:07:07 -04004219<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4220<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getDrawLooper'>getDrawLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004221</pre>
4222
Cary Clark682c58d2018-05-16 07:07:07 -04004223Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4224Does 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 -04004225
4226### Return Value
4227
Cary Clark682c58d2018-05-16 07:07:07 -04004228<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004229
4230### Example
4231
4232<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
4233
4234#### Example Output
4235
4236~~~~
4237nullptr == draw looper
4238nullptr != draw looper
4239~~~~
4240
4241</fiddle-embed></div>
4242
4243---
4244
Cary Clark682c58d2018-05-16 07:07:07 -04004245<a name='SkPaint_refDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004246## refDrawLooper
4247
Cary Clark682c58d2018-05-16 07:07:07 -04004248<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4249<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 -04004250</pre>
4251
Cary Clark682c58d2018-05-16 07:07:07 -04004252Returns <a href='undocumented#Draw_Looper'>Draw Looper</a> if set, or nullptr.
4253Increases <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 -04004254
4255### Return Value
4256
Cary Clark682c58d2018-05-16 07:07:07 -04004257<a href='undocumented#Draw_Looper'>Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04004258
4259### Example
4260
4261<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
4262
4263#### Example Output
4264
4265~~~~
4266draw looper unique: true
4267draw looper unique: false
4268~~~~
4269
4270</fiddle-embed></div>
4271
4272---
4273
Cary Clark682c58d2018-05-16 07:07:07 -04004274<a name='SkPaint_getLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004275## getLooper
4276
Cary Clark682c58d2018-05-16 07:07:07 -04004277<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4278<a href='undocumented#SkDrawLooper'>SkDrawLooper</a>* <a href='#SkPaint_getLooper'>getLooper</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004279</pre>
4280
Cary Clark682c58d2018-05-16 07:07:07 -04004281Deprecated.
4282
Cary Clark12799e12017-07-28 15:18:29 -04004283---
4284
Cary Clark682c58d2018-05-16 07:07:07 -04004285<a name='SkPaint_setDrawLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004286## setDrawLooper
4287
Cary Clark682c58d2018-05-16 07:07:07 -04004288<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4289void <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 -04004290</pre>
4291
Cary Clark682c58d2018-05-16 07:07:07 -04004292Sets <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
4293<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 -04004294drawing unaltered.
4295
Cary Clark682c58d2018-05-16 07:07:07 -04004296Increments <a href='#SkPaint_setDrawLooper_drawLooper'>drawLooper</a> <a href='undocumented#Reference_Count'>Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04004297
4298### Parameters
4299
Cary Clark682c58d2018-05-16 07:07:07 -04004300<table> <tr> <td><a name='SkPaint_setDrawLooper_drawLooper'><code><strong>drawLooper</strong></code></a></td>
4301 <td>iterates through drawing one or more time, altering <a href='#Paint'>Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004302 </tr>
4303</table>
4304
4305### Example
4306
4307<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
4308
4309---
4310
Cary Clark682c58d2018-05-16 07:07:07 -04004311<a name='SkPaint_setLooper'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004312## setLooper
4313
Cary Clark682c58d2018-05-16 07:07:07 -04004314<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4315void <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 -04004316</pre>
4317
Cary Clark682c58d2018-05-16 07:07:07 -04004318Deprecated.
4319
Cary Clark12799e12017-07-28 15:18:29 -04004320---
4321
Cary Clark682c58d2018-05-16 07:07:07 -04004322## <a name='Text_Align'>Text Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004323
Cary Clark682c58d2018-05-16 07:07:07 -04004324## <a name='SkPaint_Align'>Enum SkPaint::Align</a>
Cary Clark12799e12017-07-28 15:18:29 -04004325
Cary Clarka560c472017-11-27 10:44:06 -05004326<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004327 enum <a href='#SkPaint_Align'>Align</a> {
4328 <a href='#SkPaint_kLeft_Align'>kLeft Align</a>,
4329 <a href='#SkPaint_kCenter_Align'>kCenter Align</a>,
4330 <a href='#SkPaint_kRight_Align'>kRight Align</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004331 };
Cary Clarkd98f78c2018-04-26 08:32:37 -04004332
Cary Clark682c58d2018-05-16 07:07:07 -04004333 static constexpr int <a href='#SkPaint_kAlignCount'>kAlignCount</a> = 3;
Cary Clark1a8d7622018-03-05 13:26:16 -05004334</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004335
Cary Clark682c58d2018-05-16 07:07:07 -04004336<a href='#SkPaint_Align'>Align</a> adjusts the text relative to the text position.
4337<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>,
4338<a href='SkCanvas_Reference#SkCanvas_drawPosTextH'>SkCanvas::drawPosTextH</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextOnPath'>SkCanvas::drawTextOnPath</a>,
4339<a href='SkCanvas_Reference#SkCanvas_drawTextOnPathHV'>SkCanvas::drawTextOnPathHV</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextRSXform'>SkCanvas::drawTextRSXform</a>, <a href='SkCanvas_Reference#SkCanvas_drawTextBlob'>SkCanvas::drawTextBlob</a>,
4340and <a href='SkCanvas_Reference#SkCanvas_drawString'>SkCanvas::drawString</a>;
4341as 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 -04004342
4343The text position is set by the font for both horizontal and vertical text.
4344Typically, for horizontal text, the position is to the left side of the glyph on the
4345base line; and for vertical text, the position is the horizontal center of the glyph
4346at the caps height.
4347
Cary Clark682c58d2018-05-16 07:07:07 -04004348<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 -04004349using the metrics returned by the font.
4350
Cary Clark682c58d2018-05-16 07:07:07 -04004351<a href='#SkPaint_Align'>Align</a> defaults to <a href='#SkPaint_kLeft_Align'>kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004352
4353### Constants
4354
Cary Clark682c58d2018-05-16 07:07:07 -04004355<table style='border-collapse: collapse; width: 62.5em'>
4356 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4357<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4358<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4359 <tr style='background-color: #f0f0f0; '>
4360 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kLeft_Align'><code>SkPaint::kLeft_Align</code></a></td>
4361 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4362 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4363Leaves the glyph at the position computed by the font offset by the text position.
Cary Clark1a8d7622018-03-05 13:26:16 -05004364</td>
Cary Clark12799e12017-07-28 15:18:29 -04004365 </tr>
4366 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004367 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kCenter_Align'><code>SkPaint::kCenter_Align</code></a></td>
4368 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4369 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4370Moves the glyph half its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear, and
4371half its height if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> set.
4372</td>
4373 </tr>
4374 <tr style='background-color: #f0f0f0; '>
4375 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kRight_Align'><code>SkPaint::kRight_Align</code></a></td>
4376 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4377 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4378Moves the glyph by its width if <a href='#SkPaint_Flags'>Flags</a> has <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> clear,
4379and 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 -05004380</td>
Cary Clark12799e12017-07-28 15:18:29 -04004381 </tr>
4382 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004383 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kAlignCount'><code>SkPaint::kAlignCount</code></a></td>
4384 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4385 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark137b8742018-05-30 09:21:49 -04004386May be used to verify that <a href='#SkPaint_Align'>Align</a> is a legal value.
4387</td>
Cary Clark12799e12017-07-28 15:18:29 -04004388 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004389</table>
Cary Clark12799e12017-07-28 15:18:29 -04004390
4391### Example
4392
Cary Clark1a8d7622018-03-05 13:26:16 -05004393<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.
4394</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004395
4396### Example
4397
Cary Clark682c58d2018-05-16 07:07:07 -04004398<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 -05004399</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004400
Cary Clark682c58d2018-05-16 07:07:07 -04004401<a name='SkPaint_getTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004402## getTextAlign
4403
Cary Clark682c58d2018-05-16 07:07:07 -04004404<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4405<a href='#SkPaint_Align'>Align</a> <a href='#SkPaint_getTextAlign'>getTextAlign</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004406</pre>
4407
Cary Clark682c58d2018-05-16 07:07:07 -04004408Returns <a href='#Text_Align'>Text Align</a>.
4409Returns <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 -04004410
4411### Return Value
4412
4413text placement relative to position
4414
4415### Example
4416
4417<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
4418
4419#### Example Output
4420
4421~~~~
4422kLeft_Align == default
4423~~~~
4424
4425</fiddle-embed></div>
4426
4427---
4428
Cary Clark682c58d2018-05-16 07:07:07 -04004429<a name='SkPaint_setTextAlign'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004430## setTextAlign
4431
Cary Clark682c58d2018-05-16 07:07:07 -04004432<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4433void <a href='#SkPaint_setTextAlign'>setTextAlign</a>(<a href='#SkPaint_Align'>Align</a> align)
Cary Clark12799e12017-07-28 15:18:29 -04004434</pre>
4435
Cary Clark682c58d2018-05-16 07:07:07 -04004436Sets <a href='#Text_Align'>Text Align</a> to <a href='#SkPaint_setTextAlign_align'>align</a>.
4437Has no effect if <a href='#SkPaint_setTextAlign_align'>align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04004438
4439### Parameters
4440
Cary Clark682c58d2018-05-16 07:07:07 -04004441<table> <tr> <td><a name='SkPaint_setTextAlign_align'><code><strong>align</strong></code></a></td>
4442 <td>text placement relative to position</td>
Cary Clark12799e12017-07-28 15:18:29 -04004443 </tr>
4444</table>
4445
4446### Example
4447
Cary Clark682c58d2018-05-16 07:07:07 -04004448<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 -05004449alignment out of range has no effect.
4450</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004451
4452---
4453
Cary Clark682c58d2018-05-16 07:07:07 -04004454## <a name='Text_Size'>Text Size</a>
Cary Clark08895c42018-02-01 09:37:32 -05004455
Cary Clark682c58d2018-05-16 07:07:07 -04004456<a href='#Text_Size'>Text Size</a> adjusts the overall text size in points.
4457<a href='#Text_Size'>Text Size</a> can be set to any positive value or zero.
4458<a href='#Text_Size'>Text Size</a> defaults to 12.
4459Set <a href='undocumented#SkPaintDefaults_TextSize'>SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04004460
4461### Example
4462
4463<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
4464
Cary Clark682c58d2018-05-16 07:07:07 -04004465<a name='SkPaint_getTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004466## getTextSize
4467
Cary Clark682c58d2018-05-16 07:07:07 -04004468<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4469<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSize'>getTextSize</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004470</pre>
4471
Cary Clark682c58d2018-05-16 07:07:07 -04004472Returns <a href='#Text_Size'>Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04004473
4474### Return Value
4475
4476typographic height of text
4477
4478### Example
4479
skia-bookmaker233c6522018-07-04 05:33:26 +00004480<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004481
4482---
4483
Cary Clark682c58d2018-05-16 07:07:07 -04004484<a name='SkPaint_setTextSize'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004485## setTextSize
4486
Cary Clark682c58d2018-05-16 07:07:07 -04004487<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4488void <a href='#SkPaint_setTextSize'>setTextSize</a>(<a href='undocumented#SkScalar'>SkScalar</a> textSize)
Cary Clark12799e12017-07-28 15:18:29 -04004489</pre>
4490
Cary Clark682c58d2018-05-16 07:07:07 -04004491Sets <a href='#Text_Size'>Text Size</a> in points.
4492Has 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 -04004493
4494### Parameters
4495
Cary Clark682c58d2018-05-16 07:07:07 -04004496<table> <tr> <td><a name='SkPaint_setTextSize_textSize'><code><strong>textSize</strong></code></a></td>
4497 <td>typographic height of text</td>
Cary Clark12799e12017-07-28 15:18:29 -04004498 </tr>
4499</table>
4500
4501### Example
4502
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004503<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004504
4505---
4506
Cary Clark682c58d2018-05-16 07:07:07 -04004507## <a name='Text_Scale_X'>Text Scale X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004508
Cary Clark682c58d2018-05-16 07:07:07 -04004509<a href='#Text_Scale_X'>Text Scale X</a> adjusts the text horizontal scale.
4510<a href='undocumented#Text'>Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004511is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004512<a href='#Text_Scale_X'>Text Scale X</a> can be set to any value.
4513<a href='#Text_Scale_X'>Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04004514
4515### Example
4516
skia-bookmaker44bad2e2018-07-05 05:35:27 +00004517<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004518
Cary Clark682c58d2018-05-16 07:07:07 -04004519<a name='SkPaint_getTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004520## getTextScaleX
4521
Cary Clark682c58d2018-05-16 07:07:07 -04004522<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4523<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextScaleX'>getTextScaleX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004524</pre>
4525
Cary Clark682c58d2018-05-16 07:07:07 -04004526Returns <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004527Default value is 1.
4528
4529### Return Value
4530
4531text horizontal scale
4532
4533### Example
4534
4535<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
4536
4537---
4538
Cary Clark682c58d2018-05-16 07:07:07 -04004539<a name='SkPaint_setTextScaleX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004540## setTextScaleX
4541
Cary Clark682c58d2018-05-16 07:07:07 -04004542<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4543void <a href='#SkPaint_setTextScaleX'>setTextScaleX</a>(<a href='undocumented#SkScalar'>SkScalar</a> scaleX)
Cary Clark12799e12017-07-28 15:18:29 -04004544</pre>
4545
Cary Clark682c58d2018-05-16 07:07:07 -04004546Sets <a href='#Text_Scale_X'>Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004547Default value is 1.
4548
4549### Parameters
4550
Cary Clark682c58d2018-05-16 07:07:07 -04004551<table> <tr> <td><a name='SkPaint_setTextScaleX_scaleX'><code><strong>scaleX</strong></code></a></td>
4552 <td>text horizontal scale</td>
Cary Clark12799e12017-07-28 15:18:29 -04004553 </tr>
4554</table>
4555
4556### Example
4557
4558<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
4559
4560---
4561
Cary Clark682c58d2018-05-16 07:07:07 -04004562## <a name='Text_Skew_X'>Text Skew X</a>
Cary Clark08895c42018-02-01 09:37:32 -05004563
Cary Clark682c58d2018-05-16 07:07:07 -04004564<a href='#Text_Skew_X'>Text Skew X</a> adjusts the text horizontal slant.
4565<a href='undocumented#Text'>Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04004566is not available.
Cary Clark682c58d2018-05-16 07:07:07 -04004567<a href='#Text_Skew_X'>Text Skew X</a> can be set to any value.
4568<a href='#Text_Skew_X'>Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04004569
4570### Example
4571
4572<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
4573
Cary Clark682c58d2018-05-16 07:07:07 -04004574<a name='SkPaint_getTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004575## getTextSkewX
4576
Cary Clark682c58d2018-05-16 07:07:07 -04004577<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4578<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getTextSkewX'>getTextSkewX</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004579</pre>
4580
Cary Clark682c58d2018-05-16 07:07:07 -04004581Returns <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004582Default value is zero.
4583
4584### Return Value
4585
4586additional shear in x-axis relative to y-axis
4587
4588### Example
4589
4590<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
4591
4592---
4593
Cary Clark682c58d2018-05-16 07:07:07 -04004594<a name='SkPaint_setTextSkewX'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004595## setTextSkewX
4596
Cary Clark682c58d2018-05-16 07:07:07 -04004597<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4598void <a href='#SkPaint_setTextSkewX'>setTextSkewX</a>(<a href='undocumented#SkScalar'>SkScalar</a> skewX)
Cary Clark12799e12017-07-28 15:18:29 -04004599</pre>
4600
Cary Clark682c58d2018-05-16 07:07:07 -04004601Sets <a href='#Text_Skew_X'>Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004602Default value is zero.
4603
4604### Parameters
4605
Cary Clark682c58d2018-05-16 07:07:07 -04004606<table> <tr> <td><a name='SkPaint_setTextSkewX_skewX'><code><strong>skewX</strong></code></a></td>
4607 <td>additional shear in x-axis relative to y-axis</td>
Cary Clark12799e12017-07-28 15:18:29 -04004608 </tr>
4609</table>
4610
4611### Example
4612
4613<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
4614
4615---
4616
Cary Clark682c58d2018-05-16 07:07:07 -04004617## <a name='Text_Encoding'>Text Encoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004618
Cary Clark682c58d2018-05-16 07:07:07 -04004619## <a name='SkPaint_TextEncoding'>Enum SkPaint::TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004620
Cary Clarka560c472017-11-27 10:44:06 -05004621<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004622 enum <a href='#SkPaint_TextEncoding'>TextEncoding</a> {
4623 <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a>,
4624 <a href='#SkPaint_kUTF16_TextEncoding'>kUTF16 TextEncoding</a>,
4625 <a href='#SkPaint_kUTF32_TextEncoding'>kUTF32 TextEncoding</a>,
4626 <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
Cary Clark186d08f2018-04-03 08:43:27 -04004627 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004628</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004629
Cary Clark682c58d2018-05-16 07:07:07 -04004630<a href='#SkPaint_TextEncoding'>TextEncoding</a> determines whether text specifies character codes and their encoded
4631size, 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 -04004632
Cary Clarka560c472017-11-27 10:44:06 -05004633Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004634All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04004635in the total storage required.
4636
Cary Clark682c58d2018-05-16 07:07:07 -04004637<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 -04004638
Cary Clark682c58d2018-05-16 07:07:07 -04004639<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 -04004640
Cary Clark682c58d2018-05-16 07:07:07 -04004641<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 -04004642
Cary Clark682c58d2018-05-16 07:07:07 -04004643<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 -04004644A glyph index is a 16-bit word.
4645
Cary Clark682c58d2018-05-16 07:07:07 -04004646<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 -04004647
4648### Constants
4649
Cary Clark682c58d2018-05-16 07:07:07 -04004650<table style='border-collapse: collapse; width: 62.5em'>
4651 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4652<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4653<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4654 <tr style='background-color: #f0f0f0; '>
4655 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF8_TextEncoding'><code>SkPaint::kUTF8_TextEncoding</code></a></td>
4656 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0</td>
4657 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4658uses bytes to represent UTF-8 or ASCII</td>
Cary Clark12799e12017-07-28 15:18:29 -04004659 </tr>
4660 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004661 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF16_TextEncoding'><code>SkPaint::kUTF16_TextEncoding</code></a></td>
4662 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>1</td>
4663 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4664uses two byte words to represent most of Unicode</td>
4665 </tr>
4666 <tr style='background-color: #f0f0f0; '>
4667 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kUTF32_TextEncoding'><code>SkPaint::kUTF32_TextEncoding</code></a></td>
4668 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>2</td>
4669 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4670uses four byte words to represent all of Unicode</td>
Cary Clark12799e12017-07-28 15:18:29 -04004671 </tr>
4672 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004673 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_kGlyphID_TextEncoding'><code>SkPaint::kGlyphID_TextEncoding</code></a></td>
4674 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>3</td>
4675 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4676uses two byte words to represent glyph indices</td>
Cary Clark12799e12017-07-28 15:18:29 -04004677 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004678</table>
Cary Clark12799e12017-07-28 15:18:29 -04004679
4680### Example
4681
Cary Clarka560c472017-11-27 10:44:06 -05004682<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4683Second line is encoded in UTF-16.
4684Third line is encoded in UTF-32.
Cary Clark682c58d2018-05-16 07:07:07 -04004685Fourth line has 16-bit glyph indices.
Cary Clark1a8d7622018-03-05 13:26:16 -05004686</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004687
Cary Clark682c58d2018-05-16 07:07:07 -04004688<a name='SkPaint_getTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004689## getTextEncoding
4690
Cary Clark682c58d2018-05-16 07:07:07 -04004691<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4692<a href='#SkPaint_TextEncoding'>TextEncoding</a> <a href='#SkPaint_getTextEncoding'>getTextEncoding</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04004693</pre>
4694
Cary Clark682c58d2018-05-16 07:07:07 -04004695Returns <a href='#Text_Encoding'>Text Encoding</a>.
4696<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 -04004697
4698### Return Value
4699
Cary Clark682c58d2018-05-16 07:07:07 -04004700one 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
4701<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004702
4703### Example
4704
skia-bookmaker525f9a92018-05-03 06:27:39 +00004705<div><fiddle-embed name="c6cc2780a9828b3af8c4621c12b29a1b">
Cary Clark12799e12017-07-28 15:18:29 -04004706
4707#### Example Output
4708
4709~~~~
4710kUTF8_TextEncoding == text encoding
4711kGlyphID_TextEncoding == text encoding
4712~~~~
4713
4714</fiddle-embed></div>
4715
4716---
4717
Cary Clark682c58d2018-05-16 07:07:07 -04004718<a name='SkPaint_setTextEncoding'></a>
Cary Clark12799e12017-07-28 15:18:29 -04004719## setTextEncoding
4720
Cary Clark682c58d2018-05-16 07:07:07 -04004721<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
4722void <a href='#SkPaint_setTextEncoding'>setTextEncoding</a>(<a href='#SkPaint_TextEncoding'>TextEncoding</a> encoding)
Cary Clark12799e12017-07-28 15:18:29 -04004723</pre>
4724
Cary Clark682c58d2018-05-16 07:07:07 -04004725Sets <a href='#Text_Encoding'>Text Encoding</a> to <a href='#SkPaint_setTextEncoding_encoding'>encoding</a>.
4726<a href='#Text_Encoding'>Text Encoding</a> determines how character code points are mapped to font glyph indices.
4727Invalid values for <a href='#SkPaint_setTextEncoding_encoding'>encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004728
4729### Parameters
4730
Cary Clark682c58d2018-05-16 07:07:07 -04004731<table> <tr> <td><a name='SkPaint_setTextEncoding_encoding'><code><strong>encoding</strong></code></a></td>
4732 <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
4733<a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004734 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004735#
4736
Cary Clark12799e12017-07-28 15:18:29 -04004737</table>
4738
4739### Example
4740
Cary Clark75fd4492018-06-20 12:45:16 -04004741<div><fiddle-embed name="6d9ffdd3c5543e9f12972a06dd4a0ce5">
Cary Clark12799e12017-07-28 15:18:29 -04004742
4743#### Example Output
4744
4745~~~~
47464 != text encoding
4747~~~~
4748
4749</fiddle-embed></div>
4750
4751---
4752
Cary Clark682c58d2018-05-16 07:07:07 -04004753## <a name='Font_Metrics'>Font Metrics</a>
Cary Clark08895c42018-02-01 09:37:32 -05004754
Cary Clark682c58d2018-05-16 07:07:07 -04004755<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>.
4756The dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data and do not take
4757<a href='#Paint'>Paint</a> settings other than <a href='#Text_Size'>Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004758
Cary Clark682c58d2018-05-16 07:07:07 -04004759<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 -04004760X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4761are positive.
4762Y-axis values above the baseline are negative, and below the baseline are positive.
4763
4764### Example
4765
Ben Wagnere5806492017-11-09 12:08:31 -05004766<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004767
Cary Clark682c58d2018-05-16 07:07:07 -04004768# <a name='SkPaint_FontMetrics'>Struct SkPaint::FontMetrics</a>
4769
4770## <a name='Font_Metrics_Constant'>Constant</a>
4771
4772
4773SkPaint related constants are defined by <code>enum</code>, <code>enum class</code>, <code>#define</code>, <code>const</code>, and <code>constexpr</code>.
4774<table style='border-collapse: collapse; width: 62.5em'>
4775 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4776<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4777 <tr style='background-color: #f0f0f0; '>
4778 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a></td>
4779 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>valid <a href='#Font_Metrics'>Font Metrics</a></td>
4780 </tr>
4781 <tr>
4782 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a></td>
4783 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is valid</td>
4784 </tr>
4785 <tr style='background-color: #f0f0f0; '>
4786 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a></td>
4787 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is valid</td>
4788 </tr>
4789 <tr>
4790 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a></td>
4791 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is valid</td>
4792 </tr>
4793 <tr style='background-color: #f0f0f0; '>
4794 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a></td>
4795 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>set if <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is valid</td>
4796 </tr>
4797</table>
4798
Cary Clark682c58d2018-05-16 07:07:07 -04004799## <a name='Font_Metrics_Member_Function'>Member_Function</a>
4800
4801
4802SkPaint member functions read and modify the structure properties.
4803<table style='border-collapse: collapse; width: 62.5em'>
4804 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4805<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4806 <tr style='background-color: #f0f0f0; '>
4807 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a></td>
4808 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout position if set</td>
4809 </tr>
4810 <tr>
4811 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a></td>
4812 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns strikeout thickness if set</td>
4813 </tr>
4814 <tr style='background-color: #f0f0f0; '>
4815 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a></td>
4816 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline position if set</td>
4817 </tr>
4818 <tr>
4819 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a></td>
4820 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns underline thickness if set</td>
4821 </tr>
4822</table>
4823
Cary Clark682c58d2018-05-16 07:07:07 -04004824## <a name='Font_Metrics_Member'>Member</a>
4825
4826
4827SkPaint members may be read and written directly without using a member function.
4828<table style='border-collapse: collapse; width: 62.5em'>
4829 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
4830<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4831 <tr style='background-color: #f0f0f0; '>
4832 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAscent'>fAscent</a></td>
4833 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve above baseline</td>
4834 </tr>
4835 <tr>
4836 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a></td>
4837 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>average character width</td>
4838 </tr>
4839 <tr style='background-color: #f0f0f0; '>
4840 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fBottom'>fBottom</a></td>
4841 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent below baseline</td>
4842 </tr>
4843 <tr>
4844 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a></td>
4845 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of an upper-case letter</td>
4846 </tr>
4847 <tr style='background-color: #f0f0f0; '>
4848 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fDescent'>fDescent</a></td>
4849 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to reserve below baseline</td>
4850 </tr>
4851 <tr>
4852 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fFlags'>fFlags</a></td>
4853 <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>
4854 </tr>
4855 <tr style='background-color: #f0f0f0; '>
4856 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fLeading'>fLeading</a></td>
4857 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>distance to add between lines</td>
4858 </tr>
4859 <tr>
4860 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a></td>
4861 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum character width</td>
4862 </tr>
4863 <tr style='background-color: #f0f0f0; '>
4864 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a></td>
4865 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout position relative to baseline</td>
4866 </tr>
4867 <tr>
4868 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a></td>
4869 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>strikeout thickness</td>
4870 </tr>
4871 <tr style='background-color: #f0f0f0; '>
4872 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fTop'>fTop</a></td>
4873 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>extent above baseline</td>
4874 </tr>
4875 <tr>
4876 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a></td>
4877 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline position relative to baseline</td>
4878 </tr>
4879 <tr style='background-color: #f0f0f0; '>
4880 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a></td>
4881 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>underline thickness</td>
4882 </tr>
4883 <tr>
4884 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a></td>
4885 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>height of lower-case 'x'</td>
4886 </tr>
4887 <tr style='background-color: #f0f0f0; '>
4888 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMax'>fXMax</a></td>
4889 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>maximum x</td>
4890 </tr>
4891 <tr>
4892 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_FontMetrics_fXMin'>fXMin</a></td>
4893 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>minimum x</td>
4894 </tr>
4895</table>
4896
Cary Clarka560c472017-11-27 10:44:06 -05004897<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004898 struct <a href='#SkPaint_FontMetrics'>FontMetrics</a> {
4899 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4900 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4901 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4902 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4903 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004904 };
Cary Clark12799e12017-07-28 15:18:29 -04004905
Cary Clark682c58d2018-05-16 07:07:07 -04004906 uint32_t <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>;
4907 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fTop'>fTop</a>;
4908 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAscent'>fAscent</a>;
4909 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fDescent'>fDescent</a>;
4910 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fBottom'>fBottom</a>;
4911 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fLeading'>fLeading</a>;
4912 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fAvgCharWidth'>fAvgCharWidth</a>;
4913 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fMaxCharWidth'>fMaxCharWidth</a>;
4914 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMin'>fXMin</a>;
4915 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXMax'>fXMax</a>;
4916 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fXHeight'>fXHeight</a>;
4917 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fCapHeight'>fCapHeight</a>;
4918 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a>;
4919 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a>;
4920 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a>;
4921 <a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004922
Cary Clark682c58d2018-05-16 07:07:07 -04004923 bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness(SkScalar* thickness)</a> const;
4924 bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition(SkScalar* position)</a> const;
4925 bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness(SkScalar* thickness)</a> const;
4926 bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark186d08f2018-04-03 08:43:27 -04004927 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004928</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004929
Cary Clark682c58d2018-05-16 07:07:07 -04004930<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
4931computed 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 -04004932not available.
4933
Cary Clark5538c132018-06-14 12:28:14 -04004934All vertical values are relative to the baseline, on a y-axis pointing down.
4935Zero is on the baseline, negative values are above the baseline, and positive
4936values are below the baseline.
Ben Wagnere5806492017-11-09 12:08:31 -05004937
Cary Clark682c58d2018-05-16 07:07:07 -04004938<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 -04004939are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004940
Cary Clark682c58d2018-05-16 07:07:07 -04004941<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 -04004942are valid, since their value may be zero.
4943
Cary Clark682c58d2018-05-16 07:07:07 -04004944## <a name='SkPaint_FontMetrics_FontMetricsFlags'>Enum SkPaint::FontMetrics::FontMetricsFlags</a>
Cary Clark12799e12017-07-28 15:18:29 -04004945
Cary Clarka560c472017-11-27 10:44:06 -05004946<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark682c58d2018-05-16 07:07:07 -04004947 enum <a href='#SkPaint_FontMetrics_FontMetricsFlags'>FontMetricsFlags</a> {
4948 <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4949 <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> = 1 << 1,
4950 <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4951 <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark186d08f2018-04-03 08:43:27 -04004952 };
Cary Clark1a8d7622018-03-05 13:26:16 -05004953</pre>
Cary Clark12799e12017-07-28 15:18:29 -04004954
Cary Clark682c58d2018-05-16 07:07:07 -04004955<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 -04004956the underline or strikeout metric may be valid and zero.
4957Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4958
Cary Clark12799e12017-07-28 15:18:29 -04004959### Constants
4960
Cary Clark682c58d2018-05-16 07:07:07 -04004961<table style='border-collapse: collapse; width: 62.5em'>
4962 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Const</th>
4963<th style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>Value</th>
4964<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4965 <tr style='background-color: #f0f0f0; '>
4966 <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>
4967 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0001</td>
4968 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4969set if fUnderlineThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004970 </tr>
4971 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004972 <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>
4973 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0002</td>
4974 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4975set if fUnderlinePosition is valid</td>
4976 </tr>
4977 <tr style='background-color: #f0f0f0; '>
4978 <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>
4979 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0004</td>
4980 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4981set if fStrikeoutThickness is valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04004982 </tr>
4983 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04004984 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'><code>SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag</code></a></td>
4985 <td style='text-align: center; border: 2px solid #dddddd; padding: 8px; '>0x0008</td>
4986 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
4987set if fStrikeoutPosition is valid</td>
4988 </tr>
4989</table>
4990
4991### Members
4992
4993<table style='border-collapse: collapse; width: 62.5em'>
4994 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Type</th>
4995<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Name</th>
4996<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
4997 <tr style='background-color: #f0f0f0; '>
4998 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>uint32_t</td>
4999 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fFlags'><code>fFlags</code></a></td>
5000 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5001is set to FontMetricsFlags when metrics are valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04005002 </tr>
5003 <tr>
Cary Clark682c58d2018-05-16 07:07:07 -04005004 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5005 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fTop'><code>fTop</code></a></td>
5006 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005007Greatest extent above the baseline for any glyph.
5008Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005009</td>
5010 </tr>
5011 <tr style='background-color: #f0f0f0; '>
5012 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5013 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAscent'><code>fAscent</code></a></td>
5014 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005015Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005016Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005017</td>
5018 </tr>
5019 <tr>
5020 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5021 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fDescent'><code>fDescent</code></a></td>
5022 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005023Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005024Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005025</td>
5026 </tr>
5027 <tr style='background-color: #f0f0f0; '>
5028 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5029 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fBottom'><code>fBottom</code></a></td>
5030 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005031Greatest extent below the baseline for any glyph.
5032Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005033</td>
5034 </tr>
5035 <tr>
5036 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5037 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fLeading'><code>fLeading</code></a></td>
5038 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005039Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05005040Typically greater than or equal to zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005041</td>
5042 </tr>
5043 <tr style='background-color: #f0f0f0; '>
5044 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5045 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fAvgCharWidth'><code>fAvgCharWidth</code></a></td>
5046 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005047Average character width, if it is available.
5048Zero if no average width is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005049</td>
5050 </tr>
5051 <tr>
5052 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5053 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fMaxCharWidth'><code>fMaxCharWidth</code></a></td>
5054 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5055maximum character width</td>
5056 </tr>
5057 <tr style='background-color: #f0f0f0; '>
5058 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5059 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMin'><code>fXMin</code></a></td>
5060 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005061Minimum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005062Typically less than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005063</td>
5064 </tr>
5065 <tr>
5066 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5067 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXMax'><code>fXMax</code></a></td>
5068 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark5538c132018-06-14 12:28:14 -04005069Maximum bounding box x-axis value for all <a href='undocumented#Glyph'>Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005070Typically greater than zero.
Cary Clark682c58d2018-05-16 07:07:07 -04005071</td>
5072 </tr>
5073 <tr style='background-color: #f0f0f0; '>
5074 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5075 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fXHeight'><code>fXHeight</code></a></td>
5076 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005077May be zero if no lower-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005078</td>
5079 </tr>
5080 <tr>
5081 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5082 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fCapHeight'><code>fCapHeight</code></a></td>
5083 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Cary Clark12799e12017-07-28 15:18:29 -04005084May be zero if no upper-case height is stored in the font.
Cary Clark682c58d2018-05-16 07:07:07 -04005085</td>
5086 </tr>
5087 <tr style='background-color: #f0f0f0; '>
5088 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5089 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlineThickness'><code>fUnderlineThickness</code></a></td>
5090 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5091If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5092If <a href='#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag'>kUnderlineThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlineThickness'>fUnderlineThickness</a> is zero.
5093</td>
5094 </tr>
5095 <tr>
5096 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5097 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fUnderlinePosition'><code>fUnderlinePosition</code></a></td>
5098 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005099Position of the top of the underline stroke relative to the baseline.
5100Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005101
Cary Clark682c58d2018-05-16 07:07:07 -04005102If the metric is valid, the <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5103If <a href='#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag'>kUnderlinePositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fUnderlinePosition'>fUnderlinePosition</a> is zero.
5104</td>
5105 </tr>
5106 <tr style='background-color: #f0f0f0; '>
5107 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5108 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutThickness'><code>fStrikeoutThickness</code></a></td>
5109 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
5110If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5111If <a href='#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag'>kStrikeoutThicknessIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutThickness'>fStrikeoutThickness</a> is zero.
5112</td>
5113 </tr>
5114 <tr>
5115 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>SkScalar</td>
5116 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a name='SkPaint_FontMetrics_fStrikeoutPosition'><code>fStrikeoutPosition</code></a></td>
5117 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>
Ben Wagnere5806492017-11-09 12:08:31 -05005118Position of the bottom of the strikeout stroke relative to the baseline.
5119Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04005120
Cary Clark682c58d2018-05-16 07:07:07 -04005121If the metric is valid, the <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is set in <a href='#SkPaint_FontMetrics_fFlags'>fFlags</a>.
5122If <a href='#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag'>kStrikeoutPositionIsValid Flag</a> is clear, <a href='#SkPaint_FontMetrics_fStrikeoutPosition'>fStrikeoutPosition</a> is zero.
5123</td>
5124 </tr>
5125</table>
Cary Clark12799e12017-07-28 15:18:29 -04005126
Cary Clark682c58d2018-05-16 07:07:07 -04005127<a name='SkPaint_FontMetrics_hasUnderlineThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005128## hasUnderlineThickness
5129
Cary Clark682c58d2018-05-16 07:07:07 -04005130<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5131bool <a href='#SkPaint_FontMetrics_hasUnderlineThickness'>hasUnderlineThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005132</pre>
5133
Cary Clark682c58d2018-05-16 07:07:07 -04005134If <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>, return true, and set
5135<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,
5136return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlineThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005137
5138### Parameters
5139
Cary Clark682c58d2018-05-16 07:07:07 -04005140<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlineThickness_thickness'><code><strong>thickness</strong></code></a></td>
5141 <td>storage for underline width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005142 </tr>
5143</table>
5144
5145### Return Value
5146
5147true if font specifies underline width
5148
5149---
5150
Cary Clark682c58d2018-05-16 07:07:07 -04005151<a name='SkPaint_FontMetrics_hasUnderlinePosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005152## hasUnderlinePosition
5153
Cary Clark682c58d2018-05-16 07:07:07 -04005154<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5155bool <a href='#SkPaint_FontMetrics_hasUnderlinePosition'>hasUnderlinePosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005156</pre>
5157
Cary Clark682c58d2018-05-16 07:07:07 -04005158If <a href='#Font_Metrics'>Font Metrics</a> has a valid underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>, return true, and set
5159<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,
5160return false, and ignore <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005161
5162### Parameters
5163
Cary Clark682c58d2018-05-16 07:07:07 -04005164<table> <tr> <td><a name='SkPaint_FontMetrics_hasUnderlinePosition_position'><code><strong>position</strong></code></a></td>
5165 <td>storage for underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005166 </tr>
5167</table>
5168
5169### Return Value
5170
Cary Clark682c58d2018-05-16 07:07:07 -04005171true if font specifies underline <a href='#SkPaint_FontMetrics_hasUnderlinePosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005172
5173---
5174
Cary Clark682c58d2018-05-16 07:07:07 -04005175<a name='SkPaint_FontMetrics_hasStrikeoutThickness'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005176## hasStrikeoutThickness
5177
Cary Clark682c58d2018-05-16 07:07:07 -04005178<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5179bool <a href='#SkPaint_FontMetrics_hasStrikeoutThickness'>hasStrikeoutThickness</a>(<a href='undocumented#SkScalar'>SkScalar</a>* thickness) const
Cary Clark12799e12017-07-28 15:18:29 -04005180</pre>
5181
Cary Clark682c58d2018-05-16 07:07:07 -04005182If <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>, return true, and set
5183<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,
5184return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutThickness_thickness'>thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005185
5186### Parameters
5187
Cary Clark682c58d2018-05-16 07:07:07 -04005188<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutThickness_thickness'><code><strong>thickness</strong></code></a></td>
5189 <td>storage for strikeout width</td>
Cary Clark12799e12017-07-28 15:18:29 -04005190 </tr>
5191</table>
5192
5193### Return Value
5194
5195true if font specifies strikeout width
5196
5197---
5198
Cary Clark682c58d2018-05-16 07:07:07 -04005199<a name='SkPaint_FontMetrics_hasStrikeoutPosition'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005200## hasStrikeoutPosition
5201
Cary Clark682c58d2018-05-16 07:07:07 -04005202<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5203bool <a href='#SkPaint_FontMetrics_hasStrikeoutPosition'>hasStrikeoutPosition</a>(<a href='undocumented#SkScalar'>SkScalar</a>* position) const
Cary Clark12799e12017-07-28 15:18:29 -04005204</pre>
5205
Cary Clark682c58d2018-05-16 07:07:07 -04005206If <a href='#Font_Metrics'>Font Metrics</a> has a valid strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>, return true, and set
5207<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,
5208return false, and ignore <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005209
5210### Parameters
5211
Cary Clark682c58d2018-05-16 07:07:07 -04005212<table> <tr> <td><a name='SkPaint_FontMetrics_hasStrikeoutPosition_position'><code><strong>position</strong></code></a></td>
5213 <td>storage for strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005214 </tr>
5215</table>
5216
5217### Return Value
5218
Cary Clark682c58d2018-05-16 07:07:07 -04005219true if font specifies strikeout <a href='#SkPaint_FontMetrics_hasStrikeoutPosition_position'>position</a>
Cary Clark12799e12017-07-28 15:18:29 -04005220
5221---
5222
Cary Clark682c58d2018-05-16 07:07:07 -04005223<a name='SkPaint_getFontMetrics'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005224## getFontMetrics
5225
Cary Clark682c58d2018-05-16 07:07:07 -04005226<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5227<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 -04005228</pre>
5229
Cary Clark682c58d2018-05-16 07:07:07 -04005230Returns <a href='#Font_Metrics'>Font Metrics</a> associated with <a href='undocumented#Typeface'>Typeface</a>.
5231The 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 -04005232descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005233If <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>.
5234Results are scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5235dimensions 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>,
5236<a href='#Style_Stroke'>Style Stroke</a>, and <a href='undocumented#Path_Effect'>Path Effect</a>.
5237Results 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 -04005238is ignored.
5239
5240### Parameters
5241
Cary Clark682c58d2018-05-16 07:07:07 -04005242<table> <tr> <td><a name='SkPaint_getFontMetrics_metrics'><code><strong>metrics</strong></code></a></td>
5243 <td>storage for <a href='#Font_Metrics'>Font Metrics</a> from <a href='undocumented#Typeface'>Typeface</a>; may be nullptr</td>
5244 </tr>
5245 <tr> <td><a name='SkPaint_getFontMetrics_scale'><code><strong>scale</strong></code></a></td>
5246 <td>additional multiplier for returned values</td>
Cary Clark12799e12017-07-28 15:18:29 -04005247 </tr>
5248</table>
5249
5250### Return Value
5251
5252recommended spacing between lines
5253
5254### Example
5255
5256<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
5257
5258### See Also
5259
Cary Clark682c58d2018-05-16 07:07:07 -04005260<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 -04005261
5262---
5263
Cary Clark682c58d2018-05-16 07:07:07 -04005264<a name='SkPaint_getFontSpacing'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005265## getFontSpacing
5266
Cary Clark682c58d2018-05-16 07:07:07 -04005267<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5268<a href='undocumented#SkScalar'>SkScalar</a> <a href='#SkPaint_getFontSpacing'>getFontSpacing</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005269</pre>
5270
5271Returns the recommended spacing between lines: the sum of metrics
5272descent, ascent, and leading.
Cary Clark682c58d2018-05-16 07:07:07 -04005273Result is scaled by <a href='#Text_Size'>Text Size</a> but does not take into account
5274dimensions required by stroking and <a href='undocumented#Path_Effect'>Path Effect</a>.
5275Returns the same result as <a href='#SkPaint_getFontMetrics'>getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005276
5277### Return Value
5278
5279recommended spacing between lines
5280
5281### Example
5282
5283<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
5284
5285#### Example Output
5286
5287~~~~
5288textSize: 12 fontSpacing: 13.9688
5289textSize: 18 fontSpacing: 20.9531
5290textSize: 24 fontSpacing: 27.9375
5291textSize: 32 fontSpacing: 37.25
5292~~~~
5293
5294</fiddle-embed></div>
5295
5296---
5297
Cary Clark682c58d2018-05-16 07:07:07 -04005298<a name='SkPaint_getFontBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005299## getFontBounds
5300
Cary Clark682c58d2018-05-16 07:07:07 -04005301<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5302<a href='SkRect_Reference#SkRect'>SkRect</a> <a href='#SkPaint_getFontBounds'>getFontBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005303</pre>
5304
Cary Clark682c58d2018-05-16 07:07:07 -04005305Returns the union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>.
5306Returned dimensions are computed by <a href='undocumented#Font_Manager'>Font Manager</a> from font data,
5307ignoring <a href='#SkPaint_Hinting'>Hinting</a>. Includes <a href='#Text_Size'>Text Size</a>, <a href='#Text_Scale_X'>Text Scale X</a>,
5308and <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 -04005309
Cary Clark682c58d2018-05-16 07:07:07 -04005310If <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,
5311returns the same bounds as <a href='#Font_Metrics'>Font Metrics</a> { <a href='#SkPaint_FontMetrics_fXMin'>FontMetrics::fXMin</a>,
5312<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 -04005313
5314### Return Value
5315
Cary Clark682c58d2018-05-16 07:07:07 -04005316union of bounds of all <a href='undocumented#Glyph'>Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04005317
5318### Example
5319
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005320<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
Cary Clark12799e12017-07-28 15:18:29 -04005321
5322#### Example Output
5323
5324~~~~
5325metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5326font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
5327~~~~
5328
5329</fiddle-embed></div>
5330
5331---
5332
Cary Clark682c58d2018-05-16 07:07:07 -04005333<a name='SkPaint_textToGlyphs'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005334## textToGlyphs
5335
Cary Clark682c58d2018-05-16 07:07:07 -04005336<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5337int <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 -04005338</pre>
5339
Cary Clark682c58d2018-05-16 07:07:07 -04005340Converts <a href='#SkPaint_textToGlyphs_text'>text</a> into glyph indices.
5341Returns the number of glyph indices represented by <a href='#SkPaint_textToGlyphs_text'>text</a>.
5342<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>.
5343<a href='#SkPaint_textToGlyphs_glyphs'>glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04005344
Cary Clark682c58d2018-05-16 07:07:07 -04005345Does not check <a href='#SkPaint_textToGlyphs_text'>text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04005346
Cary Clark682c58d2018-05-16 07:07:07 -04005347If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> equals zero, returns zero.
5348If <a href='#SkPaint_textToGlyphs_byteLength'>byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04005349
Cary Clark682c58d2018-05-16 07:07:07 -04005350If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kUTF8_TextEncoding'>kUTF8 TextEncoding</a> and
5351<a href='#SkPaint_textToGlyphs_text'>text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04005352
5353### Parameters
5354
Cary Clark682c58d2018-05-16 07:07:07 -04005355<table> <tr> <td><a name='SkPaint_textToGlyphs_text'><code><strong>text</strong></code></a></td>
5356 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5357 </tr>
5358 <tr> <td><a name='SkPaint_textToGlyphs_byteLength'><code><strong>byteLength</strong></code></a></td>
5359 <td>length of character storage in bytes</td>
5360 </tr>
5361 <tr> <td><a name='SkPaint_textToGlyphs_glyphs'><code><strong>glyphs</strong></code></a></td>
5362 <td>storage for glyph indices; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005363 </tr>
5364</table>
5365
5366### Return Value
5367
Cary Clark682c58d2018-05-16 07:07:07 -04005368number 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 -04005369
5370### Example
5371
5372<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
5373
5374---
5375
Cary Clark682c58d2018-05-16 07:07:07 -04005376<a name='SkPaint_countText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005377## countText
5378
Cary Clark682c58d2018-05-16 07:07:07 -04005379<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5380int <a href='#SkPaint_countText'>countText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005381</pre>
5382
Cary Clark682c58d2018-05-16 07:07:07 -04005383Returns the number of <a href='undocumented#Glyph'>Glyphs</a> in <a href='#SkPaint_countText_text'>text</a>.
5384Uses <a href='#Text_Encoding'>Text Encoding</a> to count the <a href='undocumented#Glyph'>Glyphs</a>.
5385Returns the same result as <a href='#SkPaint_textToGlyphs'>textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005386
5387### Parameters
5388
Cary Clark682c58d2018-05-16 07:07:07 -04005389<table> <tr> <td><a name='SkPaint_countText_text'><code><strong>text</strong></code></a></td>
5390 <td>character storage encoded with <a href='#Text_Encoding'>Text Encoding</a></td>
5391 </tr>
5392 <tr> <td><a name='SkPaint_countText_byteLength'><code><strong>byteLength</strong></code></a></td>
5393 <td>length of character storage in bytes</td>
Cary Clark12799e12017-07-28 15:18:29 -04005394 </tr>
5395</table>
5396
5397### Return Value
5398
Cary Clark682c58d2018-05-16 07:07:07 -04005399number 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 -04005400
5401### Example
5402
5403<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
5404
5405#### Example Output
5406
5407~~~~
5408count = 5
5409~~~~
5410
5411</fiddle-embed></div>
5412
5413---
5414
Cary Clark682c58d2018-05-16 07:07:07 -04005415<a name='SkPaint_containsText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005416## containsText
5417
Cary Clark682c58d2018-05-16 07:07:07 -04005418<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5419bool <a href='#SkPaint_containsText'>containsText</a>(const void* text, size_t byteLength) const
Cary Clark12799e12017-07-28 15:18:29 -04005420</pre>
5421
Cary Clark682c58d2018-05-16 07:07:07 -04005422Returns true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index.
5423Returns false if any characters in <a href='#SkPaint_containsText_text'>text</a> are not supported in
5424<a href='undocumented#Typeface'>Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005425
Cary Clark682c58d2018-05-16 07:07:07 -04005426If <a href='#Text_Encoding'>Text Encoding</a> is <a href='#SkPaint_kGlyphID_TextEncoding'>kGlyphID TextEncoding</a>,
5427returns true if all glyph indices in <a href='#SkPaint_containsText_text'>text</a> are non-zero;
5428does 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 -04005429
Cary Clark682c58d2018-05-16 07:07:07 -04005430Returns true if <a href='#SkPaint_containsText_byteLength'>byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04005431
5432### Parameters
5433
Cary Clark682c58d2018-05-16 07:07:07 -04005434<table> <tr> <td><a name='SkPaint_containsText_text'><code><strong>text</strong></code></a></td>
5435 <td>array of characters or <a href='undocumented#Glyph'>Glyphs</a></td>
5436 </tr>
5437 <tr> <td><a name='SkPaint_containsText_byteLength'><code><strong>byteLength</strong></code></a></td>
5438 <td>number of bytes in <a href='#SkPaint_containsText_text'>text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04005439 </tr>
5440</table>
5441
5442### Return Value
5443
Cary Clark682c58d2018-05-16 07:07:07 -04005444true if all <a href='#SkPaint_containsText_text'>text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04005445
Ruiqi Mao94d57c42018-07-02 15:20:10 -04005446<div><a href='#SkPaint_containsText'>containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark1a8d7622018-03-05 13:26:16 -05005447corresponding to the Unicode surrogate code point.
5448</div>
Cary Clark12799e12017-07-28 15:18:29 -04005449
5450#### Example Output
5451
5452~~~~
54530x00b0 == has char
54540xd800 != has char
5455~~~~
5456
Cary Clark12799e12017-07-28 15:18:29 -04005457### Example
5458
Cary Clark682c58d2018-05-16 07:07:07 -04005459<div><fiddle-embed name="083557b6f653d6fc00a34e01f87b74ff"><div><a href='#SkPaint_containsText'>containsText</a> returns true that glyph index is greater than zero, not
5460that it corresponds to an entry in <a href='undocumented#Typeface'>Typeface</a>.
Cary Clark1a8d7622018-03-05 13:26:16 -05005461</div>
Cary Clark12799e12017-07-28 15:18:29 -04005462
5463#### Example Output
5464
5465~~~~
54660x01ff == has glyph
54670x0000 != has glyph
54680xffff == has glyph
5469~~~~
5470
5471</fiddle-embed></div>
5472
5473### See Also
5474
Cary Clark682c58d2018-05-16 07:07:07 -04005475<a href='#SkPaint_setTextEncoding'>setTextEncoding</a> <a href='undocumented#Typeface'>Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04005476
5477---
5478
Cary Clark682c58d2018-05-16 07:07:07 -04005479<a name='SkPaint_glyphsToUnichars'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005480## glyphsToUnichars
5481
Cary Clark682c58d2018-05-16 07:07:07 -04005482<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5483void <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 -04005484</pre>
5485
Cary Clark682c58d2018-05-16 07:07:07 -04005486Converts <a href='#SkPaint_glyphsToUnichars_glyphs'>glyphs</a> into <a href='#SkPaint_glyphsToUnichars_text'>text</a> if possible.
5487<a href='undocumented#Glyph'>Glyph</a> values without direct Unicode equivalents are mapped to zero.
5488Uses the <a href='undocumented#Typeface'>Typeface</a>, but is unaffected
5489by <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 -04005490
Cary Clark682c58d2018-05-16 07:07:07 -04005491Only supported on platforms that use FreeType as the <a href='undocumented#Engine'>Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005492
5493### Parameters
5494
Cary Clark682c58d2018-05-16 07:07:07 -04005495<table> <tr> <td><a name='SkPaint_glyphsToUnichars_glyphs'><code><strong>glyphs</strong></code></a></td>
5496 <td>array of indices into font</td>
5497 </tr>
5498 <tr> <td><a name='SkPaint_glyphsToUnichars_count'><code><strong>count</strong></code></a></td>
5499 <td>length of glyph array</td>
5500 </tr>
5501 <tr> <td><a name='SkPaint_glyphsToUnichars_text'><code><strong>text</strong></code></a></td>
5502 <td>storage for character codes, one per glyph</td>
Cary Clark12799e12017-07-28 15:18:29 -04005503 </tr>
5504</table>
5505
5506### Example
5507
skia-bookmakerb95bbba2018-07-06 05:23:23 +00005508<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 -05005509</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005510
5511---
5512
Cary Clark682c58d2018-05-16 07:07:07 -04005513## <a name='Measure_Text'>Measure Text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005514
Cary Clark682c58d2018-05-16 07:07:07 -04005515<a name='SkPaint_measureText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005516## measureText
5517
Cary Clark682c58d2018-05-16 07:07:07 -04005518<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5519<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 -04005520</pre>
5521
Cary Clark682c58d2018-05-16 07:07:07 -04005522Returns the advance width of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5523and the height of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5524The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_text'>text</a>.
5525Uses <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,
5526and <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
5527<a href='undocumented#Path_Effect'>Path Effect</a> to scale the metrics and <a href='#SkPaint_measureText_bounds'>bounds</a>.
5528Returns the bounding box of <a href='#SkPaint_measureText_text'>text</a> if <a href='#SkPaint_measureText_bounds'>bounds</a> is not nullptr.
5529The 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 -04005530
5531### Parameters
5532
Cary Clark682c58d2018-05-16 07:07:07 -04005533<table> <tr> <td><a name='SkPaint_measureText_text'><code><strong>text</strong></code></a></td>
5534 <td>character codes or glyph indices to be measured</td>
5535 </tr>
5536 <tr> <td><a name='SkPaint_measureText_length'><code><strong>length</strong></code></a></td>
5537 <td>number of bytes of <a href='#SkPaint_measureText_text'>text</a> to measure</td>
5538 </tr>
5539 <tr> <td><a name='SkPaint_measureText_bounds'><code><strong>bounds</strong></code></a></td>
5540 <td>returns bounding box relative to (0, 0) if not nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005541 </tr>
5542</table>
5543
5544### Return Value
5545
5546advance width or height
5547
5548### Example
5549
5550<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
5551
5552---
5553
Cary Clark682c58d2018-05-16 07:07:07 -04005554<a name='SkPaint_measureText_2'></a>
Cary Clark2dc84ad2018-01-26 12:56:22 -05005555
Cary Clark682c58d2018-05-16 07:07:07 -04005556<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5557<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 -04005558</pre>
5559
Cary Clark682c58d2018-05-16 07:07:07 -04005560Returns the advance width of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear,
5561and the height of <a href='#SkPaint_measureText_2_text'>text</a> if <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set.
5562The advance is the normal distance to move before drawing additional <a href='#SkPaint_measureText_2_text'>text</a>.
5563Uses <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,
5564and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5565Does 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 -04005566
5567### Parameters
5568
Cary Clark682c58d2018-05-16 07:07:07 -04005569<table> <tr> <td><a name='SkPaint_measureText_2_text'><code><strong>text</strong></code></a></td>
5570 <td>character codes or glyph indices to be measured</td>
5571 </tr>
5572 <tr> <td><a name='SkPaint_measureText_2_length'><code><strong>length</strong></code></a></td>
5573 <td>number of bytes of <a href='#SkPaint_measureText_2_text'>text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04005574 </tr>
5575</table>
5576
5577### Return Value
5578
5579advance width or height
5580
5581### Example
5582
5583<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
5584
5585#### Example Output
5586
5587~~~~
5588default width = 5
5589double width = 10
5590~~~~
5591
5592</fiddle-embed></div>
5593
5594---
5595
Cary Clark682c58d2018-05-16 07:07:07 -04005596<a name='SkPaint_breakText'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005597## breakText
5598
Cary Clark682c58d2018-05-16 07:07:07 -04005599<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5600size_t <a href='#SkPaint_breakText'>breakText</a>(const void* text, size_t length, <a href='undocumented#SkScalar'>SkScalar</a> maxWidth,
5601 <a href='undocumented#SkScalar'>SkScalar</a>* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04005602</pre>
5603
Cary Clark682c58d2018-05-16 07:07:07 -04005604Returns the bytes of <a href='#SkPaint_breakText_text'>text</a> that fit within <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5605If <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
5606equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5607If <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
5608equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5609Measures only while the advance is less than or equal to <a href='#SkPaint_breakText_maxWidth'>maxWidth</a>.
5610Returns the advance or the <a href='#SkPaint_breakText_text'>text</a> fragment in <a href='#SkPaint_breakText_measuredWidth'>measuredWidth</a> if it not nullptr.
5611Uses <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,
5612and <a href='#Text_Size'>Text Size</a> to scale the metrics.
5613Does 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 -04005614
5615### Parameters
5616
Cary Clark682c58d2018-05-16 07:07:07 -04005617<table> <tr> <td><a name='SkPaint_breakText_text'><code><strong>text</strong></code></a></td>
5618 <td>character codes or glyph indices to be measured</td>
5619 </tr>
5620 <tr> <td><a name='SkPaint_breakText_length'><code><strong>length</strong></code></a></td>
5621 <td>number of bytes of <a href='#SkPaint_breakText_text'>text</a> to measure</td>
5622 </tr>
5623 <tr> <td><a name='SkPaint_breakText_maxWidth'><code><strong>maxWidth</strong></code></a></td>
5624 <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>
5625 </tr>
5626 <tr> <td><a name='SkPaint_breakText_measuredWidth'><code><strong>measuredWidth</strong></code></a></td>
5627 <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 -04005628 </tr>
5629</table>
5630
5631### Return Value
5632
Cary Clark682c58d2018-05-16 07:07:07 -04005633bytes 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 -04005634
5635### Example
5636
Cary Clark682c58d2018-05-16 07:07:07 -04005637<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href='undocumented#Line'>Line</a> under "" shows desired width, shorter than available characters.
5638<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 -05005639</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005640
5641---
5642
Cary Clark682c58d2018-05-16 07:07:07 -04005643<a name='SkPaint_getTextWidths'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005644## getTextWidths
5645
Cary Clark682c58d2018-05-16 07:07:07 -04005646<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5647int <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 -04005648</pre>
5649
Cary Clark682c58d2018-05-16 07:07:07 -04005650Retrieves the advance and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> for each glyph in <a href='#SkPaint_getTextWidths_text'>text</a>, and returns
5651the glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>.
5652Both <a href='#SkPaint_getTextWidths_widths'>widths</a> and <a href='#SkPaint_getTextWidths_bounds'>bounds</a> may be nullptr.
5653If <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.
5654if <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.
5655If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is clear, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the horizontal advance.
5656If <a href='#SkPaint_kVerticalText_Flag'>kVerticalText Flag</a> is set, <a href='#SkPaint_getTextWidths_widths'>widths</a> returns the vertical advance.
5657Uses <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,
5658and <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>.
5659Does not scale the advance by <a href='#Fake_Bold'>Fake Bold</a> or <a href='undocumented#Path_Effect'>Path Effect</a>.
5660Does 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 -04005661
5662### Parameters
5663
Cary Clark682c58d2018-05-16 07:07:07 -04005664<table> <tr> <td><a name='SkPaint_getTextWidths_text'><code><strong>text</strong></code></a></td>
5665 <td>character codes or glyph indices to be measured</td>
5666 </tr>
5667 <tr> <td><a name='SkPaint_getTextWidths_byteLength'><code><strong>byteLength</strong></code></a></td>
5668 <td>number of bytes of <a href='#SkPaint_getTextWidths_text'>text</a> to measure</td>
5669 </tr>
5670 <tr> <td><a name='SkPaint_getTextWidths_widths'><code><strong>widths</strong></code></a></td>
5671 <td>returns <a href='#SkPaint_getTextWidths_text'>text</a> advances for each glyph; may be nullptr</td>
5672 </tr>
5673 <tr> <td><a name='SkPaint_getTextWidths_bounds'><code><strong>bounds</strong></code></a></td>
5674 <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 -04005675 </tr>
5676</table>
5677
5678### Return Value
5679
Cary Clark682c58d2018-05-16 07:07:07 -04005680glyph count in <a href='#SkPaint_getTextWidths_text'>text</a>
Cary Clark12799e12017-07-28 15:18:29 -04005681
5682### Example
5683
Cary Clark682c58d2018-05-16 07:07:07 -04005684<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.
5685The underlines show the <a href='#SkPaint_getTextWidths_text'>text</a> advance, spaced to keep them distinct.
Cary Clark1a8d7622018-03-05 13:26:16 -05005686</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005687
5688---
5689
Cary Clark682c58d2018-05-16 07:07:07 -04005690## <a name='Text_Path'>Text Path</a>
Cary Clark08895c42018-02-01 09:37:32 -05005691
Cary Clark682c58d2018-05-16 07:07:07 -04005692<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 -04005693
Cary Clark682c58d2018-05-16 07:07:07 -04005694<a name='SkPaint_getTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005695## getTextPath
5696
Cary Clark682c58d2018-05-16 07:07:07 -04005697<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5698void <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 -04005699</pre>
5700
Cary Clark682c58d2018-05-16 07:07:07 -04005701Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getTextPath_text'>text</a>.
5702Uses <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,
5703and <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.
5704All of the glyph paths are stored in <a href='#SkPaint_getTextPath_path'>path</a>.
5705Uses <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 -04005706
5707### Parameters
5708
Cary Clark682c58d2018-05-16 07:07:07 -04005709<table> <tr> <td><a name='SkPaint_getTextPath_text'><code><strong>text</strong></code></a></td>
5710 <td>character codes or glyph indices</td>
5711 </tr>
5712 <tr> <td><a name='SkPaint_getTextPath_length'><code><strong>length</strong></code></a></td>
5713 <td>number of bytes of <a href='#SkPaint_getTextPath_text'>text</a></td>
5714 </tr>
5715 <tr> <td><a name='SkPaint_getTextPath_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005716 <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 -04005717 </tr>
5718 <tr> <td><a name='SkPaint_getTextPath_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005719 <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 -04005720 </tr>
5721 <tr> <td><a name='SkPaint_getTextPath_path'><code><strong>path</strong></code></a></td>
5722 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005723 </tr>
5724</table>
5725
5726### Example
5727
Cary Clark682c58d2018-05-16 07:07:07 -04005728<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 -05005729the offset location. The result is rendered with one draw call.
5730</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005731
5732---
5733
Cary Clark682c58d2018-05-16 07:07:07 -04005734<a name='SkPaint_getPosTextPath'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005735## getPosTextPath
5736
Cary Clark682c58d2018-05-16 07:07:07 -04005737<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5738void <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 -04005739</pre>
5740
Cary Clark682c58d2018-05-16 07:07:07 -04005741Returns the geometry as <a href='SkPath_Reference#Path'>Path</a> equivalent to the drawn <a href='#SkPaint_getPosTextPath_text'>text</a>.
5742Uses <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,
5743and <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.
5744All of the glyph paths are stored in <a href='#SkPaint_getPosTextPath_path'>path</a>.
5745Uses <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>.
5746<a href='#SkPaint_getPosTextPath_pos'>pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04005747
5748### Parameters
5749
Cary Clark682c58d2018-05-16 07:07:07 -04005750<table> <tr> <td><a name='SkPaint_getPosTextPath_text'><code><strong>text</strong></code></a></td>
5751 <td>character codes or glyph indices</td>
5752 </tr>
5753 <tr> <td><a name='SkPaint_getPosTextPath_length'><code><strong>length</strong></code></a></td>
5754 <td>number of bytes of <a href='#SkPaint_getPosTextPath_text'>text</a></td>
5755 </tr>
5756 <tr> <td><a name='SkPaint_getPosTextPath_pos'><code><strong>pos</strong></code></a></td>
5757 <td>positions of each glyph</td>
5758 </tr>
5759 <tr> <td><a name='SkPaint_getPosTextPath_path'><code><strong>path</strong></code></a></td>
5760 <td>geometry of the <a href='undocumented#Glyph'>Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005761 </tr>
5762</table>
5763
5764### Example
5765
Cary Clark682c58d2018-05-16 07:07:07 -04005766<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 -05005767</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005768
5769---
5770
Cary Clark682c58d2018-05-16 07:07:07 -04005771## <a name='Text_Intercepts'>Text Intercepts</a>
Cary Clark08895c42018-02-01 09:37:32 -05005772
Cary Clark682c58d2018-05-16 07:07:07 -04005773<a href='#Text_Intercepts'>Text Intercepts</a> describe the intersection of drawn text <a href='undocumented#Glyph'>Glyphs</a> with a pair
5774of lines parallel to the text advance. <a href='#Text_Intercepts'>Text Intercepts</a> permits creating a
Cary Clark137b8742018-05-30 09:21:49 -04005775underline that skips <a href='undocumented#Descenders'>Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005776
Cary Clark682c58d2018-05-16 07:07:07 -04005777<a name='SkPaint_getTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005778## getTextIntercepts
5779
Cary Clark682c58d2018-05-16 07:07:07 -04005780<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5781int <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,
5782 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005783</pre>
5784
Cary Clark682c58d2018-05-16 07:07:07 -04005785Returns the number of <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextIntercepts_bounds'>bounds</a>.
5786<a href='#SkPaint_getTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getTextIntercepts_text'>text</a> advance.
5787The 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 -05005788the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005789Uses <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,
5790and <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.
5791Uses <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 +00005792
Cary Clark682c58d2018-05-16 07:07:07 -04005793Pass nullptr for <a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005794
Cary Clark682c58d2018-05-16 07:07:07 -04005795<a href='#SkPaint_getTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005796
5797### Parameters
5798
Cary Clark682c58d2018-05-16 07:07:07 -04005799<table> <tr> <td><a name='SkPaint_getTextIntercepts_text'><code><strong>text</strong></code></a></td>
5800 <td>character codes or glyph indices</td>
5801 </tr>
5802 <tr> <td><a name='SkPaint_getTextIntercepts_length'><code><strong>length</strong></code></a></td>
5803 <td>number of bytes of <a href='#SkPaint_getTextIntercepts_text'>text</a></td>
5804 </tr>
5805 <tr> <td><a name='SkPaint_getTextIntercepts_x'><code><strong>x</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005806 <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 -04005807 </tr>
5808 <tr> <td><a name='SkPaint_getTextIntercepts_y'><code><strong>y</strong></code></a></td>
Cary Clark5538c132018-06-14 12:28:14 -04005809 <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 -04005810 </tr>
5811 <tr> <td><a name='SkPaint_getTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5812 <td>lower and upper line parallel to the advance</td>
5813 </tr>
5814 <tr> <td><a name='SkPaint_getTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5815 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005816 </tr>
5817</table>
5818
5819### Return Value
5820
5821number of intersections; may be zero
5822
5823### Example
5824
Cary Clark1a8d7622018-03-05 13:26:16 -05005825<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.
5826</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005827
5828---
5829
Cary Clark682c58d2018-05-16 07:07:07 -04005830<a name='SkPaint_getPosTextIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005831## getPosTextIntercepts
5832
Cary Clark682c58d2018-05-16 07:07:07 -04005833<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5834int <a href='#SkPaint_getPosTextIntercepts'>getPosTextIntercepts</a>(const void* text, size_t length, const <a href='SkPoint_Reference#SkPoint'>SkPoint</a> pos[],
5835 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005836</pre>
5837
Cary Clark682c58d2018-05-16 07:07:07 -04005838Returns the number of <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a>.
5839<a href='#SkPaint_getPosTextIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextIntercepts_text'>text</a> advance.
5840The 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 -05005841the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005842Uses <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,
5843and <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.
5844Uses <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 +00005845
Cary Clark682c58d2018-05-16 07:07:07 -04005846Pass nullptr for <a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005847
Cary Clark682c58d2018-05-16 07:07:07 -04005848<a href='#SkPaint_getPosTextIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005849
5850### Parameters
5851
Cary Clark682c58d2018-05-16 07:07:07 -04005852<table> <tr> <td><a name='SkPaint_getPosTextIntercepts_text'><code><strong>text</strong></code></a></td>
5853 <td>character codes or glyph indices</td>
5854 </tr>
5855 <tr> <td><a name='SkPaint_getPosTextIntercepts_length'><code><strong>length</strong></code></a></td>
5856 <td>number of bytes of <a href='#SkPaint_getPosTextIntercepts_text'>text</a></td>
5857 </tr>
5858 <tr> <td><a name='SkPaint_getPosTextIntercepts_pos'><code><strong>pos</strong></code></a></td>
5859 <td>positions of each glyph</td>
5860 </tr>
5861 <tr> <td><a name='SkPaint_getPosTextIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5862 <td>lower and upper line parallel to the advance</td>
5863 </tr>
5864 <tr> <td><a name='SkPaint_getPosTextIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5865 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005866 </tr>
5867</table>
5868
5869### Return Value
5870
Cary Clarka523d2d2017-08-30 08:58:10 -04005871number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04005872
5873### Example
5874
Cary Clark682c58d2018-05-16 07:07:07 -04005875<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 -05005876</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005877
5878---
5879
Cary Clark682c58d2018-05-16 07:07:07 -04005880<a name='SkPaint_getPosTextHIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005881## getPosTextHIntercepts
5882
Cary Clark682c58d2018-05-16 07:07:07 -04005883<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5884int <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,
5885 const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005886</pre>
5887
Cary Clark682c58d2018-05-16 07:07:07 -04005888Returns the number of <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a>.
5889<a href='#SkPaint_getPosTextHIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the <a href='#SkPaint_getPosTextHIntercepts_text'>text</a> advance.
5890The 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 -05005891the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005892Uses <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,
5893and <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.
5894Uses <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 +00005895
Cary Clark682c58d2018-05-16 07:07:07 -04005896Pass nullptr for <a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005897
Cary Clark682c58d2018-05-16 07:07:07 -04005898<a href='#SkPaint_getPosTextHIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005899
5900### Parameters
5901
Cary Clark682c58d2018-05-16 07:07:07 -04005902<table> <tr> <td><a name='SkPaint_getPosTextHIntercepts_text'><code><strong>text</strong></code></a></td>
5903 <td>character codes or glyph indices</td>
5904 </tr>
5905 <tr> <td><a name='SkPaint_getPosTextHIntercepts_length'><code><strong>length</strong></code></a></td>
5906 <td>number of bytes of <a href='#SkPaint_getPosTextHIntercepts_text'>text</a></td>
5907 </tr>
5908 <tr> <td><a name='SkPaint_getPosTextHIntercepts_xpos'><code><strong>xpos</strong></code></a></td>
5909 <td>positions of each glyph in x</td>
5910 </tr>
5911 <tr> <td><a name='SkPaint_getPosTextHIntercepts_constY'><code><strong>constY</strong></code></a></td>
5912 <td>position of each glyph in y</td>
5913 </tr>
5914 <tr> <td><a name='SkPaint_getPosTextHIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5915 <td>lower and upper line parallel to the advance</td>
5916 </tr>
5917 <tr> <td><a name='SkPaint_getPosTextHIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5918 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005919 </tr>
5920</table>
5921
5922### Return Value
5923
5924number of intersections; may be zero
5925
5926### Example
5927
Cary Clark682c58d2018-05-16 07:07:07 -04005928<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 -05005929</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005930
5931---
5932
Cary Clark682c58d2018-05-16 07:07:07 -04005933<a name='SkPaint_getTextBlobIntercepts'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005934## getTextBlobIntercepts
5935
Cary Clark682c58d2018-05-16 07:07:07 -04005936<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5937int <a href='#SkPaint_getTextBlobIntercepts'>getTextBlobIntercepts</a>(const <a href='undocumented#SkTextBlob'>SkTextBlob</a>* blob, const <a href='undocumented#SkScalar'>SkScalar</a> bounds[2], <a href='undocumented#SkScalar'>SkScalar</a>* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005938</pre>
5939
Cary Clark682c58d2018-05-16 07:07:07 -04005940Returns the number of <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> that intersect <a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a>.
5941<a href='#SkPaint_getTextBlobIntercepts_bounds'>bounds</a> describes a pair of lines parallel to the text advance.
5942The 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 -05005943the string.
Cary Clark682c58d2018-05-16 07:07:07 -04005944Uses <a href='undocumented#Typeface'>Typeface</a> to get the glyph paths,
5945and <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.
5946Uses 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 +00005947
Cary Clark682c58d2018-05-16 07:07:07 -04005948<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 -05005949
Cary Clark682c58d2018-05-16 07:07:07 -04005950Pass nullptr for <a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> to determine the size of the interval array.
skia-bookmaker525f9a92018-05-03 06:27:39 +00005951
Cary Clark682c58d2018-05-16 07:07:07 -04005952<a href='#SkPaint_getTextBlobIntercepts_intervals'>intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005953
5954### Parameters
5955
Cary Clark682c58d2018-05-16 07:07:07 -04005956<table> <tr> <td><a name='SkPaint_getTextBlobIntercepts_blob'><code><strong>blob</strong></code></a></td>
5957 <td><a href='undocumented#Glyph'>Glyphs</a>, positions, and text paint attributes</td>
5958 </tr>
5959 <tr> <td><a name='SkPaint_getTextBlobIntercepts_bounds'><code><strong>bounds</strong></code></a></td>
5960 <td>lower and upper line parallel to the advance</td>
5961 </tr>
5962 <tr> <td><a name='SkPaint_getTextBlobIntercepts_intervals'><code><strong>intervals</strong></code></a></td>
5963 <td>returned intersections; may be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04005964 </tr>
5965</table>
5966
5967### Return Value
5968
5969number of intersections; may be zero
5970
5971### Example
5972
skia-bookmaker44bad2e2018-07-05 05:35:27 +00005973<div><fiddle-embed name="f2229dd5c8e76f9e12fafe59b61353c8"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005974
5975---
5976
Cary Clark682c58d2018-05-16 07:07:07 -04005977<a name='SkPaint_nothingToDraw'></a>
Cary Clark12799e12017-07-28 15:18:29 -04005978## nothingToDraw
5979
Cary Clark682c58d2018-05-16 07:07:07 -04005980<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
5981bool <a href='#SkPaint_nothingToDraw'>nothingToDraw</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04005982</pre>
5983
Cary Clark682c58d2018-05-16 07:07:07 -04005984Returns true if <a href='#Paint'>Paint</a> prevents all drawing;
5985otherwise, the <a href='#Paint'>Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005986
Cary Clark224c7002018-06-27 11:00:21 -04005987Returns 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 -04005988new <a href='SkColor_Reference#Alpha'>Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005989
5990### Return Value
5991
Cary Clark682c58d2018-05-16 07:07:07 -04005992true if <a href='#Paint'>Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005993
5994### Example
5995
skia-bookmaker525f9a92018-05-03 06:27:39 +00005996<div><fiddle-embed name="2973b05bfbb6b4c29332c8ac4fcf3995">
Cary Clark12799e12017-07-28 15:18:29 -04005997
5998#### Example Output
5999
6000~~~~
6001initial nothing to draw: false
6002blend dst nothing to draw: true
6003blend src over nothing to draw: false
6004alpha 0 nothing to draw: true
6005~~~~
6006
6007</fiddle-embed></div>
6008
6009---
6010
Cary Clark682c58d2018-05-16 07:07:07 -04006011## <a name='Fast_Bounds'>Fast Bounds</a>
Cary Clark08895c42018-02-01 09:37:32 -05006012
Cary Clark682c58d2018-05-16 07:07:07 -04006013<a href='#Fast_Bounds'>Fast Bounds</a> functions conservatively outset a drawing bounds by additional area
6014<a href='#Paint'>Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04006015
Cary Clark682c58d2018-05-16 07:07:07 -04006016<a name='SkPaint_canComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006017## canComputeFastBounds
6018
Cary Clark682c58d2018-05-16 07:07:07 -04006019<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6020bool <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a>() const
Cary Clark12799e12017-07-28 15:18:29 -04006021</pre>
6022
Cary Clark682c58d2018-05-16 07:07:07 -04006023Returns true if <a href='#Paint'>Paint</a> does not include elements requiring extensive computation
6024to 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 -04006025always returns false.
6026
6027### Return Value
6028
Cary Clark682c58d2018-05-16 07:07:07 -04006029true if <a href='#Paint'>Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04006030
6031---
6032
Cary Clark682c58d2018-05-16 07:07:07 -04006033<a name='SkPaint_computeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006034## computeFastBounds
6035
Cary Clark682c58d2018-05-16 07:07:07 -04006036<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6037const <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 -04006038</pre>
6039
Cary Clark682c58d2018-05-16 07:07:07 -04006040Only call this if <a href='#SkPaint_canComputeFastBounds'>canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04006041raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark682c58d2018-05-16 07:07:07 -04006042effects 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 -04006043parameter. It returns the adjusted bounds that can then be used
Cary Clark682c58d2018-05-16 07:07:07 -04006044for <a href='SkCanvas_Reference#SkCanvas_quickReject'>SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04006045
Cary Clark682c58d2018-05-16 07:07:07 -04006046The 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
6047should not rely on <a href='#SkPaint_computeFastBounds_storage'>storage</a> being set to the result, but should always
6048use 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
6049<a href='SkRect_Reference#Rect'>Rect</a>.
6050
Cary Clark12799e12017-07-28 15:18:29 -04006051### Parameters
6052
Cary Clark682c58d2018-05-16 07:07:07 -04006053<table> <tr> <td><a name='SkPaint_computeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6054 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6055 </tr>
6056 <tr> <td><a name='SkPaint_computeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6057 <td>computed bounds of geometry; may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04006058 </tr>
6059</table>
6060
6061### Return Value
6062
6063fast computed bounds
6064
6065---
6066
Cary Clark682c58d2018-05-16 07:07:07 -04006067<a name='SkPaint_computeFastStrokeBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006068## computeFastStrokeBounds
6069
Cary Clark682c58d2018-05-16 07:07:07 -04006070<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6071const <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 -04006072</pre>
6073
6074### Parameters
6075
Cary Clark682c58d2018-05-16 07:07:07 -04006076<table> <tr> <td><a name='SkPaint_computeFastStrokeBounds_orig'><code><strong>orig</strong></code></a></td>
6077 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6078 </tr>
6079 <tr> <td><a name='SkPaint_computeFastStrokeBounds_storage'><code><strong>storage</strong></code></a></td>
6080 <td>computed bounds of geometry</td>
Cary Clark12799e12017-07-28 15:18:29 -04006081 </tr>
6082</table>
6083
6084### Return Value
6085
6086fast computed bounds
6087
6088---
6089
Cary Clark682c58d2018-05-16 07:07:07 -04006090<a name='SkPaint_doComputeFastBounds'></a>
Cary Clark12799e12017-07-28 15:18:29 -04006091## doComputeFastBounds
6092
Cary Clark682c58d2018-05-16 07:07:07 -04006093<pre style="padding: 1em 1em 1em 1em; width: 62.5em;background-color: #f0f0f0">
6094const <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 -04006095</pre>
6096
Cary Clark682c58d2018-05-16 07:07:07 -04006097Computes the bounds, overriding the <a href='#Paint'>Paint</a> <a href='#SkPaint_Style'>Style</a>. This can be used to
6098account for additional width required by stroking <a href='#SkPaint_doComputeFastBounds_orig'>orig</a>, without
6099altering <a href='#SkPaint_Style'>Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04006100
6101### Parameters
6102
Cary Clark682c58d2018-05-16 07:07:07 -04006103<table> <tr> <td><a name='SkPaint_doComputeFastBounds_orig'><code><strong>orig</strong></code></a></td>
6104 <td>geometry modified by <a href='#Paint'>Paint</a> when drawn</td>
6105 </tr>
6106 <tr> <td><a name='SkPaint_doComputeFastBounds_storage'><code><strong>storage</strong></code></a></td>
6107 <td>computed bounds of geometry</td>
6108 </tr>
6109 <tr> <td><a name='SkPaint_doComputeFastBounds_style'><code><strong>style</strong></code></a></td>
6110 <td>overrides <a href='#SkPaint_Style'>Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04006111 </tr>
6112</table>
6113
6114### Return Value
6115
6116fast computed bounds
6117
6118---
6119
Cary Clark682c58d2018-05-16 07:07:07 -04006120## <a name='Utility'>Utility</a>
Cary Clark78de7512018-02-07 07:27:09 -05006121
Cary Clark78de7512018-02-07 07:27:09 -05006122
Cary Clark682c58d2018-05-16 07:07:07 -04006123<table style='border-collapse: collapse; width: 62.5em'>
6124 <tr><th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Topic</th>
6125<th style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>Description</th></tr>
6126 <tr style='background-color: #f0f0f0; '>
6127 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_containsText'>containsText</a></td>
6128 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns if all text corresponds to <a href='undocumented#Glyph'>Glyphs</a></td>
6129 </tr>
6130 <tr>
6131 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_countText'>countText</a></td>
6132 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns number of <a href='undocumented#Glyph'>Glyphs</a> in text</td>
6133 </tr>
6134 <tr style='background-color: #f0f0f0; '>
6135 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_glyphsToUnichars'>glyphsToUnichars</a></td>
6136 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts <a href='undocumented#Glyph'>Glyphs</a> into text</td>
6137 </tr>
6138 <tr>
6139 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_nothingToDraw'>nothingToDraw</a></td>
6140 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>returns true if <a href='#Paint'>Paint</a> prevents all drawing</td>
6141 </tr>
6142 <tr style='background-color: #f0f0f0; '>
6143 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '><a href='#SkPaint_textToGlyphs'>textToGlyphs</a></td>
6144 <td style='text-align: left; border: 2px solid #dddddd; padding: 8px; '>converts text into glyph indices</td>
6145 </tr>
Cary Clark682c58d2018-05-16 07:07:07 -04006146</table>
Cary Clark224c7002018-06-27 11:00:21 -04006147