blob: de06852bc94a94683061c3a8feeecfaebc26ea56 [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
4# <a name="Paint"></a> Paint
Cary Clark8cc16c72017-08-25 11:51:49 -04005<a href="#Paint">Paint</a> controls options applied when drawing and measuring. <a href="#Paint">Paint</a> collects all
6options outside of the <a href="#Clip">Canvas Clip</a> and <a href="#Matrix">Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -04007
8Various options apply to text, strokes and fills, and images.
9
10Some options may not be implemented on all platforms; in these cases, setting
Cary Clark4c06f5e2017-08-04 12:48:24 -040011the option has no effect. Some options are conveniences that duplicate <a href="SkCanvas_Reference#Canvas">Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040012functionality; for instance, text size is identical to matrix scale.
13
Cary Clark8cc16c72017-08-25 11:51:49 -040014<a href="#Paint">Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
15pipeline and multiple pipeline stages may be affected by a single <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040016
Cary Clark8cc16c72017-08-25 11:51:49 -040017<a href="#Paint">Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040018algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark8cc16c72017-08-25 11:51:49 -040019<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 -040020
Cary Clark8cc16c72017-08-25 11:51:49 -040021The 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 -040022to affect it. The implementation is free to defer computations associated with the
Cary Clark8cc16c72017-08-25 11:51:49 -040023<a href="#Paint">Paint</a>, or ignore them altogether. For instance, some <a href="undocumented#GPU">GPU</a> implementations draw all
24<a href="SkPath_Reference#Path">Path</a> geometries with anti-aliasing, regardless of how <a href="#SkPaint_kAntiAlias_Flag">SkPaint::kAntiAlias Flag</a>
25is set in <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040026
Cary Clark8cc16c72017-08-25 11:51:49 -040027<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 -040028Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark8cc16c72017-08-25 11:51:49 -040029<a href="undocumented#Shader">Shader</a> attached to <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040030
31# <a name="SkPaint"></a> Class SkPaint
32
33# <a name="Overview"></a> Overview
34
35## <a name="Subtopics"></a> Subtopics
36
37| topics | description |
38| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040039| <a href="#Initializers">Initializers</a> | Constructors and initialization. |
40| <a href="#Destructor">Destructor</a> | <a href="#Paint">Paint</a> termination. |
41| <a href="#Management">Management</a> | <a href="#Paint">Paint</a> copying, moving, comparing. |
42| <a href="#SkPaint_Hinting">Hinting</a> | <a href="undocumented#Glyph">Glyph</a> outline adjustment. |
43| <a href="#SkPaint_Flags">Flags</a> | Attributes represented by single bits. |
Cary Clark4c06f5e2017-08-04 12:48:24 -040044| <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> | Approximating coverage with transparency. |
Cary Clark8cc16c72017-08-25 11:51:49 -040045| <a href="#Dither">Dither</a> | Distributing color error. |
46| <a href="#Device_Text">Device Text</a> | Increase precision of glyph position. |
Cary Clark4c06f5e2017-08-04 12:48:24 -040047| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | Custom-sized bitmap glyphs. |
Cary Clark8cc16c72017-08-25 11:51:49 -040048| <a href="#Automatic_Hinting">Automatic Hinting</a> | Always adjust glyph paths. |
49| <a href="#Vertical_Text">Vertical Text</a> | Orient text from top to bottom. |
50| <a href="#Fake_Bold">Fake Bold</a> | Approximate font styles. |
Cary Clark4c06f5e2017-08-04 12:48:24 -040051| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | <a href="undocumented#Glyph">Glyph</a> spacing affected by hinting. |
Cary Clark8cc16c72017-08-25 11:51:49 -040052| <a href="#Filter_Quality_Methods">Filter Quality Methods</a> | Get and set <a href="undocumented#Filter_Quality">Filter Quality</a>. |
53| <a href="#Color_Methods">Color Methods</a> | Get and set <a href="undocumented#Color">Color</a>. |
54| <a href="#SkPaint_Style">Style</a> | Geometry filling, stroking. |
55| <a href="#Stroke_Width">Stroke Width</a> | Thickness perpendicular to geometry. |
56| <a href="#Miter_Limit">Miter Limit</a> | Maximum length of stroked corners. |
57| <a href="#Stroke_Cap">Stroke Cap</a> | Decorations at ends of open strokes. |
58| <a href="#Stroke_Join">Stroke Join</a> | Decoration at corners of strokes. |
59| <a href="#Fill_Path">Fill Path</a> | Make <a href="SkPath_Reference#Path">Path</a> from <a href="undocumented#Path_Effect">Path Effect</a>, stroking. |
60| <a href="#Shader_Methods">Shader Methods</a> | Get and set <a href="undocumented#Shader">Shader</a>. |
61| <a href="#Color_Filter_Methods">Color Filter Methods</a> | Get and set <a href="undocumented#Color_Filter">Color Filter</a>. |
62| <a href="#Blend_Mode_Methods">Blend Mode Methods</a> | Get and set <a href="undocumented#Blend_Mode">Blend Mode</a>. |
63| <a href="#Path_Effect_Methods">Path Effect Methods</a> | Get and set <a href="undocumented#Path_Effect">Path Effect</a>. |
64| <a href="#Mask_Filter_Methods">Mask Filter Methods</a> | Get and set <a href="undocumented#Mask_Filter">Mask Filter</a>. |
65| <a href="#Typeface_Methods">Typeface Methods</a> | Get and set <a href="undocumented#Typeface">Typeface</a>. |
66| <a href="#Rasterizer_Methods">Rasterizer Methods</a> | Get and set <a href="undocumented#Rasterizer">Rasterizer</a>. |
67| <a href="#Image_Filter_Methods">Image Filter Methods</a> | Get and set <a href="undocumented#Image_Filter">Image Filter</a>. |
68| <a href="#Draw_Looper_Methods">Draw Looper Methods</a> | Get and set <a href="undocumented#Draw_Looper">Draw Looper</a>. |
69| <a href="#Text_Align">Text Align</a> | <a href="undocumented#Text">Text</a> placement relative to position. |
70| <a href="#Text_Size">Text Size</a> | Overall height in points. |
71| <a href="#Text_Scale_X">Text Scale X</a> | <a href="undocumented#Text">Text</a> horizontal scale. |
72| <a href="#Text_Skew_X">Text Skew X</a> | <a href="undocumented#Text">Text</a> horizontal slant. |
73| <a href="#Text_Encoding">Text Encoding</a> | <a href="undocumented#Text">Text</a> encoded as characters or glyphs. |
74| <a href="#Font_Metrics">Font Metrics</a> | Common glyph dimensions. |
75| <a href="#Measure_Text">Measure Text</a> | Width, height, bounds of text. |
76| <a href="#Text_Path">Text Path</a> | Geometry of glyphs. |
77| <a href="#Text_Intercepts">Text Intercepts</a> | Advanced underline, strike through. |
78| <a href="#Fast_Bounds">Fast Bounds</a> | Appproxiate area required by <a href="#Paint">Paint</a>. |
Cary Clark12799e12017-07-28 15:18:29 -040079
80## <a name="Constants"></a> Constants
81
82| constants | description |
83| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040084| <a href="#SkPaint_Align">Align</a> | <a href="undocumented#Glyph">Glyph</a> locations relative to text position. |
85| <a href="#SkPaint_Cap">Cap</a> | Start and end geometry on stroked shapes. |
86| <a href="#SkPaint_Flags">Flags</a> | Values described by bits and masks. |
87| <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetrics::FontMetricsFlags</a> | Valid <a href="#Font_Metrics">Font Metrics</a>. |
88| <a href="#SkPaint_Hinting">Hinting</a> | Level of glyph outline adjustment. |
89| <a href="#SkPaint_Join">Join</a> | Corner geometry on stroked shapes. |
90| <a href="#SkPaint_Style">Style</a> | Stroke, fill, or both. |
91| <a href="#SkPaint_TextEncoding">TextEncoding</a> | Character or glyph encoding size. |
Cary Clark12799e12017-07-28 15:18:29 -040092
93## <a name="Structs"></a> Structs
94
95| struct | description |
96| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040097| <a href="#SkPaint_FontMetrics">FontMetrics</a> | <a href="undocumented#Typeface">Typeface</a> values. |
Cary Clark12799e12017-07-28 15:18:29 -040098
99## <a name="Constructors"></a> Constructors
100
101| | description |
102| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400103| <a href="#SkPaint_empty_constructor">SkPaint()</a> | Constructs with default values. |
104| <a href="#SkPaint_copy_constructor">SkPaint(const SkPaint& paint)</a> | Makes a shallow copy. |
105| <a href="#SkPaint_move_constructor">SkPaint(SkPaint&& paint)</a> | Moves paint without copying it. |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400106| | Decreases <a href="undocumented#Reference_Count">Reference Count</a> of owned objects. |
Cary Clark12799e12017-07-28 15:18:29 -0400107
108## <a name="Operators"></a> Operators
109
110| operator | description |
111| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400112| <a href="#SkPaint_copy_assignment_operator">operator=(const SkPaint& paint)</a> | Makes a shallow copy. |
113| <a href="#SkPaint_move_assignment_operator">operator=(SkPaint&& paint)</a> | Moves paint without copying it. |
114| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | Compares paints for equality. |
115| <a href="#SkPaint_not_equal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | Compares paints for inequality. |
Cary Clark12799e12017-07-28 15:18:29 -0400116
117## <a name="Member_Functions"></a> Member Functions
118
119| function | description |
120| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400121| <a href="#SkPaint_breakText">breakText</a> | Returns text that fits in a width. |
122| <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> | Returns true if settings allow for fast bounds computation. |
123| <a href="#SkPaint_computeFastBounds">computeFastBounds</a> | Returns fill bounds for quick reject tests. |
124| <a href="#SkPaint_computeFastStrokeBounds">computeFastStrokeBounds</a> | Returns stroke bounds for quick reject tests. |
125| <a href="#SkPaint_containsText">containsText</a> | Returns if all text corresponds to glyphs. |
126| <a href="#SkPaint_countText">countText</a> | Returns number of glyphs in text. |
127| <a href="#SkPaint_doComputeFastBounds">doComputeFastBounds</a> | Returns bounds for quick reject tests. |
128| <a href="#SkPaint_flatten">flatten</a> | Serializes into a buffer. |
129| <a href="#SkPaint_getAlpha">getAlpha</a> | Returns <a href="#Alpha">Color Alpha</a>, color opacity. |
130| <a href="#SkPaint_getBlendMode">getBlendMode</a> | Returns <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with dest. |
131| <a href="#SkPaint_getColor">getColor</a> | Returns <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color. |
132| <a href="#SkPaint_getColorFilter">getColorFilter</a> | Returns <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered. |
133| <a href="#SkPaint_getDrawLooper">getDrawLooper</a> | Returns <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
134| <a href="#SkPaint_getFillPath">getFillPath</a> | Returns fill path equivalent to stroke. |
135| <a href="#SkPaint_getFilterQuality">getFilterQuality</a> | Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, image filtering level. |
136| <a href="#SkPaint_getFlags">getFlags</a> | Returns <a href="#SkPaint_Flags">Flags</a> stored in a bit field. |
137| <a href="#SkPaint_getFontBounds">getFontBounds</a> | Returns union all glyph bounds. |
138| <a href="#SkPaint_getFontMetrics">getFontMetrics</a> | Returns <a href="undocumented#Typeface">Typeface</a> metrics scaled by text size. |
139| <a href="#SkPaint_getFontSpacing">getFontSpacing</a> | Returns recommended spacing between lines. |
140| <a href="#SkPaint_getHash">getHash</a> | Returns a shallow hash for equality checks. |
141| <a href="#SkPaint_getHinting">getHinting</a> | Returns <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level. |
142| <a href="#SkPaint_getImageFilter">getImageFilter</a> | Returns <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
143| <a href="#SkPaint_getMaskFilter">getMaskFilter</a> | Returns <a href="undocumented#Mask_Filter">Mask Filter</a>, alterations to <a href="undocumented#Mask_Alpha">Mask Alpha</a>. |
144| <a href="#SkPaint_getPathEffect">getPathEffect</a> | Returns <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
145| <a href="#SkPaint_getPosTextPath">getPosTextPath</a> | Returns <a href="SkPath_Reference#Path">Path</a> equivalent to positioned text. |
146| <a href="#SkPaint_getPosTextIntercepts">getPosTextIntercepts</a> | Returns where lines intersect positioned text; underlines. |
147| <a href="#SkPaint_getPosTextHIntercepts">getPosTextHIntercepts</a> | Returns where lines intersect horizontally positioned text; underlines. |
148| <a href="#SkPaint_getRasterizer">getRasterizer</a> | Returns <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Mask_Alpha">Mask Alpha</a> generation from <a href="SkPath_Reference#Path">Path</a>. |
149| <a href="#SkPaint_getShader">getShader</a> | Returns <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
150| <a href="#SkPaint_getStrokeCap">getStrokeCap</a> | Returns <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends. |
151| <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a> | Returns <a href="#SkPaint_Join">Join</a>, geometry on path corners. |
152| <a href="#SkPaint_getStrokeMiter">getStrokeMiter</a> | Returns <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners. |
153| <a href="#SkPaint_getStrokeWidth">getStrokeWidth</a> | Returns thickness of the stroke. |
154| <a href="#SkPaint_getStyle">getStyle</a> | Returns <a href="#SkPaint_Style">Style</a>: stroke, fill, or both. |
155| <a href="#SkPaint_getTextAlign">getTextAlign</a> | Returns <a href="#SkPaint_Align">Align</a>: left, center, or right. |
156| <a href="#SkPaint_getTextBlobIntercepts">getTextBlobIntercepts</a> | Returns where lines intersect <a href="undocumented#Text_Blob">Text Blob</a>; underlines. |
157| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | Returns character or glyph encoding size. |
158| <a href="#SkPaint_getTextIntercepts">getTextIntercepts</a> | Returns where lines intersect text; underlines. |
159| <a href="#SkPaint_getTextPath">getTextPath</a> | Returns <a href="SkPath_Reference#Path">Path</a> equivalent to text. |
160| <a href="#SkPaint_getTextScaleX">getTextScaleX</a> | Returns the text horizontal scale; condensed text. |
161| <a href="#SkPaint_getTextSkewX">getTextSkewX</a> | Returns the text horizontal skew; oblique text. |
162| <a href="#SkPaint_getTextSize">getTextSize</a> | Returns text size in points. |
163| <a href="#SkPaint_getTextWidths">getTextWidths</a> | Returns advance and bounds for each glyph in text. |
164| <a href="#SkPaint_getTypeface">getTypeface</a> | Returns <a href="undocumented#Typeface">Typeface</a>, font description. |
165| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | Converts glyphs into text. |
166| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | Returns true if <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is set. |
167| <a href="#SkPaint_isAutohinted">isAutohinted</a> | Returns true if glyphs are always hinted. |
168| <a href="#SkPaint_isDevKernText">isDevKernText</a> | Returns true if <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is set. |
169| <a href="#SkPaint_isDither">isDither</a> | Returns true if <a href="#Dither">Dither</a> is set. |
170| <a href="#SkPaint_isEmbeddedBitmapText">isEmbeddedBitmapText</a> | Returns true if <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is set. |
171| <a href="#SkPaint_isFakeBoldText">isFakeBoldText</a> | Returns true if <a href="#Fake_Bold">Fake Bold</a> is set. |
172| <a href="#SkPaint_isLCDRenderText">isLCDRenderText</a> | Returns true if <a href="SkPaint_Reference#LCD_Text">LCD Text</a> is set. |
173| <a href="#SkPaint_isSrcOver">isSrcOver</a> | Returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>. |
174| <a href="#SkPaint_isSubpixelText">isSubpixelText</a> | Returns true if <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is set. |
175| <a href="#SkPaint_isVerticalText">isVerticalText</a> | Returns true if <a href="#Vertical_Text">Vertical Text</a> is set. |
176| <a href="#SkPaint_measureText">measureText</a> | Returns advance width and bounds of text. |
177| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | Returns true if <a href="#Paint">Paint</a> prevents all drawing. |
178| <a href="#SkPaint_refColorFilter">refColorFilter</a> | References <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered. |
179| <a href="#SkPaint_refDrawLooper">refDrawLooper</a> | References <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
180| <a href="#SkPaint_refImageFilter">refImageFilter</a> | References <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
181| <a href="#SkPaint_refMaskFilter">refMaskFilter</a> | References <a href="undocumented#Mask_Filter">Mask Filter</a>, alterations to <a href="undocumented#Mask_Alpha">Mask Alpha</a>. |
182| <a href="#SkPaint_refPathEffect">refPathEffect</a> | References <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
183| <a href="#SkPaint_refRasterizer">refRasterizer</a> | References <a href="undocumented#Rasterizer">Rasterizer</a>, mask generation from path. |
184| <a href="#SkPaint_refShader">refShader</a> | References <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
185| <a href="#SkPaint_refTypeface">refTypeface</a> | References <a href="undocumented#Typeface">Typeface</a>, font description. |
186| <a href="#SkPaint_reset">reset</a> | Sets to default values. |
187| <a href="#SkPaint_setAlpha">setAlpha</a> | Sets <a href="#Alpha">Color Alpha</a>, color opacity. |
188| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | Sets or clears <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>. |
189| <a href="#SkPaint_setARGB">setARGB</a> | Sets color by component. |
190| <a href="#SkPaint_setAutohinted">setAutohinted</a> | Sets glyphs to always be hinted. |
191| <a href="#SkPaint_setBlendMode">setBlendMode</a> | Sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination. |
192| <a href="#SkPaint_setColor">setColor</a> | Sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color. |
193| <a href="#SkPaint_setColorFilter">setColorFilter</a> | Sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color. |
194| <a href="#SkPaint_setDevKernText">setDevKernText</a> | Sets or clears <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a>. |
195| <a href="#SkPaint_setDither">setDither</a> | Sets or clears <a href="#Dither">Dither</a>. |
196| <a href="#SkPaint_setDrawLooper">setDrawLooper</a> | Sets <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
197| <a href="#SkPaint_setEmbeddedBitmapText">setEmbeddedBitmapText</a> | Sets or clears <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a>. |
198| <a href="#SkPaint_setFakeBoldText">setFakeBoldText</a> | Sets or clears <a href="#Fake_Bold">Fake Bold</a>. |
199| <a href="#SkPaint_setFilterQuality">setFilterQuality</a> | Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. |
200| <a href="#SkPaint_setFlags">setFlags</a> | Sets multiple <a href="#SkPaint_Flags">Flags</a> in a bit field. |
201| <a href="#SkPaint_setHinting">setHinting</a> | Sets <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level. |
202| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | Sets or clears <a href="SkPaint_Reference#LCD_Text">LCD Text</a>. |
203| <a href="#SkPaint_setMaskFilter">setMaskFilter</a> | Sets <a href="undocumented#Mask_Filter">Mask Filter</a>, alterations to <a href="undocumented#Mask_Alpha">Mask Alpha</a>. |
204| <a href="#SkPaint_setPathEffect">setPathEffect</a> | Sets <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
205| <a href="#SkPaint_setRasterizer">setRasterizer</a> | Sets <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Mask_Alpha">Mask Alpha</a> generation from <a href="SkPath_Reference#Path">Path</a>. |
206| <a href="#SkPaint_setImageFilter">setImageFilter</a> | Sets <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
207| <a href="#SkPaint_setShader">setShader</a> | Sets <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
208| <a href="#SkPaint_setStrokeCap">setStrokeCap</a> | Sets <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends. |
209| <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a> | Sets <a href="#SkPaint_Join">Join</a>, geometry on path corners. |
210| <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> | Sets <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners. |
211| <a href="#SkPaint_setStrokeWidth">setStrokeWidth</a> | Sets thickness of the stroke. |
212| <a href="#SkPaint_setStyle">setStyle</a> | Sets <a href="#SkPaint_Style">Style</a>: stroke, fill, or both. |
213| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | Sets or clears <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>. |
214| <a href="#SkPaint_setTextAlign">setTextAlign</a> | Sets <a href="#SkPaint_Align">Align</a>: left, center, or right. |
215| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | Sets character or glyph encoding size. |
216| <a href="#SkPaint_setTextScaleX">setTextScaleX</a> | Sets the text horizontal scale; condensed text. |
217| <a href="#SkPaint_setTextSkewX">setTextSkewX</a> | Sets the text horizontal skew; oblique text. |
218| <a href="#SkPaint_setTextSize">setTextSize</a> | Sets text size in points. |
219| <a href="#SkPaint_setTypeface">setTypeface</a> | Sets <a href="undocumented#Typeface">Typeface</a>, font description. |
220| <a href="#SkPaint_setVerticalText">setVerticalText</a> | Sets or clears <a href="#Vertical_Text">Vertical Text</a>. |
221| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | Converts text into glyph indices. |
222| <a href="#SkPaint_toString">toString</a> | Converts <a href="#Paint">Paint</a> to machine parsable form (<a href="undocumented#Developer_Mode">Developer Mode</a>) |
223| <a href="#SkPaint_unflatten">unflatten</a> | Populates from a serialized stream. |
Cary Clark12799e12017-07-28 15:18:29 -0400224
225# <a name="Initializers"></a> Initializers
226
Cary Clark493df1f2017-08-25 13:14:33 -0400227<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400228## SkPaint
229
230<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
231SkPaint()
232</pre>
233
Cary Clark8cc16c72017-08-25 11:51:49 -0400234Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400235
236| attribute | default value |
237| --- | --- |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400238| <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400239| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400240| <a href="undocumented#Color">Color</a> | <a href="undocumented#SK_ColorBLACK">SK ColorBLACK</a> |
Cary Clark8cc16c72017-08-25 11:51:49 -0400241| <a href="#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400242| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400243| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400244| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400245| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400246| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> |
247| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400248| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400249| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400250| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400251| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
252| <a href="SkPaint_Reference#LCD_Text">LCD Text</a> | false |
253| <a href="SkPaint_Reference#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400254| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400255| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
256| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
257| <a href="undocumented#Rasterizer">Rasterizer</a> | nullptr |
258| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400259| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
260| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
261| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
262| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
263| <a href="#Text_Size">Text Size</a> | 12 |
264| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400265| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400266| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
267| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
268| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400269| <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400270| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400271
272The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark4c06f5e2017-08-04 12:48:24 -0400273paint default values. The overrides may be included in <a href="undocumented#SkUserConfig.h">SkUserConfig.h</a> or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400274build system.
275
276### Return Value
277
Cary Clark8cc16c72017-08-25 11:51:49 -0400278default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400279
280### Example
281
282<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
283
284---
285
Cary Clark493df1f2017-08-25 13:14:33 -0400286<a name="SkPaint_copy_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400287## SkPaint
288
289<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
290SkPaint(const SkPaint& paint)
291</pre>
292
Cary Clark8cc16c72017-08-25 11:51:49 -0400293Makes 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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400294<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clark8cc16c72017-08-25 11:51:49 -0400295between the original <a href="#SkPaint_copy_constructor_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400296their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400297
Cary Clark4c06f5e2017-08-04 12:48:24 -0400298The 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>, <a href="undocumented#Rasterizer">Rasterizer</a>,
299<a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> cannot be modified after they are created.
Cary Clark8cc16c72017-08-25 11:51:49 -0400300This 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 -0400301
302### Parameters
303
Cary Clark8cc16c72017-08-25 11:51:49 -0400304<table> <tr> <td><a name="SkPaint_copy_constructor_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400305original to copy</td>
306 </tr>
307</table>
308
309### Return Value
310
Cary Clark8cc16c72017-08-25 11:51:49 -0400311shallow copy of <a href="#SkPaint_copy_constructor_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400312
313### Example
314
315<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
316
317#### Example Output
318
319~~~~
320SK_ColorRED == paint1.getColor()
321SK_ColorBLUE == paint2.getColor()
322~~~~
323
324</fiddle-embed></div>
325
326---
327
Cary Clark493df1f2017-08-25 13:14:33 -0400328<a name="SkPaint_move_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400329## SkPaint
330
331<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
332SkPaint(SkPaint&& paint)
333</pre>
334
335Implements a move constructor to avoid incrementing the reference counts
Cary Clark8cc16c72017-08-25 11:51:49 -0400336of objects referenced by the <a href="#SkPaint_move_constructor_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400337
Cary Clark8cc16c72017-08-25 11:51:49 -0400338After the call, <a href="#SkPaint_move_constructor_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400339
340### Parameters
341
Cary Clark8cc16c72017-08-25 11:51:49 -0400342<table> <tr> <td><a name="SkPaint_move_constructor_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400343original to move</td>
344 </tr>
345</table>
346
347### Return Value
348
Cary Clark8cc16c72017-08-25 11:51:49 -0400349content of <a href="#SkPaint_move_constructor_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400350
351### Example
352
353<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
354
355#### Example Output
356
357~~~~
358path effect unique: true
359~~~~
360
361</fiddle-embed></div>
362
363---
364
Cary Clark493df1f2017-08-25 13:14:33 -0400365<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400366## reset
367
368<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
369void reset()
370</pre>
371
372Sets all paint's contents to their initial values. This is equivalent to replacing
Cary Clark8cc16c72017-08-25 11:51:49 -0400373the paint with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400374
375### Example
376
377<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
378
379#### Example Output
380
381~~~~
382paint1 == paint2
383~~~~
384
385</fiddle-embed></div>
386
387---
388
389# <a name="Destructor"></a> Destructor
390
Cary Clark493df1f2017-08-25 13:14:33 -0400391<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400392## ~SkPaint
393
394<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
395~SkPaint()
396</pre>
397
Cary Clark8cc16c72017-08-25 11:51:49 -0400398Decreases <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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400399<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a>. If the
400objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400401
402---
403
404# <a name="Management"></a> Management
405
Cary Clark493df1f2017-08-25 13:14:33 -0400406<a name="SkPaint_copy_assignment_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400407## operator=
408
409<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
410SkPaint& operator=(const SkPaint& paint)
411</pre>
412
Cary Clark8cc16c72017-08-25 11:51:49 -0400413Makes 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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400414<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clark8cc16c72017-08-25 11:51:49 -0400415between the original <a href="#SkPaint_copy_assignment_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 -0400416prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark8cc16c72017-08-25 11:51:49 -0400417resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_assignment_operator_paint">paint</a>
418are increased by one. <a href="#SkPaint_copy_assignment_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400419
420### Parameters
421
Cary Clark8cc16c72017-08-25 11:51:49 -0400422<table> <tr> <td><a name="SkPaint_copy_assignment_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400423original to copy</td>
424 </tr>
425</table>
426
427### Return Value
428
Cary Clark8cc16c72017-08-25 11:51:49 -0400429content of <a href="#SkPaint_copy_assignment_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400430
431### Example
432
433<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
434
435#### Example Output
436
437~~~~
438SK_ColorRED == paint1.getColor()
439SK_ColorRED == paint2.getColor()
440~~~~
441
442</fiddle-embed></div>
443
444---
445
Cary Clark493df1f2017-08-25 13:14:33 -0400446<a name="SkPaint_move_assignment_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400447## operator=
448
449<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
450SkPaint& operator=(SkPaint&& paint)
451</pre>
452
Cary Clark8cc16c72017-08-25 11:51:49 -0400453Moves the <a href="#SkPaint_move_assignment_operator_paint">paint</a> to avoid incrementing the reference counts
454of objects referenced by the <a href="#SkPaint_move_assignment_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400455prior destination are decreased by one; those objects are deleted if the resulting count
456is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400457
Cary Clark8cc16c72017-08-25 11:51:49 -0400458After the call, <a href="#SkPaint_move_assignment_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400459
460### Parameters
461
Cary Clark8cc16c72017-08-25 11:51:49 -0400462<table> <tr> <td><a name="SkPaint_move_assignment_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400463original to move</td>
464 </tr>
465</table>
466
467### Return Value
468
Cary Clark8cc16c72017-08-25 11:51:49 -0400469content of <a href="#SkPaint_move_assignment_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400470
471### Example
472
473<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
474
475#### Example Output
476
477~~~~
478SK_ColorRED == paint2.getColor()
479~~~~
480
481</fiddle-embed></div>
482
483---
484
Cary Clark493df1f2017-08-25 13:14:33 -0400485<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400486## operator==
487
488<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
489bool operator==(const SkPaint& a, const SkPaint& b)
490</pre>
491
Cary Clark8cc16c72017-08-25 11:51:49 -0400492Compares <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
Cary Clark4c06f5e2017-08-04 12:48:24 -0400493if <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>, <a href="undocumented#Rasterizer">Rasterizer</a>,
494<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 -0400495
496### Parameters
497
Cary Clark8cc16c72017-08-25 11:51:49 -0400498<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
499<a href="#Paint">Paint</a> to compare</td>
500 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
501<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400502 </tr>
503</table>
504
505### Return Value
506
Cary Clark8cc16c72017-08-25 11:51:49 -0400507true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400508
509### Example
510
511<div><fiddle-embed name="7481a948e34672720337a631830586dd">
512
513#### Example Output
514
515~~~~
516paint1 == paint2
517paint1 != paint2
518~~~~
519
520</fiddle-embed></div>
521
522---
523
Cary Clark493df1f2017-08-25 13:14:33 -0400524<a name="SkPaint_not_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400525## operator!=
526
527<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
528bool operator!=(const SkPaint& a, const SkPaint& b)
529</pre>
530
Cary Clark8cc16c72017-08-25 11:51:49 -0400531Compares <a href="#SkPaint_not_equal_operator_a">a</a> and <a href="#SkPaint_not_equal_operator_b">b</a>, and returns true if <a href="#SkPaint_not_equal_operator_a">a</a> and <a href="#SkPaint_not_equal_operator_b">b</a> are not equivalent. May return true
Cary Clark4c06f5e2017-08-04 12:48:24 -0400532if <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>, <a href="undocumented#Rasterizer">Rasterizer</a>,
533<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 -0400534
535### Parameters
536
Cary Clark8cc16c72017-08-25 11:51:49 -0400537<table> <tr> <td><a name="SkPaint_not_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
538<a href="#Paint">Paint</a> to compare</td>
539 </tr> <tr> <td><a name="SkPaint_not_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
540<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400541 </tr>
542</table>
543
544### Return Value
545
Cary Clark8cc16c72017-08-25 11:51:49 -0400546true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400547
548### Example
549
550<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
551
552#### Example Output
553
554~~~~
555paint1 == paint2
556paint1 == paint2
557~~~~
558
559</fiddle-embed></div>
560
561---
562
Cary Clark493df1f2017-08-25 13:14:33 -0400563<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400564## getHash
565
566<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
567uint32_t getHash() const
568</pre>
569
Cary Clark8cc16c72017-08-25 11:51:49 -0400570Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400571Identical hashes guarantee that the paints are
572equivalent, but differing hashes do not guarantee that the paints have differing
573contents.
574
Cary Clark8cc16c72017-08-25 11:51:49 -0400575If <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 -0400576their hashes are also equal.
577
578The hash returned is platform and implementation specific.
579
580### Return Value
581
582a shallow hash
583
584### Example
585
586<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
587
588#### Example Output
589
590~~~~
591paint1 == paint2
592paint1.getHash() == paint2.getHash()
593~~~~
594
595</fiddle-embed></div>
596
597---
598
Cary Clark493df1f2017-08-25 13:14:33 -0400599<a name="SkPaint_flatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400600## flatten
601
602<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
603void flatten(SkWriteBuffer& buffer) const
604</pre>
605
Cary Clark8cc16c72017-08-25 11:51:49 -0400606Serializes <a href="#Paint">Paint</a> into a <a href="#SkPaint_flatten_buffer">buffer</a>. A companion <a href="#SkPaint_unflatten">unflatten</a> call
Cary Clark12799e12017-07-28 15:18:29 -0400607can reconstitute the paint at a later time.
608
609### Parameters
610
Cary Clark8cc16c72017-08-25 11:51:49 -0400611<table> <tr> <td><a name="SkPaint_flatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
612<a href="undocumented#Write_Buffer">Write Buffer</a> receiving the flattened <a href="#Paint">Paint</a> data</td>
Cary Clark12799e12017-07-28 15:18:29 -0400613 </tr>
614</table>
615
616### Example
617
618<div><fiddle-embed name="670672b146b50eced4d3dd10c701e0a7">
619
620#### Example Output
621
622~~~~
623color = 0xffff0000
624~~~~
625
626</fiddle-embed></div>
627
628---
629
Cary Clark493df1f2017-08-25 13:14:33 -0400630<a name="SkPaint_unflatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400631## unflatten
632
633<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
634void unflatten(SkReadBuffer& buffer)
635</pre>
636
Cary Clark8cc16c72017-08-25 11:51:49 -0400637Populates <a href="#Paint">Paint</a>, typically from a serialized stream, created by calling
638<a href="#SkPaint_flatten">flatten</a> at an earlier time.
Cary Clark12799e12017-07-28 15:18:29 -0400639
Cary Clark8cc16c72017-08-25 11:51:49 -0400640<a href="undocumented#SkReadBuffer">SkReadBuffer</a> class is not public, so <a href="#SkPaint_unflatten">unflatten</a> cannot be meaningfully called
Cary Clark12799e12017-07-28 15:18:29 -0400641by the client.
642
643### Parameters
644
Cary Clark8cc16c72017-08-25 11:51:49 -0400645<table> <tr> <td><a name="SkPaint_unflatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400646serialized data to unflatten</td>
647 </tr>
648</table>
649
650---
651
652# <a name="Hinting"></a> Hinting
653
Cary Clark8cc16c72017-08-25 11:51:49 -0400654## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400655
656<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400657enum <a href="#Hinting">Hinting</a> {
658<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
659<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
660<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
661<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400662};</pre>
663
Cary Clark8cc16c72017-08-25 11:51:49 -0400664<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
665look at a given point size on font engines that support it. <a href="#Hinting">Hinting</a> may have a
Cary Clark12799e12017-07-28 15:18:29 -0400666muted effect or no effect at all depending on the platform.
667
Cary Clark4c06f5e2017-08-04 12:48:24 -0400668The four levels roughly control corresponding features on platforms that use <a href="undocumented#FreeType">FreeType</a>
Cary Clark8cc16c72017-08-25 11:51:49 -0400669as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400670
671### Constants
672
673<table>
674 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400675 <td><a name="SkPaint_kNo_Hinting"> <code><strong>SkPaint::kNo_Hinting </strong></code> </a></td><td>0</td><td>Leaves glyph outlines unchanged from their native representation.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400676With <a href="undocumented#FreeType">FreeType</a>, this is equivalent to the <a href="undocumented#FT_LOAD_NO_HINTING">FT LOAD NO HINTING</a>
677bit-field constant supplied to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400678outline being loaded should not be fitted to the pixel grid but simply scaled
679to 26.6 fractional pixels.</td>
680 </tr>
681 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400682 <td><a name="SkPaint_kSlight_Hinting"> <code><strong>SkPaint::kSlight_Hinting </strong></code> </a></td><td>1</td><td>Modifies glyph outlines minimally to improve constrast.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400683With <a href="undocumented#FreeType">FreeType</a>, this is equivalent in spirit to the
684<a href="undocumented#FT_LOAD_TARGET_LIGHT">FT LOAD TARGET LIGHT</a> value supplied to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400685lighter hinting algorithm for non-monochrome modes.
686Generated glyphs may be fuzzy but better resemble their original shape.</td>
687 </tr>
688 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400689 <td><a name="SkPaint_kNormal_Hinting"> <code><strong>SkPaint::kNormal_Hinting </strong></code> </a></td><td>2</td><td>Modifies glyph outlines to improve constrast. This is the default.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400690With <a href="undocumented#FreeType">FreeType</a>, this supplies <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>,
Cary Clark12799e12017-07-28 15:18:29 -0400691choosing the default hinting algorithm, which is optimized for standard
692gray-level rendering.</td>
693 </tr>
694 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400695 <td><a name="SkPaint_kFull_Hinting"> <code><strong>SkPaint::kFull_Hinting </strong></code> </a></td><td>3</td><td>Modifies glyph outlines for maxiumum constrast. With <a href="undocumented#FreeType">FreeType</a>, this selects
696<a href="undocumented#FT_LOAD_TARGET_LCD">FT LOAD TARGET LCD</a> or <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400697<a href="undocumented#FT_LOAD_TARGET_LCD">FT LOAD TARGET LCD</a> is a variant of <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> optimized for
698horizontally decimated <a href="undocumented#LCD">LCD</a> displays; <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> is a
699variant of <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> optimized for vertically decimated <a href="undocumented#LCD">LCD</a> displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400700 </tr>
701</table>
702
Cary Clark8cc16c72017-08-25 11:51:49 -0400703On <a href="undocumented#Windows">Windows</a> with <a href="undocumented#DirectWrite">DirectWrite</a>, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400704
Cary Clark8cc16c72017-08-25 11:51:49 -0400705<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400706Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400707
708
709
Cary Clark493df1f2017-08-25 13:14:33 -0400710<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400711## getHinting
712
713<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
714Hinting getHinting() const
715</pre>
716
717Returns level of glyph outline adjustment.
718
719### Return Value
720
Cary Clark8cc16c72017-08-25 11:51:49 -0400721one 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 -0400722
723### Example
724
725<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
726
727#### Example Output
728
729~~~~
730SkPaint::kNormal_Hinting == paint.getHinting()
731~~~~
732
733</fiddle-embed></div>
734
735---
736
Cary Clark493df1f2017-08-25 13:14:33 -0400737<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400738## setHinting
739
740<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
741void setHinting(Hinting hintingLevel)
742</pre>
743
744Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400745Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400746
Cary Clark8cc16c72017-08-25 11:51:49 -0400747| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400748| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400749| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
750| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve constrast |
751| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve constrast |
752| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maxiumum constrast |
Cary Clark12799e12017-07-28 15:18:29 -0400753
754### Parameters
755
Cary Clark8cc16c72017-08-25 11:51:49 -0400756<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
757one 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 -0400758 </tr>
759</table>
760
761### Example
762
763<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
764
765#### Example Output
766
767~~~~
768paint1 == paint2
769~~~~
770
771</fiddle-embed></div>
772
773---
774
775# <a name="Flags"></a> Flags
776
Cary Clark8cc16c72017-08-25 11:51:49 -0400777## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400778
779<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400780enum <a href="#Flags">Flags</a> {
781<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
782<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
783<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
784<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
785<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
786<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
787<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
788<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
789<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
790<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
791<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400792
Cary Clark8cc16c72017-08-25 11:51:49 -0400793<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400794};
795</pre>
796
Cary Clark8cc16c72017-08-25 11:51:49 -0400797The bit values stored in <a href="#Flags">Flags</a>.
798The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400799with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400800All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400801multiple settings at once.
802
803### Constants
804
805<table>
806 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400807 <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting <a href="SkPaint_Reference#Anti_alias">Anti-alias</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400808 </tr>
809 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400810 <td><a name="SkPaint_kDither_Flag"> <code><strong>SkPaint::kDither_Flag </strong></code> </a></td><td>0x0004</td><td>mask for setting <a href="#Dither">Dither</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400811 </tr>
812 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400813 <td><a name="SkPaint_kFakeBoldText_Flag"> <code><strong>SkPaint::kFakeBoldText_Flag </strong></code> </a></td><td>0x0020</td><td>mask for setting <a href="#Fake_Bold">Fake Bold</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400814 </tr>
815 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400816 <td><a name="SkPaint_kLinearText_Flag"> <code><strong>SkPaint::kLinearText_Flag </strong></code> </a></td><td>0x0040</td><td>mask for setting <a href="SkPaint_Reference#Linear_Text">Linear Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400817 </tr>
818 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400819 <td><a name="SkPaint_kSubpixelText_Flag"> <code><strong>SkPaint::kSubpixelText_Flag </strong></code> </a></td><td>0x0080</td><td>mask for setting <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400820 </tr>
821 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400822 <td><a name="SkPaint_kDevKernText_Flag"> <code><strong>SkPaint::kDevKernText_Flag </strong></code> </a></td><td>0x0100</td><td>mask for setting <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400823 </tr>
824 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400825 <td><a name="SkPaint_kLCDRenderText_Flag"> <code><strong>SkPaint::kLCDRenderText_Flag </strong></code> </a></td><td>0x0200</td><td>mask for setting <a href="SkPaint_Reference#LCD_Text">LCD Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400826 </tr>
827 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400828 <td><a name="SkPaint_kEmbeddedBitmapText_Flag"> <code><strong>SkPaint::kEmbeddedBitmapText_Flag </strong></code> </a></td><td>0x0400</td><td>mask for setting <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400829 </tr>
830 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400831 <td><a name="SkPaint_kAutoHinting_Flag"> <code><strong>SkPaint::kAutoHinting_Flag </strong></code> </a></td><td>0x0800</td><td>mask for setting <a href="#Automatic_Hinting">Automatic Hinting</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400832 </tr>
833 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400834 <td><a name="SkPaint_kVerticalText_Flag"> <code><strong>SkPaint::kVerticalText_Flag </strong></code> </a></td><td>0x1000</td><td>mask for setting <a href="#Vertical_Text">Vertical Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400835 </tr>
836 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400837 <td><a name="SkPaint_kGenA8FromLCD_Flag"> <code><strong>SkPaint::kGenA8FromLCD_Flag </strong></code> </a></td><td>0x2000</td><td>not intended for public use</td>
Cary Clark12799e12017-07-28 15:18:29 -0400838 </tr>
839 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400840 <td><a name="SkPaint_kAllFlags"> <code><strong>SkPaint::kAllFlags </strong></code> </a></td><td>0xFFFF</td><td>mask of all <a href="#Flags">Flags</a>, including private flags and flags reserved for future use</td>
Cary Clark12799e12017-07-28 15:18:29 -0400841 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400842<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400843
844</table>
845
Cary Clark8cc16c72017-08-25 11:51:49 -0400846## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400847
848<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400849enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
850<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
851<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400852};</pre>
853
854### Constants
855
856<table>
857 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400858 <td><a name="SkPaint_kUnderlineText_ReserveFlag"> <code><strong>SkPaint::kUnderlineText_ReserveFlag </strong></code> </a></td><td>0x0008</td><td>mask for underline text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400859 </tr>
860 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400861 <td><a name="SkPaint_kStrikeThruText_ReserveFlag"> <code><strong>SkPaint::kStrikeThruText_ReserveFlag </strong></code> </a></td><td>0x0010</td><td>mask for strike-thru text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400862 </tr>
863</table>
864
865
866
Cary Clark493df1f2017-08-25 13:14:33 -0400867<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400868## getFlags
869
870<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
871uint32_t getFlags() const
872</pre>
873
Cary Clark8cc16c72017-08-25 11:51:49 -0400874Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
875bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400876
877### Return Value
878
Cary Clark8cc16c72017-08-25 11:51:49 -0400879zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400880
881### Example
882
883<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
884
885#### Example Output
886
887~~~~
888(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
889~~~~
890
891</fiddle-embed></div>
892
893---
894
Cary Clark493df1f2017-08-25 13:14:33 -0400895<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400896## setFlags
897
898<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
899void setFlags(uint32_t flags)
900</pre>
901
Cary Clark8cc16c72017-08-25 11:51:49 -0400902Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
903All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400904
905### Parameters
906
Cary Clark8cc16c72017-08-25 11:51:49 -0400907<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
908union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400909 </tr>
910</table>
911
912### Example
913
914<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
915
916#### Example Output
917
918~~~~
919paint.isAntiAlias()
920paint.isDither()
921~~~~
922
923</fiddle-embed></div>
924
925---
926
927# <a name="Anti-alias"></a> Anti-alias
Cary Clark4c06f5e2017-08-04 12:48:24 -0400928<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400929If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
930If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, pixels are drawn with <a href="#Alpha">Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400931
932The rule for aliased pixels is inconsistent across platforms. A shape edge
933passing through the pixel center may, but is not required to, draw the pixel.
934
Cary Clark4c06f5e2017-08-04 12:48:24 -0400935<a href="undocumented#Raster_Engine">Raster Engine</a> draws aliased pixels whose centers are on or to the right of the start of an
936active <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 -0400937
Cary Clark4c06f5e2017-08-04 12:48:24 -0400938A platform may only support anti-aliased drawing. Some <a href="undocumented#GPU_backed">GPU-backed</a> platforms use
Cary Clark12799e12017-07-28 15:18:29 -0400939supersampling to anti-alias all drawing, and have no mechanism to selectively
940alias.
941
942The amount of coverage computed for anti-aliased pixels also varies across platforms.
943
Cary Clark4c06f5e2017-08-04 12:48:24 -0400944<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is disabled by default.
Cary Clark8cc16c72017-08-25 11:51:49 -0400945<a href="SkPaint_Reference#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 -0400946at compile time.
947
948### Example
949
950<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
951A blue line draws only where the pixel centers are contained.
952The lines are drawn into an offscreen bitmap, then drawn magified to make the
953aliasing easier to see.</div></fiddle-embed></div>
954
Cary Clark493df1f2017-08-25 13:14:33 -0400955<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400956## isAntiAlias
957
958<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
959bool isAntiAlias() const
960</pre>
961
Cary Clark4c06f5e2017-08-04 12:48:24 -0400962If 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 -0400963
Cary Clark8cc16c72017-08-25 11:51:49 -0400964Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400965
966### Return Value
967
Cary Clark8cc16c72017-08-25 11:51:49 -0400968<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400969
970### Example
971
972<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
973
974#### Example Output
975
976~~~~
977paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
978paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
979~~~~
980
981</fiddle-embed></div>
982
983---
984
Cary Clark493df1f2017-08-25 13:14:33 -0400985<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400986## setAntiAlias
987
988<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
989void setAntiAlias(bool aa)
990</pre>
991
Cary Clark4c06f5e2017-08-04 12:48:24 -0400992Requests, 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 -0400993partial transparency.
994
Cary Clark8cc16c72017-08-25 11:51:49 -0400995Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
996Clears <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 -0400997
998### Parameters
999
Cary Clark8cc16c72017-08-25 11:51:49 -04001000<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
1001setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001002 </tr>
1003</table>
1004
1005### Example
1006
1007<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1008
1009#### Example Output
1010
1011~~~~
1012paint1 == paint2
1013~~~~
1014
1015</fiddle-embed></div>
1016
1017---
1018
1019# <a name="Dither"></a> Dither
Cary Clark8cc16c72017-08-25 11:51:49 -04001020<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjcent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001021This can help to smooth color transitions and reducing banding in gradients.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001022Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
1023and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
1024and improves rendering into a <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001025
1026Dithering is always enabled for linear gradients drawing into
Cary Clark4c06f5e2017-08-04 12:48:24 -04001027<a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a> and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001028<a href="#Dither">Dither</a> cannot be enabled for <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> <a href="undocumented#Surface">Surface</a> and
Cary Clark4c06f5e2017-08-04 12:48:24 -04001029<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001030
Cary Clark8cc16c72017-08-25 11:51:49 -04001031<a href="#Dither">Dither</a> is disabled by default.
1032<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 -04001033at compile time.
1034
Cary Clark8cc16c72017-08-25 11:51:49 -04001035Some platform implementations may ignore dithering. Setto ignore <a href="#Dither">Dither</a> on <a href="undocumented#GPU_Surface">GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001036
1037### Example
1038
1039<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1040alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1041
1042### Example
1043
1044<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001045Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001046dither, making it easier to see.</div></fiddle-embed></div>
1047
Cary Clark493df1f2017-08-25 13:14:33 -04001048<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001049## isDither
1050
1051<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1052bool isDither() const
1053</pre>
1054
1055If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001056Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001057
1058### Return Value
1059
Cary Clark8cc16c72017-08-25 11:51:49 -04001060<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001061
1062### Example
1063
1064<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1065
1066#### Example Output
1067
1068~~~~
1069paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1070paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1071~~~~
1072
1073</fiddle-embed></div>
1074
1075---
1076
Cary Clark493df1f2017-08-25 13:14:33 -04001077<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001078## setDither
1079
1080<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1081void setDither(bool dither)
1082</pre>
1083
1084Requests, but does not require, to distribute color error.
1085
Cary Clark8cc16c72017-08-25 11:51:49 -04001086Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1087Clears <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 -04001088
1089### Parameters
1090
Cary Clark8cc16c72017-08-25 11:51:49 -04001091<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1092setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001093 </tr>
1094</table>
1095
1096### Example
1097
1098<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1099
1100#### Example Output
1101
1102~~~~
1103paint1 == paint2
1104~~~~
1105
1106</fiddle-embed></div>
1107
1108### See Also
1109
Cary Clark4c06f5e2017-08-04 12:48:24 -04001110<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001111
1112---
1113
1114### See Also
1115
Cary Clark4c06f5e2017-08-04 12:48:24 -04001116Gradient <a href="undocumented#RGB_565">Color RGB-565</a>
Cary Clark12799e12017-07-28 15:18:29 -04001117
1118# <a name="Device_Text"></a> Device Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001119<a href="SkPaint_Reference#LCD_Text">LCD Text</a> and <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> increase the precision of glyph position.
Cary Clark12799e12017-07-28 15:18:29 -04001120
Cary Clark8cc16c72017-08-25 11:51:49 -04001121When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001122create a color, and relies
1123on the small size of the stripe and visual perception to make the color fringing inperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001124<a href="SkPaint_Reference#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark8cc16c72017-08-25 11:51:49 -04001125the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001126
Cary Clark8cc16c72017-08-25 11:51:49 -04001127<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 -04001128As the opaqueness
1129of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1130
1131Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001132<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> and <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> are clear by default.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001133<a href="SkPaint_Reference#LCD_Text">LCD Text</a> or <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
Cary Clark8cc16c72017-08-25 11:51:49 -04001134<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 -04001135
1136### Example
1137
Cary Clark4c06f5e2017-08-04 12:48:24 -04001138<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href="SkPaint_Reference#LCD_Text">LCD Text</a> and <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>.
1139When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma glyphs are indentical, but not evenly spaced.
1140When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is enabled, the comma glyphs are unique, but appear evenly spaced.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001141
1142## <a name="Linear_Text"></a> Linear Text
1143
Cary Clark4c06f5e2017-08-04 12:48:24 -04001144<a href="SkPaint_Reference#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>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001145If <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>.
1146If <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear, it's 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 -04001147
Cary Clark493df1f2017-08-25 13:14:33 -04001148<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001149## isLinearText
1150
1151<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1152bool isLinearText() const
1153</pre>
1154
Cary Clark4c06f5e2017-08-04 12:48:24 -04001155If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001156
Cary Clark8cc16c72017-08-25 11:51:49 -04001157Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001158
1159### Return Value
1160
Cary Clark8cc16c72017-08-25 11:51:49 -04001161<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001162
1163### Example
1164
1165<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1166
1167### See Also
1168
Cary Clark8cc16c72017-08-25 11:51:49 -04001169<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001170
1171---
1172
Cary Clark493df1f2017-08-25 13:14:33 -04001173<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001174## setLinearText
1175
1176<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1177void setLinearText(bool linearText)
1178</pre>
1179
Cary Clark4c06f5e2017-08-04 12:48:24 -04001180If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001181By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001182
Cary Clark8cc16c72017-08-25 11:51:49 -04001183Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1184Clears <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 -04001185
1186### Parameters
1187
Cary Clark8cc16c72017-08-25 11:51:49 -04001188<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1189setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001190 </tr>
1191</table>
1192
1193### Example
1194
1195<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1196
1197### See Also
1198
Cary Clark8cc16c72017-08-25 11:51:49 -04001199<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001200
1201---
1202
1203## <a name="Subpixel_Text"></a> Subpixel Text
1204
Cary Clark8cc16c72017-08-25 11:51:49 -04001205<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 -04001206As the opaqueness
1207of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1208
Cary Clark493df1f2017-08-25 13:14:33 -04001209<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001210## isSubpixelText
1211
1212<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1213bool isSubpixelText() const
1214</pre>
1215
1216If true, glyphs at different sub-pixel positions may differ on pixel edge coverage.
1217
Cary Clark8cc16c72017-08-25 11:51:49 -04001218Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001219
1220### Return Value
1221
Cary Clark8cc16c72017-08-25 11:51:49 -04001222<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001223
1224### Example
1225
1226<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1227
1228#### Example Output
1229
1230~~~~
1231paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1232paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1233~~~~
1234
1235</fiddle-embed></div>
1236
1237---
1238
Cary Clark493df1f2017-08-25 13:14:33 -04001239<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001240## setSubpixelText
1241
1242<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1243void setSubpixelText(bool subpixelText)
1244</pre>
1245
1246Requests, but does not require, that glyphs respect sub-pixel positioning.
1247
Cary Clark8cc16c72017-08-25 11:51:49 -04001248Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1249Clears <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 -04001250
1251### Parameters
1252
Cary Clark8cc16c72017-08-25 11:51:49 -04001253<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1254setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001255 </tr>
1256</table>
1257
1258### Example
1259
1260<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1261
1262#### Example Output
1263
1264~~~~
1265paint1 == paint2
1266~~~~
1267
1268</fiddle-embed></div>
1269
1270---
1271
1272## <a name="LCD_Text"></a> LCD Text
1273
Cary Clark8cc16c72017-08-25 11:51:49 -04001274When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001275create a color, and relies
1276on the small size of the stripe and visual perception to make the color fringing inperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001277<a href="SkPaint_Reference#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark8cc16c72017-08-25 11:51:49 -04001278the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001279
Cary Clark493df1f2017-08-25 13:14:33 -04001280<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001281## isLCDRenderText
1282
1283<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1284bool isLCDRenderText() const
1285</pre>
1286
Cary Clark4c06f5e2017-08-04 12:48:24 -04001287If true, glyphs may use <a href="undocumented#LCD">LCD</a> striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001288
Cary Clark8cc16c72017-08-25 11:51:49 -04001289Returns 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 -04001290
1291### Return Value
1292
Cary Clark8cc16c72017-08-25 11:51:49 -04001293<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001294
1295### Example
1296
1297<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1298
1299#### Example Output
1300
1301~~~~
1302paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1303paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1304~~~~
1305
1306</fiddle-embed></div>
1307
1308---
1309
Cary Clark493df1f2017-08-25 13:14:33 -04001310<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001311## setLCDRenderText
1312
1313<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1314void setLCDRenderText(bool lcdText)
1315</pre>
1316
Cary Clark4c06f5e2017-08-04 12:48:24 -04001317Requests, but does not require, that glyphs use <a href="undocumented#LCD">LCD</a> striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001318
Cary Clark8cc16c72017-08-25 11:51:49 -04001319Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1320Clears <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 -04001321
1322### Parameters
1323
Cary Clark8cc16c72017-08-25 11:51:49 -04001324<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1325setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001326 </tr>
1327</table>
1328
1329### Example
1330
1331<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1332
1333#### Example Output
1334
1335~~~~
1336paint1 == paint2
1337~~~~
1338
1339</fiddle-embed></div>
1340
1341---
1342
1343# <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
Cary Clark4c06f5e2017-08-04 12:48:24 -04001344<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> allows selecting custom-sized bitmap glyphs.
Cary Clark8cc16c72017-08-25 11:51:49 -04001345<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 Clark12799e12017-07-28 15:18:29 -04001346in a font if the platform supports this option.
1347
Cary Clark8cc16c72017-08-25 11:51:49 -04001348<a href="undocumented#FreeType">FreeType</a> selects the bitmap glyph if available when <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set, and selects
1349the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001350<a href="undocumented#Windows">Windows</a> may select the bitmap glyph but is not required to do so.
1351<a href="undocumented#OS_X">OS X</a> and <a href="undocumented#iOS">iOS</a> do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001352
Cary Clark4c06f5e2017-08-04 12:48:24 -04001353<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1354<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
Cary Clark8cc16c72017-08-25 11:51:49 -04001355<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001356
1357### Example
1358
1359<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark4c06f5e2017-08-04 12:48:24 -04001360!fiddle<div>The hintgasp <a href="undocumented#TrueType">TrueType</a> font in the <a href="undocumented#Skia">Skia</a> resources/fonts directory includes an embedded
1361bitmap glyph at odd font sizes. This example works on platforms that use <a href="undocumented#FreeType">FreeType</a>
Cary Clark8cc16c72017-08-25 11:51:49 -04001362as their <a href="#Engine">Font Engine</a>.
1363<a href="undocumented#Windows">Windows</a> may, but is not required to, return a bitmap glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set.</div><a href="undocumented#SkBitmap">SkBitmap</a> bitmap;
Cary Clark12799e12017-07-28 15:18:29 -04001364bitmap.allocN32Pixels(30, 15);
1365bitmap.eraseColor(0);
Cary Clark4c06f5e2017-08-04 12:48:24 -04001366<a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> offscreen(bitmap);
Cary Clark8cc16c72017-08-25 11:51:49 -04001367<a href="#SkPaint">SkPaint</a> paint;
Cary Clark12799e12017-07-28 15:18:29 -04001368paint.</pre>
1369
Cary Clark493df1f2017-08-25 13:14:33 -04001370<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001371## isEmbeddedBitmapText
1372
1373<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1374bool isEmbeddedBitmapText() const
1375</pre>
1376
Cary Clark8cc16c72017-08-25 11:51:49 -04001377If true, <a href="#Engine">Font Engine</a> may return glyphs from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001378
Cary Clark8cc16c72017-08-25 11:51:49 -04001379Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001380
1381### Return Value
1382
Cary Clark8cc16c72017-08-25 11:51:49 -04001383<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001384
1385### Example
1386
1387<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1388
1389#### Example Output
1390
1391~~~~
1392paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1393paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1394~~~~
1395
1396</fiddle-embed></div>
1397
1398---
1399
Cary Clark493df1f2017-08-25 13:14:33 -04001400<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001401## setEmbeddedBitmapText
1402
1403<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1404void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1405</pre>
1406
1407Requests, but does not require, to use bitmaps in fonts instead of outlines.
1408
Cary Clark8cc16c72017-08-25 11:51:49 -04001409Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1410Clears <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 -04001411
1412### Parameters
1413
Cary Clark8cc16c72017-08-25 11:51:49 -04001414<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1415setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001416 </tr>
1417</table>
1418
1419### Example
1420
1421<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1422
1423#### Example Output
1424
1425~~~~
1426paint1 == paint2
1427~~~~
1428
1429</fiddle-embed></div>
1430
1431---
1432
1433# <a name="Automatic_Hinting"></a> Automatic Hinting
Cary Clark8cc16c72017-08-25 11:51:49 -04001434If <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>
Cary Clark4c06f5e2017-08-04 12:48:24 -04001435instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint glyphs.
Cary Clark8cc16c72017-08-25 11:51:49 -04001436<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
1437<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001438
Cary Clark8cc16c72017-08-25 11:51:49 -04001439<a href="#Automatic_Hinting">Automatic Hinting</a> only affects platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001440
Cary Clark493df1f2017-08-25 13:14:33 -04001441<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001442## isAutohinted
1443
1444<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1445bool isAutohinted() const
1446</pre>
1447
Cary Clark8cc16c72017-08-25 11:51:49 -04001448If 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
Cary Clark4c06f5e2017-08-04 12:48:24 -04001449platform uses <a href="undocumented#FreeType">FreeType</a> as the <a href="undocumented#Font_Manager">Font Manager</a>, instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint
Cary Clarkbad5ad72017-08-03 17:14:08 -04001450glyphs.
Cary Clark12799e12017-07-28 15:18:29 -04001451
Cary Clark8cc16c72017-08-25 11:51:49 -04001452Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001453
1454### Return Value
1455
Cary Clark8cc16c72017-08-25 11:51:49 -04001456<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001457
1458### Example
1459
1460<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1461
1462#### Example Output
1463
1464~~~~
1465paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1466paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1467~~~~
1468
1469</fiddle-embed></div>
1470
1471### See Also
1472
Cary Clark8cc16c72017-08-25 11:51:49 -04001473<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001474
1475---
1476
Cary Clark493df1f2017-08-25 13:14:33 -04001477<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001478## setAutohinted
1479
1480<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1481void setAutohinted(bool useAutohinter)
1482</pre>
1483
Cary Clark8cc16c72017-08-25 11:51:49 -04001484If <a href="#SkPaint_Hinting">Hinting</a> is set to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> or <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> and <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is set,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001485instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint glyphs.
Cary Clark8cc16c72017-08-25 11:51:49 -04001486<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
1487<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001488
Cary Clark4c06f5e2017-08-04 12:48:24 -04001489Only affects platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001490
Cary Clark8cc16c72017-08-25 11:51:49 -04001491Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1492Clears <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 -04001493
1494### Parameters
1495
Cary Clark8cc16c72017-08-25 11:51:49 -04001496<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1497setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001498 </tr>
1499</table>
1500
1501### Example
1502
1503<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1504
1505### See Also
1506
Cary Clark8cc16c72017-08-25 11:51:49 -04001507<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001508
1509---
1510
1511# <a name="Vertical_Text"></a> Vertical Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001512<a href="undocumented#Text">Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
Cary Clark8cc16c72017-08-25 11:51:49 -04001513using <a href="#Advance">Font Advance</a> to position subsequent glyphs. By default, each successive glyph
1514is positioned to the right of the preceeding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
Cary Clark12799e12017-07-28 15:18:29 -04001515glyphs to position below the preceeding glyph.
1516
Cary Clark4c06f5e2017-08-04 12:48:24 -04001517<a href="undocumented#Skia">Skia</a> can translate text character codes as a series of glyphs, but does not implement
Cary Clark12799e12017-07-28 15:18:29 -04001518font substitution,
1519textual substitution, line layout, or contextual spacing like kerning pairs. Use
1520a text shaping engine likeHarfBuzzhttp://harfbuzz.org/to translate text runs
1521into glyph series.
1522
Cary Clark8cc16c72017-08-25 11:51:49 -04001523<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 -04001524
Cary Clark8cc16c72017-08-25 11:51:49 -04001525<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1526<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 -04001527
Cary Clark8cc16c72017-08-25 11:51:49 -04001528<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1529<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1530<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001531
1532### Example
1533
1534<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1535
Cary Clark493df1f2017-08-25 13:14:33 -04001536<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001537## isVerticalText
1538
1539<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1540bool isVerticalText() const
1541</pre>
1542
1543If true, glyphs are drawn top to bottom instead of left to right.
1544
Cary Clark8cc16c72017-08-25 11:51:49 -04001545Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001546
1547### Return Value
1548
Cary Clark8cc16c72017-08-25 11:51:49 -04001549<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001550
1551### Example
1552
1553<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1554
1555#### Example Output
1556
1557~~~~
1558paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1559paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1560~~~~
1561
1562</fiddle-embed></div>
1563
1564---
1565
Cary Clark493df1f2017-08-25 13:14:33 -04001566<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001567## setVerticalText
1568
1569<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1570void setVerticalText(bool verticalText)
1571</pre>
1572
1573If true, text advance positions the next glyph below the previous glyph instead of to the
1574right of previous glyph.
1575
Cary Clark8cc16c72017-08-25 11:51:49 -04001576Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1577Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001578
1579### Parameters
1580
Cary Clark8cc16c72017-08-25 11:51:49 -04001581<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1582setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001583 </tr>
1584</table>
1585
1586### Example
1587
1588<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1589
1590#### Example Output
1591
1592~~~~
1593paint1 == paint2
1594~~~~
1595
1596</fiddle-embed></div>
1597
1598---
1599
1600# <a name="Fake_Bold"></a> Fake Bold
Cary Clark8cc16c72017-08-25 11:51:49 -04001601<a href="#Fake_Bold">Fake Bold</a> approximates the bold font style accompanying a normal font when a bold font face
Cary Clark4c06f5e2017-08-04 12:48:24 -04001602is not available. <a href="undocumented#Skia">Skia</a> does not provide font substitution; it is up to the client to find the
1603bold font face using the platform's <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001604
Cary Clark8cc16c72017-08-25 11:51:49 -04001605Use <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 -04001606is not available.
1607
Cary Clark4c06f5e2017-08-04 12:48:24 -04001608A <a href="undocumented#FreeType_based">FreeType-based</a> port may define <a href="undocumented#SK_USE_FREETYPE_EMBOLDEN">SK USE FREETYPE EMBOLDEN</a> at compile time to direct
Cary Clark12799e12017-07-28 15:18:29 -04001609the font engine to create the bold glyphs. Otherwise, the extra bold is computed
Cary Clark8cc16c72017-08-25 11:51:49 -04001610by 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 -04001611
Cary Clark8cc16c72017-08-25 11:51:49 -04001612<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001613
1614### Example
1615
1616<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1617
Cary Clark493df1f2017-08-25 13:14:33 -04001618<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001619## isFakeBoldText
1620
1621<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1622bool isFakeBoldText() const
1623</pre>
1624
1625If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1626from outlines.
1627
Cary Clark8cc16c72017-08-25 11:51:49 -04001628Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001629
1630### Return Value
1631
Cary Clark8cc16c72017-08-25 11:51:49 -04001632<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001633
1634### Example
1635
1636<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1637
1638#### Example Output
1639
1640~~~~
1641paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1642paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1643~~~~
1644
1645</fiddle-embed></div>
1646
1647---
1648
Cary Clark493df1f2017-08-25 13:14:33 -04001649<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001650## setFakeBoldText
1651
1652<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1653void setFakeBoldText(bool fakeBoldText)
1654</pre>
1655
1656Use increased stroke width when creating glyph bitmaps to approximate bolding.
1657
Cary Clark8cc16c72017-08-25 11:51:49 -04001658Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1659Clears <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 -04001660
1661### Parameters
1662
Cary Clark8cc16c72017-08-25 11:51:49 -04001663<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1664setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001665 </tr>
1666</table>
1667
1668### Example
1669
1670<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1671
1672#### Example Output
1673
1674~~~~
1675paint1 == paint2
1676~~~~
1677
1678</fiddle-embed></div>
1679
1680---
1681
1682# <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
Cary Clark4c06f5e2017-08-04 12:48:24 -04001683<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> adjusts the character spacing by the difference of the
Cary Clark12799e12017-07-28 15:18:29 -04001684hinted and unhinted left and right side bearings,
Cary Clark8cc16c72017-08-25 11:51:49 -04001685if <a href="#SkPaint_Hinting">Hinting</a> is set to <a href="#SkPaint_kFull_Hinting">kFull Hinting</a>. <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> only
1686applies to platforms that use <a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001687
Cary Clark4c06f5e2017-08-04 12:48:24 -04001688<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text kerning, where the space between
Cary Clark12799e12017-07-28 15:18:29 -04001689a specific pair of characters is adjusted using data in the font's kerning tables.
1690
Cary Clark493df1f2017-08-25 13:14:33 -04001691<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001692## isDevKernText
1693
1694<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1695bool isDevKernText() const
1696</pre>
1697
1698Returns if character spacing may be adjusted by the hinting difference.
1699
Cary Clark8cc16c72017-08-25 11:51:49 -04001700Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001701
1702### Return Value
1703
Cary Clark8cc16c72017-08-25 11:51:49 -04001704<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001705
1706### Example
1707
1708<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1709
1710---
1711
Cary Clark493df1f2017-08-25 13:14:33 -04001712<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001713## setDevKernText
1714
1715<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1716void setDevKernText(bool devKernText)
1717</pre>
1718
1719Requests, but does not require, to use hinting to adjust glyph spacing.
1720
Cary Clark8cc16c72017-08-25 11:51:49 -04001721Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1722Clears <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001723
1724### Parameters
1725
Cary Clark8cc16c72017-08-25 11:51:49 -04001726<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1727setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001728 </tr>
1729</table>
1730
1731### Example
1732
1733<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1734
1735#### Example Output
1736
1737~~~~
1738paint1 == paint2
1739~~~~
1740
1741</fiddle-embed></div>
1742
1743---
1744
1745# <a name="Filter_Quality_Methods"></a> Filter Quality Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04001746<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1747A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1748A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
1749If the image is unscaled, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result in a noticable
Cary Clark12799e12017-07-28 15:18:29 -04001750difference.
1751
Cary Clark8cc16c72017-08-25 11:51:49 -04001752<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 -04001753
1754<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001755 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1756 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1757 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1758 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001759</table>
1760
Cary Clark8cc16c72017-08-25 11:51:49 -04001761and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</a> specialization that uses <a href="undocumented#Image">Image</a> or <a href="undocumented#Bitmap">Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001762
Cary Clark4c06f5e2017-08-04 12:48:24 -04001763<a href="undocumented#Filter_Quality">Filter Quality</a> is <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04001764
1765### Example
1766
1767<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1768
Cary Clark493df1f2017-08-25 13:14:33 -04001769<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001770## getFilterQuality
1771
1772<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1773SkFilterQuality getFilterQuality() const
1774</pre>
1775
Cary Clark4c06f5e2017-08-04 12:48:24 -04001776Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001777draws faster; a higher setting looks better when the image is scaled.
1778
1779### Return Value
1780
Cary Clark4c06f5e2017-08-04 12:48:24 -04001781one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1782<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001783
1784### Example
1785
1786<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1787
1788#### Example Output
1789
1790~~~~
1791kNone_SkFilterQuality == paint.getFilterQuality()
1792~~~~
1793
1794</fiddle-embed></div>
1795
1796---
1797
Cary Clark493df1f2017-08-25 13:14:33 -04001798<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001799## setFilterQuality
1800
1801<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1802void setFilterQuality(SkFilterQuality quality)
1803</pre>
1804
Cary Clark4c06f5e2017-08-04 12:48:24 -04001805Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001806draws faster; a higher setting looks better when the image is scaled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001807Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001808
1809### Parameters
1810
Cary Clark8cc16c72017-08-25 11:51:49 -04001811<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04001812one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1813<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001814 </tr>
1815</table>
1816
1817### Example
1818
1819<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1820
1821#### Example Output
1822
1823~~~~
1824kHigh_SkFilterQuality == paint.getFilterQuality()
1825~~~~
1826
1827</fiddle-embed></div>
1828
1829### See Also
1830
Cary Clark4c06f5e2017-08-04 12:48:24 -04001831<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001832
1833---
1834
1835# <a name="Color_Methods"></a> Color Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04001836<a href="undocumented#Color">Color</a> specifies the <a href="#RGB_Red">Color RGB Red</a>, <a href="#RGB_Blue">Color RGB Blue</a>, <a href="#RGB_Green">Color RGB Green</a>, and <a href="#Alpha">Color Alpha</a> values used to draw a filled
Cary Clark12799e12017-07-28 15:18:29 -04001837or stroked shape in a
183832-bit value. Each component occupies 8-bits, ranging from zero: no contribution;
1839to 255: full intensity. All values in any combination are valid.
1840
Cary Clark4c06f5e2017-08-04 12:48:24 -04001841<a href="undocumented#Color">Color</a> is not premultiplied;
Cary Clark8cc16c72017-08-25 11:51:49 -04001842<a href="#Alpha">Color Alpha</a> sets the transparency independent of <a href="#RGB">Color RGB</a>: <a href="#RGB_Red">Color RGB Red</a>, <a href="#RGB_Blue">Color RGB Blue</a>, and <a href="#RGB_Green">Color RGB Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001843
Cary Clark8cc16c72017-08-25 11:51:49 -04001844The bit positions of <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a> are independent of the bit positions
Cary Clark12799e12017-07-28 15:18:29 -04001845on the output device, which may have more or fewer bits, and may have a different arrangement.
1846
Cary Clark8cc16c72017-08-25 11:51:49 -04001847| bit positions | <a href="#Alpha">Color Alpha</a> | <a href="#RGB_Red">Color RGB Red</a> | <a href="#RGB_Blue">Color RGB Blue</a> | <a href="#RGB_Green">Color RGB Green</a> |
Cary Clark12799e12017-07-28 15:18:29 -04001848| --- | --- | --- | --- | --- |
1849| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1850
1851### Example
1852
1853<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1854
Cary Clark493df1f2017-08-25 13:14:33 -04001855<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001856## getColor
1857
1858<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1859SkColor getColor() const
1860</pre>
1861
Cary Clark8cc16c72017-08-25 11:51:49 -04001862Retrieves <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, unpremultiplied, packed into 32 bits.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001863Use helpers <a href="undocumented#SkColorGetA">SkColorGetA</a>, <a href="undocumented#SkColorGetR">SkColorGetR</a>, <a href="undocumented#SkColorGetG">SkColorGetG</a>, and <a href="undocumented#SkColorGetB">SkColorGetB</a> to extract
Cary Clark12799e12017-07-28 15:18:29 -04001864a color component.
1865
1866### Return Value
1867
Cary Clark8cc16c72017-08-25 11:51:49 -04001868<a href="undocumented#Unpremultiplied">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001869
1870### Example
1871
1872<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1873
1874#### Example Output
1875
1876~~~~
1877Yellow is 100% red, 100% green, and 0% blue.
1878~~~~
1879
1880</fiddle-embed></div>
1881
1882### See Also
1883
Cary Clark4c06f5e2017-08-04 12:48:24 -04001884<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001885
1886---
1887
Cary Clark493df1f2017-08-25 13:14:33 -04001888<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001889## setColor
1890
1891<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1892void setColor(SkColor color)
1893</pre>
1894
Cary Clark8cc16c72017-08-25 11:51:49 -04001895Sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a> used when stroking and filling. The <a href="#SkPaint_setColor_color">color</a> is a 32-bit value,
1896unpremutiplied, packing 8-bit components for <a href="#Alpha">Color Alpha</a>, <a href="#RGB_Red">Color RGB Red</a>, <a href="#RGB_Blue">Color RGB Blue</a>, and <a href="#RGB_Green">Color RGB Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001897
1898### Parameters
1899
Cary Clark8cc16c72017-08-25 11:51:49 -04001900<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
1901<a href="undocumented#Unpremultiplied">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001902 </tr>
1903</table>
1904
1905### Example
1906
1907<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1908
1909#### Example Output
1910
1911~~~~
1912green1 == green2
1913~~~~
1914
1915</fiddle-embed></div>
1916
1917### See Also
1918
Cary Clark8cc16c72017-08-25 11:51:49 -04001919<a href="undocumented#SkColor">SkColor</a> <a href="#SkPaint_setARGB">setARGB</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001920
1921---
1922
1923## <a name="Alpha_Methods"></a> Alpha Methods
1924
Cary Clark8cc16c72017-08-25 11:51:49 -04001925<a href="#Alpha">Color Alpha</a> sets the transparency independent of <a href="#RGB">Color RGB</a>: <a href="#RGB_Red">Color RGB Red</a>, <a href="#RGB_Blue">Color RGB Blue</a>, and <a href="#RGB_Green">Color RGB Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001926
Cary Clark493df1f2017-08-25 13:14:33 -04001927<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001928## getAlpha
1929
1930<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1931uint8_t getAlpha() const
1932</pre>
1933
Cary Clark8cc16c72017-08-25 11:51:49 -04001934Retrieves <a href="#Alpha">Color Alpha</a> from the <a href="undocumented#Color">Color</a> used when stroking and filling.
Cary Clark12799e12017-07-28 15:18:29 -04001935
1936### Return Value
1937
Cary Clark8cc16c72017-08-25 11:51:49 -04001938<a href="#Alpha">Color Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001939
1940### Example
1941
1942<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1943
1944#### Example Output
1945
1946~~~~
1947255 == paint.getAlpha()
1948~~~~
1949
1950</fiddle-embed></div>
1951
1952---
1953
Cary Clark493df1f2017-08-25 13:14:33 -04001954<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001955## setAlpha
1956
1957<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1958void setAlpha(U8CPU a)
1959</pre>
1960
Cary Clark8cc16c72017-08-25 11:51:49 -04001961Replaces <a href="#Alpha">Color Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001962unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001963build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1964<a href="#SkPaint_setAlpha_a">a</a> set to zero makes <a href="undocumented#Color">Color</a> fully transparent; <a href="#SkPaint_setAlpha_a">a</a> set to 255 makes <a href="undocumented#Color">Color</a>
Cary Clark12799e12017-07-28 15:18:29 -04001965fully opaque.
1966
1967### Parameters
1968
Cary Clark8cc16c72017-08-25 11:51:49 -04001969<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
1970<a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001971 </tr>
1972</table>
1973
1974### Example
1975
1976<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1977
1978#### Example Output
1979
1980~~~~
19810x44112233 == paint.getColor()
1982~~~~
1983
1984</fiddle-embed></div>
1985
1986---
1987
Cary Clark493df1f2017-08-25 13:14:33 -04001988<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001989## setARGB
1990
1991<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1992void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
1993</pre>
1994
Cary Clark4c06f5e2017-08-04 12:48:24 -04001995Sets <a href="undocumented#Color">Color</a> used when drawing solid fills. The color components range from 0 to 255.
Cary Clark12799e12017-07-28 15:18:29 -04001996The color is unpremultiplied;
Cary Clark8cc16c72017-08-25 11:51:49 -04001997<a href="#Alpha">Color Alpha</a> sets the transparency independent of <a href="#RGB">Color RGB</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001998
1999### Parameters
2000
Cary Clark8cc16c72017-08-25 11:51:49 -04002001<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2002amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2003 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2004amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2005 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2006amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2007 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2008amount of <a href="#RGB_Blue">Color RGB Blue</a>, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002009 </tr>
2010</table>
2011
2012### Example
2013
2014<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2015
2016#### Example Output
2017
2018~~~~
2019transRed1 == transRed2
2020~~~~
2021
2022</fiddle-embed></div>
2023
2024### See Also
2025
Cary Clark8cc16c72017-08-25 11:51:49 -04002026<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002027
2028---
2029
2030# <a name="Style"></a> Style
Cary Clark8cc16c72017-08-25 11:51:49 -04002031<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2032Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002033
Cary Clark8cc16c72017-08-25 11:51:49 -04002034Set <a href="#Style">Style</a> to <a href="#SkPaint_kFill_Style">kFill Style</a> to fill the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002035The fill covers the area inside the geometry for most shapes.
2036
Cary Clark8cc16c72017-08-25 11:51:49 -04002037Set <a href="#Style">Style</a> to <a href="#SkPaint_kStroke_Style">kStroke Style</a> to stroke the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002038
2039## <a name="Fill"></a> Fill
2040
2041### See Also
2042
Cary Clark8cc16c72017-08-25 11:51:49 -04002043<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002044
2045## <a name="Stroke"></a> Stroke
2046
2047The stroke covers the area described by following the shape's edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002048<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>.
2049The area covered where the shape turns a corner is described by <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002050The stroke is centered on the shape; it extends equally on either side of the shape's edge.
2051
Cary Clark8cc16c72017-08-25 11:51:49 -04002052As <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
2053may have gaps, and if <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, <a href="#Alpha">Color Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04002054
2055## <a name="Hairline"></a> Hairline
2056
Cary Clark8cc16c72017-08-25 11:51:49 -04002057<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Hairline">Hairline</a>.
2058<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
Cary Clark12799e12017-07-28 15:18:29 -04002059flow horizontally, vertically,or diagonally.
2060
Cary Clark8cc16c72017-08-25 11:51:49 -04002061<a href="SkPath_Reference#Path">Path</a> drawing with <a href="#Hairline">Hairline</a> may hit the same pixel more than once. For instance, <a href="SkPath_Reference#Path">Path</a> containing
2062two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2063pixel. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clark4c06f5e2017-08-04 12:48:24 -04002064<a href="undocumented#GPU_backed">GPU-backed</a> implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002065while stroking.
2066
Cary Clark8cc16c72017-08-25 11:51:49 -04002067## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002068
2069<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002070enum <a href="#SkPaint_Style">Style</a> {
2071<a href="#SkPaint_kFill_Style">kFill Style</a>,
2072<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2073<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002074};</pre>
2075
Cary Clark8cc16c72017-08-25 11:51:49 -04002076Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002077The stroke and fill
2078share all paint attributes; for instance, they are drawn with the same color.
2079
Cary Clark8cc16c72017-08-25 11:51:49 -04002080Use <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 -04002081a fill draw.
2082
2083### Constants
2084
2085<table>
2086 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002087 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002088Applies to <a href="undocumented#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="undocumented#Circle">Circle</a>, <a href="undocumented#Oval">Oval</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
2089<a href="undocumented#Bitmap">Bitmap</a>, <a href="undocumented#Image">Image</a>, <a href="undocumented#Patch">Patch</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Sprite">Sprite</a>, and <a href="undocumented#Vertices">Vertices</a> are painted as if
Cary Clark8cc16c72017-08-25 11:51:49 -04002090<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2091The <a href="#Fill_Type">Path Fill Type</a> specifies additional rules to fill the area outside the path edge,
Cary Clark12799e12017-07-28 15:18:29 -04002092and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002093<a href="#SkPaint_Style">Style</a> is set to <a href="#SkPaint_kFill_Style">kFill Style</a> by default.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002094 </tr>
2095 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002096 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002097Applies to <a href="undocumented#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="undocumented#Arc">Arc</a>, <a href="undocumented#Circle">Circle</a>, <a href="undocumented#Oval">Oval</a>,
2098<a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002099<a href="undocumented#Arc">Arc</a>, <a href="undocumented#Line">Line</a>, <a href="undocumented#Point">Point</a>, and <a href="#Array">Point Array</a> are always drawn as if <a href="#SkPaint_kStroke_Style">kStroke Style</a> is set,
2100and ignore the set <a href="#SkPaint_Style">Style</a>.
2101The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002102 </tr>
2103 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002104 <td><a name="SkPaint_kStrokeAndFill_Style"> <code><strong>SkPaint::kStrokeAndFill_Style </strong></code> </a></td><td>2</td><td>Set to stroke and fill geometry.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002105Applies to <a href="undocumented#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="undocumented#Circle">Circle</a>, <a href="undocumented#Oval">Oval</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002106<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2107and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002108 </tr>
2109
2110</table>
2111
Cary Clark8cc16c72017-08-25 11:51:49 -04002112## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002113
2114<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
2115enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002116<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002117};</pre>
2118
2119### Constants
2120
2121<table>
2122 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002123 <td><a name="SkPaint_kStyleCount"> <code><strong>SkPaint::kStyleCount </strong></code> </a></td><td>3</td><td>The number of different <a href="#SkPaint_Style">Style</a> values defined.
2124May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002125 </tr>
2126
2127</table>
2128
Cary Clark493df1f2017-08-25 13:14:33 -04002129<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002130## getStyle
2131
2132<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2133Style getStyle() const
2134</pre>
2135
2136Whether the geometry is filled, stroked, or filled and stroked.
2137
2138### Return Value
2139
Cary Clark8cc16c72017-08-25 11:51:49 -04002140one 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 -04002141
2142### Example
2143
2144<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2145
2146#### Example Output
2147
2148~~~~
2149SkPaint::kFill_Style == paint.getStyle()
2150~~~~
2151
2152</fiddle-embed></div>
2153
2154### See Also
2155
Cary Clark8cc16c72017-08-25 11:51:49 -04002156<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002157
2158---
2159
Cary Clark493df1f2017-08-25 13:14:33 -04002160<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002161## setStyle
2162
2163<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2164void setStyle(Style style)
2165</pre>
2166
2167Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002168Has 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 -04002169
2170### Parameters
2171
Cary Clark8cc16c72017-08-25 11:51:49 -04002172<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2173one 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 -04002174 </tr>
2175</table>
2176
2177### Example
2178
2179<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2180
2181### See Also
2182
Cary Clark8cc16c72017-08-25 11:51:49 -04002183<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002184
2185---
2186
2187### See Also
2188
Cary Clark8cc16c72017-08-25 11:51:49 -04002189<a href="#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 -04002190
2191# <a name="Stroke_Width"></a> Stroke Width
Cary Clark8cc16c72017-08-25 11:51:49 -04002192<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark12799e12017-07-28 15:18:29 -04002193of the stroke perpendicular to the path's direction when the paint's style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002194set 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 -04002195
2196When width is greater than zero, the stroke encompasses as many pixels partially
2197or fully as needed. When the width equals zero, the paint enables hairlines;
2198the stroke is always one pixel wide.
2199
Cary Clark8cc16c72017-08-25 11:51:49 -04002200The stroke's dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002201remains one pixel wide regardless of scaling.
2202
2203The default width for the paint is zero.
2204
2205### Example
2206
2207<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756">raster gpu<div>The pixels hit to represent thin lines vary with the angle of the
2208line and the platform's implementation.</div></fiddle-embed></div>
2209
Cary Clark493df1f2017-08-25 13:14:33 -04002210<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002211## getStrokeWidth
2212
2213<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2214SkScalar getStrokeWidth() const
2215</pre>
2216
Cary Clark8cc16c72017-08-25 11:51:49 -04002217Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002218outline the shape.
2219
2220### Return Value
2221
Cary Clark8cc16c72017-08-25 11:51:49 -04002222zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002223
2224### Example
2225
2226<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2227
2228#### Example Output
2229
2230~~~~
22310 == paint.getStrokeWidth()
2232~~~~
2233
2234</fiddle-embed></div>
2235
2236---
2237
Cary Clark493df1f2017-08-25 13:14:33 -04002238<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002239## setStrokeWidth
2240
2241<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2242void setStrokeWidth(SkScalar width)
2243</pre>
2244
2245Sets the thickness of the pen used by the paint to
2246outline the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002247Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002248
2249### Parameters
2250
Cary Clark8cc16c72017-08-25 11:51:49 -04002251<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2252zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002253 </tr>
2254</table>
2255
2256### Example
2257
2258<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2259
2260#### Example Output
2261
2262~~~~
22635 == paint.getStrokeWidth()
2264~~~~
2265
2266</fiddle-embed></div>
2267
2268---
2269
2270# <a name="Miter_Limit"></a> Miter Limit
Cary Clark8cc16c72017-08-25 11:51:49 -04002271<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002272relative to the stroke width.
2273
Cary Clark8cc16c72017-08-25 11:51:49 -04002274<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2275is 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>
2276or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002277
Cary Clark8cc16c72017-08-25 11:51:49 -04002278If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2279is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002280
Cary Clark8cc16c72017-08-25 11:51:49 -04002281<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002282
Cary Clark8cc16c72017-08-25 11:51:49 -04002283miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002284The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
2285in <a href="undocumented#SkUserConfig.h">SkUserConfig.h</a> or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002286
2287Here are some miter limits and the angles that triggers them.
2288
2289| miter limit | angle in degrees |
2290| --- | --- |
2291| 10 | 11.48 |
2292| 9 | 12.76 |
2293| 8 | 14.36 |
2294| 7 | 16.43 |
2295| 6 | 19.19 |
2296| 5 | 23.07 |
2297| 4 | 28.96 |
2298| 3 | 38.94 |
2299| 2 | 60 |
2300| 1 | 180 |
2301
2302### Example
2303
2304<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2305When the miter limit is decreased slightly, the miter join is replaced
2306by a bevel join.</div></fiddle-embed></div>
2307
Cary Clark493df1f2017-08-25 13:14:33 -04002308<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002309## getStrokeMiter
2310
2311<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2312SkScalar getStrokeMiter() const
2313</pre>
2314
2315The limit at which a sharp corner is drawn beveled.
2316
2317### Return Value
2318
Cary Clark8cc16c72017-08-25 11:51:49 -04002319zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002320
2321### Example
2322
2323<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2324
2325#### Example Output
2326
2327~~~~
2328default miter limit == 4
2329~~~~
2330
2331</fiddle-embed></div>
2332
2333### See Also
2334
Cary Clark8cc16c72017-08-25 11:51:49 -04002335<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 -04002336
2337---
2338
Cary Clark493df1f2017-08-25 13:14:33 -04002339<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002340## setStrokeMiter
2341
2342<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2343void setStrokeMiter(SkScalar miter)
2344</pre>
2345
2346The limit at which a sharp corner is drawn beveled.
2347Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002348Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002349
2350### Parameters
2351
Cary Clark8cc16c72017-08-25 11:51:49 -04002352<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2353zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002354 </tr>
2355</table>
2356
2357### Example
2358
2359<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2360
2361#### Example Output
2362
2363~~~~
2364default miter limit == 8
2365~~~~
2366
2367</fiddle-embed></div>
2368
2369### See Also
2370
Cary Clark8cc16c72017-08-25 11:51:49 -04002371<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 -04002372
2373---
2374
2375# <a name="Stroke_Cap"></a> Stroke Cap
2376
Cary Clark8cc16c72017-08-25 11:51:49 -04002377## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002378
2379<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002380enum <a href="#SkPaint_Cap">Cap</a> {
2381<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2382<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2383<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002384
Cary Clark8cc16c72017-08-25 11:51:49 -04002385<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2386<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002387};
Cary Clark8cc16c72017-08-25 11:51:49 -04002388static constexpr int <a href="#SkPaint_kCapCount">kCapCount</a> = <a href="#SkPaint_kLast_Cap">kLast Cap</a> + 1;</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002389
Cary Clark8cc16c72017-08-25 11:51:49 -04002390<a href="#Stroke_Cap">Stroke Cap</a> draws at the beginning and end of an open <a href="#Contour">Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002391
2392### Constants
2393
2394<table>
2395 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002396 <td><a name="SkPaint_kButt_Cap"> <code><strong>SkPaint::kButt_Cap </strong></code> </a></td><td>0</td><td>Does not extend the stroke past the beginning or the end.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002397 </tr>
2398 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002399 <td><a name="SkPaint_kRound_Cap"> <code><strong>SkPaint::kRound_Cap </strong></code> </a></td><td>1</td><td>Adds a circle with a diameter equal to <a href="#Stroke_Width">Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002400and end.</td>
2401 </tr>
2402 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002403 <td><a name="SkPaint_kSquare_Cap"> <code><strong>SkPaint::kSquare_Cap </strong></code> </a></td><td>2</td><td>Adds a square with sides equal to <a href="#Stroke_Width">Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002404and end. The square sides are parallel to the initial and final direction
2405of the stroke.</td>
2406 </tr>
2407 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002408 <td><a name="SkPaint_kLast_Cap"> <code><strong>SkPaint::kLast_Cap </strong></code> </a></td><td>2</td><td>Equivalent to the largest value for <a href="#Stroke_Cap">Stroke Cap</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002409 </tr>
2410 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002411 <td><a name="SkPaint_kDefault_Cap"> <code><strong>SkPaint::kDefault_Cap </strong></code> </a></td><td>0</td><td>Equivalent to <a href="#SkPaint_kButt_Cap">kButt Cap</a>.
2412<a href="#Stroke_Cap">Stroke Cap</a> is set to <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002413 </tr>
2414 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002415 <td><a name="SkPaint_kCapCount"> <code><strong>SkPaint::kCapCount </strong></code> </a></td><td>3</td><td>The number of different <a href="#Stroke_Cap">Stroke Cap</a> values defined.
2416May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002417 </tr>
2418
Cary Clark8cc16c72017-08-25 11:51:49 -04002419Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
2420follows the <a href="#Contour">Path Contour</a>, moving parallel to the contours's direction.
Cary Clark12799e12017-07-28 15:18:29 -04002421
Cary Clark8cc16c72017-08-25 11:51:49 -04002422If the <a href="#Contour">Path Contour</a> is not terminated by <a href="#SkPath_kClose_Verb">SkPath::kClose Verb</a>, the contour has a
Cary Clark12799e12017-07-28 15:18:29 -04002423visible beginning and end.
2424
Cary Clark8cc16c72017-08-25 11:51:49 -04002425<a href="#Contour">Path Contour</a> may start and end at the same point; defining <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002426
Cary Clark8cc16c72017-08-25 11:51:49 -04002427<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> is not drawn.
2428<a href="#SkPaint_kRound_Cap">kRound Cap</a> and <a href="SkPath_Reference#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 -04002429at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002430<a href="#SkPaint_kSquare_Cap">kSquare Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> draws an upright square with a side of
2431<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002432
Cary Clark8cc16c72017-08-25 11:51:49 -04002433<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 -04002434
2435</table>
2436
2437### Example
2438
2439<div><fiddle-embed name="3d92b449b298b4ce4004cfca6b91cee7"></fiddle-embed></div>
2440
Cary Clark493df1f2017-08-25 13:14:33 -04002441<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002442## getStrokeCap
2443
2444<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2445Cap getStrokeCap() const
2446</pre>
2447
2448The geometry drawn at the beginning and end of strokes.
2449
2450### Return Value
2451
Cary Clark8cc16c72017-08-25 11:51:49 -04002452one 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 -04002453
2454### Example
2455
2456<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2457
2458#### Example Output
2459
2460~~~~
2461kButt_Cap == default stroke cap
2462~~~~
2463
2464</fiddle-embed></div>
2465
2466### See Also
2467
Cary Clark8cc16c72017-08-25 11:51:49 -04002468<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002469
2470---
2471
Cary Clark493df1f2017-08-25 13:14:33 -04002472<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002473## setStrokeCap
2474
2475<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2476void setStrokeCap(Cap cap)
2477</pre>
2478
2479The geometry drawn at the beginning and end of strokes.
2480
2481### Parameters
2482
Cary Clark8cc16c72017-08-25 11:51:49 -04002483<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2484one 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>;
2485has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002486 </tr>
2487</table>
2488
2489### Example
2490
2491<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2492
2493#### Example Output
2494
2495~~~~
2496kRound_Cap == paint.getStrokeCap()
2497~~~~
2498
2499</fiddle-embed></div>
2500
2501### See Also
2502
Cary Clark8cc16c72017-08-25 11:51:49 -04002503<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002504
2505---
2506
2507# <a name="Stroke_Join"></a> Stroke Join
Cary Clark8cc16c72017-08-25 11:51:49 -04002508<a href="#Stroke_Join">Stroke Join</a> draws at the sharp corners of an open or closed <a href="#Contour">Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002509
Cary Clark8cc16c72017-08-25 11:51:49 -04002510Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
2511follows the <a href="#Contour">Path Contour</a>, moving parallel to the contours's direction.
Cary Clark12799e12017-07-28 15:18:29 -04002512
2513If the contour direction changes abruptly, because the tangent direction leading
2514to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002515the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002516
2517### Example
2518
2519<div><fiddle-embed name="4a4e41ed89a57d47eab5d1600c33b0e8"></fiddle-embed></div>
2520
Cary Clark8cc16c72017-08-25 11:51:49 -04002521## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002522
2523<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002524enum <a href="#SkPaint_Join">Join</a> {
2525<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2526<a href="#SkPaint_kRound_Join">kRound Join</a>,
2527<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002528
Cary Clark8cc16c72017-08-25 11:51:49 -04002529<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2530<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002531};
Cary Clark8cc16c72017-08-25 11:51:49 -04002532static constexpr int <a href="#SkPaint_kJoinCount">kJoinCount</a> = <a href="#SkPaint_kLast_Join">kLast Join</a> + 1;</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002533
Cary Clark8cc16c72017-08-25 11:51:49 -04002534<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 -04002535affects the four corners of a stroked rectangle, and the connected segments in a
2536stroked path.
2537
2538Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2539radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2540connect the thick strokes.
2541
2542The fill path constructed to describe the stroked path respects the join setting but may
2543not contain the actual join. For instance, a fill path constructed with round joins does
2544not necessarily include circles at each connected segment.
2545
2546### Constants
2547
2548<table>
2549 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002550 <td><a name="SkPaint_kMiter_Join"> <code><strong>SkPaint::kMiter_Join </strong></code> </a></td><td>0</td><td>Extends the outside corner to the extent allowed by <a href="#Miter_Limit">Miter Limit</a>.
2551If the extension exceeds <a href="#Miter_Limit">Miter Limit</a>, <a href="#SkPaint_kBevel_Join">kBevel Join</a> is used instead.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002552 </tr>
2553 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002554 <td><a name="SkPaint_kRound_Join"> <code><strong>SkPaint::kRound_Join </strong></code> </a></td><td>1</td><td>Adds a circle with a diameter of <a href="#Stroke_Width">Stroke Width</a> at the sharp corner.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002555 </tr>
2556 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002557 <td><a name="SkPaint_kBevel_Join"> <code><strong>SkPaint::kBevel_Join </strong></code> </a></td><td>2</td><td>Connects the outside edges of the sharp corner.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002558 </tr>
2559 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002560 <td><a name="SkPaint_kLast_Join"> <code><strong>SkPaint::kLast_Join </strong></code> </a></td><td>2</td><td>Equivalent to the largest value for <a href="#Stroke_Join">Stroke Join</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002561 </tr>
2562 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002563 <td><a name="SkPaint_kDefault_Join"> <code><strong>SkPaint::kDefault_Join </strong></code> </a></td><td>1</td><td>Equivalent to <a href="#SkPaint_kMiter_Join">kMiter Join</a>.
2564<a href="#Stroke_Join">Stroke Join</a> is set to <a href="#SkPaint_kMiter_Join">kMiter Join</a> by default.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002565 </tr>
2566 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002567 <td><a name="SkPaint_kJoinCount"> <code><strong>SkPaint::kJoinCount </strong></code> </a></td><td>3</td><td>The number of different <a href="#Stroke_Join">Stroke Join</a> values defined.
2568May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002569 </tr>
2570</table>
2571
2572### Example
2573
2574<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2575
2576### See Also
2577
Cary Clark8cc16c72017-08-25 11:51:49 -04002578<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 -04002579
2580
2581
Cary Clark493df1f2017-08-25 13:14:33 -04002582<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002583## getStrokeJoin
2584
2585<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2586Join getStrokeJoin() const
2587</pre>
2588
2589The geometry drawn at the corners of strokes.
2590
2591### Return Value
2592
Cary Clark8cc16c72017-08-25 11:51:49 -04002593one 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 -04002594
2595### Example
2596
2597<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2598
2599#### Example Output
2600
2601~~~~
2602kMiter_Join == default stroke join
2603~~~~
2604
2605</fiddle-embed></div>
2606
2607### See Also
2608
Cary Clark8cc16c72017-08-25 11:51:49 -04002609<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002610
2611---
2612
Cary Clark493df1f2017-08-25 13:14:33 -04002613<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002614## setStrokeJoin
2615
2616<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2617void setStrokeJoin(Join join)
2618</pre>
2619
2620The geometry drawn at the corners of strokes.
2621
2622### Parameters
2623
Cary Clark8cc16c72017-08-25 11:51:49 -04002624<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2625one 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 -04002626otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002627 </tr>
2628</table>
2629
2630### Example
2631
2632<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2633
2634#### Example Output
2635
2636~~~~
2637kMiter_Join == paint.getStrokeJoin()
2638~~~~
2639
2640</fiddle-embed></div>
2641
2642### See Also
2643
Cary Clark8cc16c72017-08-25 11:51:49 -04002644<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002645
2646---
2647
2648### See Also
2649
Cary Clark8cc16c72017-08-25 11:51:49 -04002650<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002651
2652# <a name="Fill_Path"></a> Fill Path
Cary Clark8cc16c72017-08-25 11:51:49 -04002653<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 -04002654
Cary Clark8cc16c72017-08-25 11:51:49 -04002655If <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
Cary Clark4c06f5e2017-08-04 12:48:24 -04002656replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2657destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002658
Cary Clark4c06f5e2017-08-04 12:48:24 -04002659Fill <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
2660the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002661
Cary Clark8cc16c72017-08-25 11:51:49 -04002662If <a href="#SkPaint_Style">Style</a> is <a href="#SkPaint_kStroke_Style">kStroke Style</a> or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
2663and <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>,
2664and <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 -04002665
Cary Clark8cc16c72017-08-25 11:51:49 -04002666Fill <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 -04002667
Cary Clark8cc16c72017-08-25 11:51:49 -04002668If 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>
2669returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002670
Cary Clark493df1f2017-08-25 13:14:33 -04002671<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002672## getFillPath
2673
2674<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2675bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect,
2676 SkScalar resScale = 1) const
2677</pre>
2678
2679The filled equivalent of the stroked path.
2680
2681### Parameters
2682
Cary Clark8cc16c72017-08-25 11:51:49 -04002683<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002684<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002685 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2686resulting <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>
2687 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002688optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002689 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002690if > 1, increase precision, else if (0 < res < 1) reduce precision
2691to favor speed and size</td>
2692 </tr>
2693</table>
2694
2695### Return Value
2696
Cary Clark8cc16c72017-08-25 11:51:49 -04002697true if the path represents <a href="#Style_Fill">Style Fill</a>, or false if it represents <a href="#Hairline">Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002698
2699### Example
2700
2701<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small quad stroke is turned into a filled path with increasing levels of precision.
2702At the lowest precision, the quad stroke is approximated by a rectangle.
2703At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2704
2705---
2706
2707<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2708bool getFillPath(const SkPath& src, SkPath* dst) const
2709</pre>
2710
2711The filled equivalent of the stroked path.
2712
Cary Clark8cc16c72017-08-25 11:51:49 -04002713Replaces <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>.
2714<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 -04002715
2716### Parameters
2717
Cary Clark8cc16c72017-08-25 11:51:49 -04002718<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002719<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002720 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2721resulting <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 -04002722 </tr>
2723</table>
2724
2725### Return Value
2726
Cary Clark8cc16c72017-08-25 11:51:49 -04002727true if the path represents <a href="#Style_Fill">Style Fill</a>, or false if it represents <a href="#Hairline">Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002728
2729### Example
2730
2731<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2732
2733---
2734
2735### See Also
2736
Cary Clark8cc16c72017-08-25 11:51:49 -04002737<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 -04002738
2739# <a name="Shader_Methods"></a> Shader Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002740<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2741<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark8cc16c72017-08-25 11:51:49 -04002742If <a href="#Paint">Paint</a> has no <a href="undocumented#Shader">Shader</a>, then <a href="undocumented#Color">Color</a> fills the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002743
Cary Clark8cc16c72017-08-25 11:51:49 -04002744<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2745If <a href="undocumented#Shader">Shader</a> object defines only <a href="#Alpha">Color Alpha</a>, then <a href="undocumented#Color">Color</a> modulated by <a href="#Alpha">Color Alpha</a> describes
Cary Clark12799e12017-07-28 15:18:29 -04002746the fill.
2747
Cary Clark8cc16c72017-08-25 11:51:49 -04002748The drawn transparency can be modified without altering <a href="undocumented#Shader">Shader</a>, by changing <a href="#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002749
2750### Example
2751
2752<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2753
Cary Clark8cc16c72017-08-25 11:51:49 -04002754If <a href="undocumented#Shader">Shader</a> generates only <a href="#Alpha">Color Alpha</a> then all components of <a href="undocumented#Color">Color</a> modulate the output.
Cary Clark12799e12017-07-28 15:18:29 -04002755
2756### Example
2757
2758<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2759
Cary Clark493df1f2017-08-25 13:14:33 -04002760<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002761## getShader
2762
2763<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2764SkShader* getShader() const
2765</pre>
2766
2767Optional colors used when filling a path, such as a gradient.
2768
Cary Clark4c06f5e2017-08-04 12:48:24 -04002769Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002770
2771### Return Value
2772
Cary Clark4c06f5e2017-08-04 12:48:24 -04002773<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002774
2775### Example
2776
2777<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2778
2779#### Example Output
2780
2781~~~~
2782nullptr == shader
2783nullptr != shader
2784~~~~
2785
2786</fiddle-embed></div>
2787
2788---
2789
Cary Clark493df1f2017-08-25 13:14:33 -04002790<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002791## refShader
2792
2793<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2794sk_sp<SkShader> refShader() const
2795</pre>
2796
2797Optional colors used when filling a path, such as a gradient.
2798
Cary Clark4c06f5e2017-08-04 12:48:24 -04002799Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002800
2801### Return Value
2802
Cary Clark4c06f5e2017-08-04 12:48:24 -04002803<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002804
2805### Example
2806
2807<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2808
2809#### Example Output
2810
2811~~~~
2812shader unique: true
2813shader unique: false
2814~~~~
2815
2816</fiddle-embed></div>
2817
2818---
2819
Cary Clark493df1f2017-08-25 13:14:33 -04002820<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002821## setShader
2822
2823<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2824void setShader(sk_sp<SkShader> shader)
2825</pre>
2826
2827Optional colors used when filling a path, such as a gradient.
2828
Cary Clark8cc16c72017-08-25 11:51:49 -04002829Sets <a href="undocumented#Shader">Shader</a> to <a href="#SkPaint_setShader_shader">shader</a>, decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Shader">Shader</a>.
2830Does not alter <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002831
2832### Parameters
2833
Cary Clark8cc16c72017-08-25 11:51:49 -04002834<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002835how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002836 </tr>
2837</table>
2838
2839### Example
2840
2841<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2842
2843---
2844
2845# <a name="Color_Filter_Methods"></a> Color Filter Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002846<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2847<a href="undocumented#Color_Filter">Color Filter</a> may apply <a href="undocumented#Blend_Mode">Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
Cary Clark8cc16c72017-08-25 11:51:49 -04002848If <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 -04002849
Cary Clark8cc16c72017-08-25 11:51:49 -04002850The drawn transparency can be modified without altering <a href="undocumented#Color_Filter">Color Filter</a>, by changing <a href="#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002851
2852### Example
2853
2854<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2855
Cary Clark493df1f2017-08-25 13:14:33 -04002856<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002857## getColorFilter
2858
2859<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2860SkColorFilter* getColorFilter() const
2861</pre>
2862
Cary Clark4c06f5e2017-08-04 12:48:24 -04002863Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2864Does 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 -04002865
2866### Return Value
2867
Cary Clark4c06f5e2017-08-04 12:48:24 -04002868<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002869
2870### Example
2871
2872<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2873
2874#### Example Output
2875
2876~~~~
2877nullptr == color filter
2878nullptr != color filter
2879~~~~
2880
2881</fiddle-embed></div>
2882
2883---
2884
Cary Clark493df1f2017-08-25 13:14:33 -04002885<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002886## refColorFilter
2887
2888<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2889sk_sp<SkColorFilter> refColorFilter() const
2890</pre>
2891
Cary Clark4c06f5e2017-08-04 12:48:24 -04002892Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2893Increases <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 -04002894
2895### Return Value
2896
Cary Clark4c06f5e2017-08-04 12:48:24 -04002897<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002898
2899### Example
2900
2901<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2902
2903#### Example Output
2904
2905~~~~
2906color filter unique: true
2907color filter unique: false
2908~~~~
2909
2910</fiddle-embed></div>
2911
2912---
2913
Cary Clark493df1f2017-08-25 13:14:33 -04002914<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002915## setColorFilter
2916
2917<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2918void setColorFilter(sk_sp<SkColorFilter> colorFilter)
2919</pre>
2920
Cary Clark4c06f5e2017-08-04 12:48:24 -04002921Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Color_Filter">Color Filter</a>.
2922Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2923Does not alter filter <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002924
2925### Parameters
2926
Cary Clark8cc16c72017-08-25 11:51:49 -04002927<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002928<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002929 </tr>
2930</table>
2931
2932### Example
2933
2934<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2935
2936---
2937
2938# <a name="Blend_Mode_Methods"></a> Blend Mode Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002939<a href="undocumented#Blend_Mode">Blend Mode</a> describes how <a href="undocumented#Color">Color</a> combines with the destination color.
Cary Clark8cc16c72017-08-25 11:51:49 -04002940The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002941over the destination color.
2942
2943### Example
2944
2945<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2946
2947### See Also
2948
Cary Clark4c06f5e2017-08-04 12:48:24 -04002949<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002950
Cary Clark493df1f2017-08-25 13:14:33 -04002951<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002952## getBlendMode
2953
2954<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2955SkBlendMode getBlendMode() const
2956</pre>
2957
Cary Clark4c06f5e2017-08-04 12:48:24 -04002958Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002959By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002960
2961### Return Value
2962
2963mode used to combine source color with destination color
2964
2965### Example
2966
2967<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2968
2969#### Example Output
2970
2971~~~~
2972kSrcOver == getBlendMode
2973kSrcOver != getBlendMode
2974~~~~
2975
2976</fiddle-embed></div>
2977
2978---
2979
Cary Clark493df1f2017-08-25 13:14:33 -04002980<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002981## isSrcOver
2982
2983<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2984bool isSrcOver() const
2985</pre>
2986
Cary Clark8cc16c72017-08-25 11:51:49 -04002987Returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04002988
2989### Return Value
2990
Cary Clark8cc16c72017-08-25 11:51:49 -04002991true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04002992
2993### Example
2994
2995<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2996
2997#### Example Output
2998
2999~~~~
3000isSrcOver == true
3001isSrcOver != true
3002~~~~
3003
3004</fiddle-embed></div>
3005
3006---
3007
Cary Clark493df1f2017-08-25 13:14:33 -04003008<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003009## setBlendMode
3010
3011<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3012void setBlendMode(SkBlendMode mode)
3013</pre>
3014
Cary Clark8cc16c72017-08-25 11:51:49 -04003015Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003016Does not check for valid input.
3017
3018### Parameters
3019
Cary Clark8cc16c72017-08-25 11:51:49 -04003020<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003021<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003022 </tr>
3023</table>
3024
3025### Example
3026
3027<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3028
3029#### Example Output
3030
3031~~~~
3032isSrcOver == true
3033isSrcOver != true
3034~~~~
3035
3036</fiddle-embed></div>
3037
3038---
3039
3040# <a name="Path_Effect_Methods"></a> Path Effect Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003041<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3042<a href="undocumented#Path_Effect">Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
Cary Clark8cc16c72017-08-25 11:51:49 -04003043If <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 -04003044
3045### Example
3046
3047<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3048
3049### See Also
3050
Cary Clark4c06f5e2017-08-04 12:48:24 -04003051<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003052
Cary Clark493df1f2017-08-25 13:14:33 -04003053<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003054## getPathEffect
3055
3056<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3057SkPathEffect* getPathEffect() const
3058</pre>
3059
Cary Clark4c06f5e2017-08-04 12:48:24 -04003060Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3061Does 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 -04003062
3063### Return Value
3064
Cary Clark4c06f5e2017-08-04 12:48:24 -04003065<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003066
3067### Example
3068
3069<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3070
3071#### Example Output
3072
3073~~~~
3074nullptr == path effect
3075nullptr != path effect
3076~~~~
3077
3078</fiddle-embed></div>
3079
3080---
3081
Cary Clark493df1f2017-08-25 13:14:33 -04003082<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003083## refPathEffect
3084
3085<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3086sk_sp<SkPathEffect> refPathEffect() const
3087</pre>
3088
Cary Clark4c06f5e2017-08-04 12:48:24 -04003089Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3090Increases <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 -04003091
3092### Return Value
3093
Cary Clark4c06f5e2017-08-04 12:48:24 -04003094<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003095
3096### Example
3097
3098<div><fiddle-embed name="c55c74f8f581870bd2c18f2f99765579">
3099
3100#### Example Output
3101
3102~~~~
3103path effect unique: true
3104path effect unique: false
3105~~~~
3106
3107</fiddle-embed></div>
3108
3109---
3110
Cary Clark493df1f2017-08-25 13:14:33 -04003111<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003112## setPathEffect
3113
3114<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3115void setPathEffect(sk_sp<SkPathEffect> pathEffect)
3116</pre>
3117
Cary Clark8cc16c72017-08-25 11:51:49 -04003118Sets <a href="undocumented#Path_Effect">Path Effect</a> to <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003119decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003120Pass nullptr to leave the path geometry unaltered.
Cary Clark8cc16c72017-08-25 11:51:49 -04003121Does not alter <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003122
3123### Parameters
3124
Cary Clark8cc16c72017-08-25 11:51:49 -04003125<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003126replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003127 </tr>
3128</table>
3129
3130### Example
3131
3132<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3133
3134---
3135
3136# <a name="Mask_Filter_Methods"></a> Mask Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003137<a href="undocumented#Mask_Filter">Mask Filter</a> uses <a href="#Alpha">Color Alpha</a> of the shape drawn to create <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003138<a href="undocumented#Mask_Filter">Mask Filter</a> operates at a lower level than <a href="undocumented#Rasterizer">Rasterizer</a>; <a href="undocumented#Mask_Filter">Mask Filter</a> takes a <a href="undocumented#Mask">Mask</a>,
3139and returns a <a href="undocumented#Mask">Mask</a>.
3140<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as creating a blur effect.
3141Set <a href="undocumented#Mask_Filter">Mask Filter</a> to nullptr to prevent <a href="undocumented#Mask_Filter">Mask Filter</a> from modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003142
3143### Example
3144
3145<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3146
Cary Clark493df1f2017-08-25 13:14:33 -04003147<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003148## getMaskFilter
3149
3150<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3151SkMaskFilter* getMaskFilter() const
3152</pre>
3153
Cary Clark4c06f5e2017-08-04 12:48:24 -04003154Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3155Does 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 -04003156
3157### Return Value
3158
Cary Clark4c06f5e2017-08-04 12:48:24 -04003159<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003160
3161### Example
3162
3163<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3164
3165#### Example Output
3166
3167~~~~
3168nullptr == mask filter
3169nullptr != mask filter
3170~~~~
3171
3172</fiddle-embed></div>
3173
3174---
3175
Cary Clark493df1f2017-08-25 13:14:33 -04003176<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003177## refMaskFilter
3178
3179<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3180sk_sp<SkMaskFilter> refMaskFilter() const
3181</pre>
3182
Cary Clark4c06f5e2017-08-04 12:48:24 -04003183Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3184Increases <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 -04003185
3186### Return Value
3187
Cary Clark4c06f5e2017-08-04 12:48:24 -04003188<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003189
3190### Example
3191
3192<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3193
3194#### Example Output
3195
3196~~~~
3197mask filter unique: true
3198mask filter unique: false
3199~~~~
3200
3201</fiddle-embed></div>
3202
3203---
3204
Cary Clark493df1f2017-08-25 13:14:33 -04003205<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003206## setMaskFilter
3207
3208<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3209void setMaskFilter(sk_sp<SkMaskFilter> maskFilter)
3210</pre>
3211
Cary Clark8cc16c72017-08-25 11:51:49 -04003212Sets <a href="undocumented#Mask_Filter">Mask Filter</a> to <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003213decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Mask_Filter">Mask Filter</a>.
3214Pass nullptr to clear <a href="undocumented#Mask_Filter">Mask Filter</a> and leave <a href="undocumented#Mask_Filter">Mask Filter</a> effect on <a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3215Does not affect <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003216Does not alter <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003217
3218### Parameters
3219
Cary Clark8cc16c72017-08-25 11:51:49 -04003220<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003221modifies clipping mask generated from drawn geometry</td>
3222 </tr>
3223</table>
3224
3225### Example
3226
3227<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3228
3229---
3230
3231# <a name="Typeface_Methods"></a> Typeface Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003232<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3233<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3234The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003235implementation.
3236
3237### Example
3238
3239<div><fiddle-embed name="c18b1696b8c1649bebf7eb1f8b89e0b0"></fiddle-embed></div>
3240
Cary Clark493df1f2017-08-25 13:14:33 -04003241<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003242## getTypeface
3243
3244<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3245SkTypeface* getTypeface() const
3246</pre>
3247
Cary Clark4c06f5e2017-08-04 12:48:24 -04003248Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
3249Does not alter <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003250
3251### Return Value
3252
Cary Clark4c06f5e2017-08-04 12:48:24 -04003253<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003254
3255### Example
3256
3257<div><fiddle-embed name="4d9ffb5761b62a9e3bc9b0bca8787bce">
3258
3259#### Example Output
3260
3261~~~~
3262nullptr == typeface
3263nullptr != typeface
3264~~~~
3265
3266</fiddle-embed></div>
3267
3268---
3269
Cary Clark493df1f2017-08-25 13:14:33 -04003270<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003271## refTypeface
3272
3273<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3274sk_sp<SkTypeface> refTypeface() const
3275</pre>
3276
Cary Clark4c06f5e2017-08-04 12:48:24 -04003277Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003278
3279### Return Value
3280
Cary Clark4c06f5e2017-08-04 12:48:24 -04003281<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003282
3283### Example
3284
3285<div><fiddle-embed name="c8edce7b36a3ffda8af4fe89d7187dbc">
3286
3287#### Example Output
3288
3289~~~~
3290typeface1 != typeface2
3291typeface1 == typeface2
3292~~~~
3293
3294</fiddle-embed></div>
3295
3296---
3297
Cary Clark493df1f2017-08-25 13:14:33 -04003298<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003299## setTypeface
3300
3301<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3302void setTypeface(sk_sp<SkTypeface> typeface)
3303</pre>
3304
Cary Clark8cc16c72017-08-25 11:51:49 -04003305Sets <a href="undocumented#Typeface">Typeface</a> to <a href="#SkPaint_setTypeface_typeface">typeface</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003306decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Typeface">Typeface</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003307Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>.
3308Does not alter <a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003309
3310### Parameters
3311
Cary Clark8cc16c72017-08-25 11:51:49 -04003312<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003313font and style used to draw text</td>
3314 </tr>
3315</table>
3316
3317### Example
3318
3319<div><fiddle-embed name="3d2656ec4c555ed2c7ec086720124a2a"></fiddle-embed></div>
3320
3321---
3322
3323# <a name="Rasterizer_Methods"></a> Rasterizer Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003324<a href="undocumented#Rasterizer">Rasterizer</a> controls how shapes are converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
3325<a href="undocumented#Rasterizer">Rasterizer</a> operates at a higher level than <a href="undocumented#Mask_Filter">Mask Filter</a>; <a href="undocumented#Rasterizer">Rasterizer</a> takes a <a href="SkPath_Reference#Path">Path</a>,
3326and returns a <a href="undocumented#Mask">Mask</a>.
3327<a href="undocumented#Rasterizer">Rasterizer</a> may change the geometry and transparency of the shape, such as
Cary Clark8cc16c72017-08-25 11:51:49 -04003328creating a shadow effect. <a href="undocumented#Rasterizer">Rasterizer</a> forms the base of <a href="#Layer">Rasterizer Layer</a>, which
Cary Clark12799e12017-07-28 15:18:29 -04003329creates effects like embossing and outlining.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003330<a href="undocumented#Rasterizer">Rasterizer</a> applies to <a href="undocumented#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="undocumented#Arc">Arc</a>, <a href="undocumented#Circle">Circle</a>, <a href="undocumented#Oval">Oval</a>,
3331<a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003332
3333### Example
3334
3335<div><fiddle-embed name="e63f8a50996699342a14c6e54d684108"></fiddle-embed></div>
3336
Cary Clark493df1f2017-08-25 13:14:33 -04003337<a name="SkPaint_getRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003338## getRasterizer
3339
3340<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3341SkRasterizer* getRasterizer() const
3342</pre>
3343
Cary Clark4c06f5e2017-08-04 12:48:24 -04003344Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3345Does not alter <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003346
3347### Return Value
3348
Cary Clark4c06f5e2017-08-04 12:48:24 -04003349<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003350
3351### Example
3352
3353<div><fiddle-embed name="0707d407c3a14388b107af8ae5873e55">
3354
3355#### Example Output
3356
3357~~~~
3358nullptr == rasterizer
3359nullptr != rasterizer
3360~~~~
3361
3362</fiddle-embed></div>
3363
3364---
3365
Cary Clark493df1f2017-08-25 13:14:33 -04003366<a name="SkPaint_refRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003367## refRasterizer
3368
3369<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3370sk_sp<SkRasterizer> refRasterizer() const
3371</pre>
3372
Cary Clark4c06f5e2017-08-04 12:48:24 -04003373Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3374Increases <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003375
3376### Return Value
3377
Cary Clark4c06f5e2017-08-04 12:48:24 -04003378<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003379
3380### Example
3381
3382<div><fiddle-embed name="c0855ce19a33cb7e5747750ef341b7b3">
3383
3384#### Example Output
3385
3386~~~~
3387rasterizer unique: true
3388rasterizer unique: false
3389~~~~
3390
3391</fiddle-embed></div>
3392
3393---
3394
Cary Clark493df1f2017-08-25 13:14:33 -04003395<a name="SkPaint_setRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003396## setRasterizer
3397
3398<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3399void setRasterizer(sk_sp<SkRasterizer> rasterizer)
3400</pre>
3401
Cary Clark8cc16c72017-08-25 11:51:49 -04003402Sets <a href="undocumented#Rasterizer">Rasterizer</a> to <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003403decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Rasterizer">Rasterizer</a>.
3404Pass nullptr to clear <a href="undocumented#Rasterizer">Rasterizer</a> and leave <a href="undocumented#Rasterizer">Rasterizer</a> effect on <a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3405Does not affect <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003406Does not alter <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003407
3408### Parameters
3409
Cary Clark8cc16c72017-08-25 11:51:49 -04003410<table> <tr> <td><a name="SkPaint_setRasterizer_rasterizer"> <code><strong>rasterizer </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003411how geometry is converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003412 </tr>
3413</table>
3414
3415### Example
3416
3417<div><fiddle-embed name="aec8ed9296c1628073086a33039f62b7"></fiddle-embed></div>
3418
3419---
3420
3421# <a name="Image_Filter_Methods"></a> Image Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003422<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3423with <a href="undocumented#Blend_Mode">Blend Mode</a> set to <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>. <a href="undocumented#Image_Filter">Image Filter</a> creates a new bitmap,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003424which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
3425<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>
Cary Clark8cc16c72017-08-25 11:51:49 -04003426can operate on all channels of <a href="undocumented#Color">Color</a>, while <a href="undocumented#Mask_Filter">Mask Filter</a> generates <a href="#Alpha">Color Alpha</a> only.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003427<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
3428<a href="undocumented#Mask_Filter">Mask Filter</a> and <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003429
3430### Example
3431
3432<div><fiddle-embed name="88804938b49eb4f7c7f01ad52f4db0d8"></fiddle-embed></div>
3433
Cary Clark493df1f2017-08-25 13:14:33 -04003434<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003435## getImageFilter
3436
3437<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3438SkImageFilter* getImageFilter() const
3439</pre>
3440
Cary Clark4c06f5e2017-08-04 12:48:24 -04003441Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3442Does 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 -04003443
3444### Return Value
3445
Cary Clark4c06f5e2017-08-04 12:48:24 -04003446<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003447
3448### Example
3449
3450<div><fiddle-embed name="38788d42772641606e08c60d9dd418a2">
3451
3452#### Example Output
3453
3454~~~~
3455nullptr == image filter
3456nullptr != image filter
3457~~~~
3458
3459</fiddle-embed></div>
3460
3461---
3462
Cary Clark493df1f2017-08-25 13:14:33 -04003463<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003464## refImageFilter
3465
3466<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3467sk_sp<SkImageFilter> refImageFilter() const
3468</pre>
3469
Cary Clark4c06f5e2017-08-04 12:48:24 -04003470Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3471Increases <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 -04003472
3473### Return Value
3474
Cary Clark4c06f5e2017-08-04 12:48:24 -04003475<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003476
3477### Example
3478
3479<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3480
3481#### Example Output
3482
3483~~~~
3484image filter unique: true
3485image filter unique: false
3486~~~~
3487
3488</fiddle-embed></div>
3489
3490---
3491
Cary Clark493df1f2017-08-25 13:14:33 -04003492<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003493## setImageFilter
3494
3495<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3496void setImageFilter(sk_sp<SkImageFilter> imageFilter)
3497</pre>
3498
Cary Clark8cc16c72017-08-25 11:51:49 -04003499Sets <a href="undocumented#Image_Filter">Image Filter</a> to <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003500decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Image_Filter">Image Filter</a>.
3501Pass 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 -04003502on drawing.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003503Does not affect <a href="undocumented#Rasterizer">Rasterizer</a> or <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003504Does not alter <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003505
3506### Parameters
3507
Cary Clark8cc16c72017-08-25 11:51:49 -04003508<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003509how <a href="undocumented#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003510 </tr>
3511</table>
3512
3513### Example
3514
3515<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3516
3517---
3518
3519# <a name="Draw_Looper_Methods"></a> Draw Looper Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003520<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 -04003521to another to construct the draw.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003522<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3523<a href="undocumented#Draw_Looper">Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3524Set <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 -04003525
3526### Example
3527
3528<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3529
Cary Clark493df1f2017-08-25 13:14:33 -04003530<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003531## getDrawLooper
3532
3533<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3534SkDrawLooper* getDrawLooper() const
3535</pre>
3536
Cary Clark4c06f5e2017-08-04 12:48:24 -04003537Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3538Does 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 -04003539
3540### Return Value
3541
Cary Clark4c06f5e2017-08-04 12:48:24 -04003542<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003543
3544### Example
3545
3546<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3547
3548#### Example Output
3549
3550~~~~
3551nullptr == draw looper
3552nullptr != draw looper
3553~~~~
3554
3555</fiddle-embed></div>
3556
3557---
3558
Cary Clark493df1f2017-08-25 13:14:33 -04003559<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003560## refDrawLooper
3561
3562<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3563sk_sp<SkDrawLooper> refDrawLooper() const
3564</pre>
3565
Cary Clark4c06f5e2017-08-04 12:48:24 -04003566Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3567Increases <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 -04003568
3569### Return Value
3570
Cary Clark4c06f5e2017-08-04 12:48:24 -04003571<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003572
3573### Example
3574
3575<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3576
3577#### Example Output
3578
3579~~~~
3580draw looper unique: true
3581draw looper unique: false
3582~~~~
3583
3584</fiddle-embed></div>
3585
3586---
3587
Cary Clark493df1f2017-08-25 13:14:33 -04003588<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003589## getLooper
3590
3591<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3592SkDrawLooper* getLooper() const
3593</pre>
3594
3595Deprecated.
3596
3597(see bug.skia.org/6259)
3598
3599### Return Value
3600
Cary Clark4c06f5e2017-08-04 12:48:24 -04003601<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003602
3603---
3604
Cary Clark493df1f2017-08-25 13:14:33 -04003605<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003606## setDrawLooper
3607
3608<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3609void setDrawLooper(sk_sp<SkDrawLooper> drawLooper)
3610</pre>
3611
Cary Clark8cc16c72017-08-25 11:51:49 -04003612Sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>,
3613decrementing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003614Pass nullptr to clear <a href="undocumented#Draw_Looper">Draw Looper</a> and leave <a href="undocumented#Draw_Looper">Draw Looper</a> effect on drawing unaltered.
Cary Clark8cc16c72017-08-25 11:51:49 -04003615Does not alter <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003616
3617### Parameters
3618
Cary Clark8cc16c72017-08-25 11:51:49 -04003619<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3620Iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003621 </tr>
3622</table>
3623
3624### Example
3625
3626<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3627
3628---
3629
Cary Clark493df1f2017-08-25 13:14:33 -04003630<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003631## setLooper
3632
3633<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3634void setLooper(sk_sp<SkDrawLooper> drawLooper)
3635</pre>
3636
3637Deprecated.
3638
3639(see bug.skia.org/6259)
3640
3641### Parameters
3642
Cary Clark8cc16c72017-08-25 11:51:49 -04003643<table> <tr> <td><a name="SkPaint_setLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3644sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setLooper_drawLooper">drawLooper</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003645 </tr>
3646
3647---
3648
3649</table>
3650
3651# <a name="Text_Align"></a> Text Align
3652
Cary Clark8cc16c72017-08-25 11:51:49 -04003653## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003654
3655<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003656enum <a href="#SkPaint_Align">Align</a> {
3657<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3658<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3659<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003660};</pre>
3661
Cary Clark8cc16c72017-08-25 11:51:49 -04003662<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
3663<a href="#SkPaint_Align">Align</a> affects glyphs drawn with: <a href="#SkCanvas_drawText">SkCanvas::drawText</a>, <a href="#SkCanvas_drawPosText">SkCanvas::drawPosText</a>,
3664<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3665<a href="#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
3666and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
3667as well as calls that place text glyphs like <a href="#SkPaint_getTextWidths">getTextWidths</a> and <a href="#SkPaint_getTextPath">getTextPath</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003668
3669The text position is set by the font for both horizontal and vertical text.
3670Typically, for horizontal text, the position is to the left side of the glyph on the
3671base line; and for vertical text, the position is the horizontal center of the glyph
3672at the caps height.
3673
Cary Clark8cc16c72017-08-25 11:51:49 -04003674<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 -04003675using the metrics returned by the font.
3676
Cary Clark8cc16c72017-08-25 11:51:49 -04003677<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003678
3679### Constants
3680
3681<table>
3682 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003683 <td><a name="SkPaint_kLeft_Align"> <code><strong>SkPaint::kLeft_Align </strong></code> </a></td><td>0</td><td>Leaves the glyph at the position computed by the font offset by the text position.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003684 </tr>
3685 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003686 <td><a name="SkPaint_kCenter_Align"> <code><strong>SkPaint::kCenter_Align </strong></code> </a></td><td>1</td><td>Moves the glyph half its width if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> clear, and
3687half its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003688 </tr>
3689 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003690 <td><a name="SkPaint_kRight_Align"> <code><strong>SkPaint::kRight_Align </strong></code> </a></td><td>2</td><td>Moves the glyph by its width if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> clear,
3691and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003692 </tr>
3693
3694</table>
3695
Cary Clark8cc16c72017-08-25 11:51:49 -04003696## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003697
3698<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
3699enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003700<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003701};</pre>
3702
3703### Constants
3704
3705<table>
3706 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003707 <td><a name="SkPaint_kAlignCount"> <code><strong>SkPaint::kAlignCount </strong></code> </a></td><td>3</td><td>The number of different <a href="#Text_Align">Text Align</a> values defined.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003708 </tr>
3709
3710</table>
3711
3712### Example
3713
3714<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3715
3716### Example
3717
Cary Clark8cc16c72017-08-25 11:51:49 -04003718<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.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003719
Cary Clark493df1f2017-08-25 13:14:33 -04003720<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003721## getTextAlign
3722
3723<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3724Align getTextAlign() const
3725</pre>
3726
Cary Clark8cc16c72017-08-25 11:51:49 -04003727Returns <a href="#Text_Align">Text Align</a>.
3728Returns <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 -04003729
3730### Return Value
3731
3732text placement relative to position
3733
3734### Example
3735
3736<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3737
3738#### Example Output
3739
3740~~~~
3741kLeft_Align == default
3742~~~~
3743
3744</fiddle-embed></div>
3745
3746---
3747
Cary Clark493df1f2017-08-25 13:14:33 -04003748<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003749## setTextAlign
3750
3751<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3752void setTextAlign(Align align)
3753</pre>
3754
Cary Clark8cc16c72017-08-25 11:51:49 -04003755Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3756Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003757
3758### Parameters
3759
Cary Clark8cc16c72017-08-25 11:51:49 -04003760<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003761text placement relative to position</td>
3762 </tr>
3763</table>
3764
3765### Example
3766
Cary Clark4c06f5e2017-08-04 12:48:24 -04003767<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 Clark12799e12017-07-28 15:18:29 -04003768alignment out of range has no effect.</div></fiddle-embed></div>
3769
3770---
3771
3772# <a name="Text_Size"></a> Text Size
Cary Clark8cc16c72017-08-25 11:51:49 -04003773<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3774<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3775<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003776Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003777
3778### Example
3779
3780<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3781
Cary Clark493df1f2017-08-25 13:14:33 -04003782<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003783## getTextSize
3784
3785<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3786SkScalar getTextSize() const
3787</pre>
3788
Cary Clark8cc16c72017-08-25 11:51:49 -04003789Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003790
3791### Return Value
3792
3793typographic height of text
3794
3795### Example
3796
3797<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3798
3799---
3800
Cary Clark493df1f2017-08-25 13:14:33 -04003801<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003802## setTextSize
3803
3804<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3805void setTextSize(SkScalar textSize)
3806</pre>
3807
Cary Clark8cc16c72017-08-25 11:51:49 -04003808Sets <a href="#Text_Size">Text Size</a> in points.
3809Has 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 -04003810
3811### Parameters
3812
Cary Clark8cc16c72017-08-25 11:51:49 -04003813<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003814typographic height of text</td>
3815 </tr>
3816</table>
3817
3818### Example
3819
3820<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3821
3822---
3823
3824# <a name="Text_Scale_X"></a> Text Scale X
Cary Clark8cc16c72017-08-25 11:51:49 -04003825<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003826<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003827is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003828<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3829<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003830
3831### Example
3832
3833<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3834
Cary Clark493df1f2017-08-25 13:14:33 -04003835<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003836## getTextScaleX
3837
3838<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3839SkScalar getTextScaleX() const
3840</pre>
3841
Cary Clark8cc16c72017-08-25 11:51:49 -04003842Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003843Default value is 1.
3844
3845### Return Value
3846
3847text horizontal scale
3848
3849### Example
3850
3851<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3852
3853---
3854
Cary Clark493df1f2017-08-25 13:14:33 -04003855<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003856## setTextScaleX
3857
3858<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3859void setTextScaleX(SkScalar scaleX)
3860</pre>
3861
Cary Clark8cc16c72017-08-25 11:51:49 -04003862Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003863Default value is 1.
3864
3865### Parameters
3866
Cary Clark8cc16c72017-08-25 11:51:49 -04003867<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003868text horizontal scale</td>
3869 </tr>
3870</table>
3871
3872### Example
3873
3874<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3875
3876---
3877
3878# <a name="Text_Skew_X"></a> Text Skew X
Cary Clark8cc16c72017-08-25 11:51:49 -04003879<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003880<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003881is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003882<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3883<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003884
3885### Example
3886
3887<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3888
Cary Clark493df1f2017-08-25 13:14:33 -04003889<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003890## getTextSkewX
3891
3892<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3893SkScalar getTextSkewX() const
3894</pre>
3895
Cary Clark8cc16c72017-08-25 11:51:49 -04003896Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003897Default value is zero.
3898
3899### Return Value
3900
3901additional shear in x-axis relative to y-axis
3902
3903### Example
3904
3905<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3906
3907---
3908
Cary Clark493df1f2017-08-25 13:14:33 -04003909<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003910## setTextSkewX
3911
3912<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3913void setTextSkewX(SkScalar skewX)
3914</pre>
3915
Cary Clark8cc16c72017-08-25 11:51:49 -04003916Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003917Default value is zero.
3918
3919### Parameters
3920
Cary Clark8cc16c72017-08-25 11:51:49 -04003921<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003922additional shear in x-axis relative to y-axis</td>
3923 </tr>
3924</table>
3925
3926### Example
3927
3928<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3929
3930---
3931
3932# <a name="Text_Encoding"></a> Text Encoding
3933
Cary Clark8cc16c72017-08-25 11:51:49 -04003934## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003935
3936<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003937enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3938<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3939<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3940<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3941<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003942};</pre>
3943
Cary Clark8cc16c72017-08-25 11:51:49 -04003944<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded size,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003945or glyph indices. Character codes use the encoding specified by the<a href="undocumented#Unicode">Unicode</a> standardhttp://unicode.org/standard/standard.html.
3946Character codes encoded size are specified by <a href="undocumented#UTF_8">UTF-8</a>, <a href="undocumented#UTF_16">UTF-16</a>, or <a href="undocumented#UTF_32">UTF-32</a>.
3947All character encoding are able to represent all of <a href="undocumented#Unicode">Unicode</a>, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003948in the total storage required.
3949
Cary Clark4c06f5e2017-08-04 12:48:24 -04003950<a href="undocumented#UTF_8">UTF-8</a> (<a href="undocumented#RFC">RFC</a> 3629)https://tools.ietf.org/html/rfc3629is made up of 8-bit bytes,
3951and is a superset of <a href="undocumented#ASCII">ASCII</a>.
3952<a href="undocumented#UTF_16">UTF-16</a> (<a href="undocumented#RFC">RFC</a> 2781)https://tools.ietf.org/html/rfc2781is made up of 16-bit words,
3953and is a superset of <a href="undocumented#Unicode">Unicode</a> ranges 0x0000 to 0xD7FF and 0xE000 to 0xFFFF.
3954<a href="undocumented#UTF_32">UTF-32</a>http://www.unicode.org/versions/<a href="undocumented#Unicode5">Unicode5</a>.0.0/ch03.pdfis
3955made up of 32-bit words, and is a superset of <a href="undocumented#Unicode">Unicode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003956
Cary Clark4c06f5e2017-08-04 12:48:24 -04003957<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 -04003958A glyph index is a 16-bit word.
3959
Cary Clark8cc16c72017-08-25 11:51:49 -04003960<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 -04003961
3962### Constants
3963
3964<table>
3965 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003966 <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent <a href="undocumented#UTF_8">UTF-8</a> or <a href="undocumented#ASCII">ASCII</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003967 </tr>
3968 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003969 <td><a name="SkPaint_kUTF16_TextEncoding"> <code><strong>SkPaint::kUTF16_TextEncoding </strong></code> </a></td><td>1</td><td>Uses two byte words to represent most of <a href="undocumented#Unicode">Unicode</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003970 </tr>
3971 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003972 <td><a name="SkPaint_kUTF32_TextEncoding"> <code><strong>SkPaint::kUTF32_TextEncoding </strong></code> </a></td><td>2</td><td>Uses four byte words to represent all of <a href="undocumented#Unicode">Unicode</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003973 </tr>
3974 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003975 <td><a name="SkPaint_kGlyphID_TextEncoding"> <code><strong>SkPaint::kGlyphID_TextEncoding </strong></code> </a></td><td>3</td><td>Uses two byte words to represent glyph indices.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003976 </tr>
3977
3978</table>
3979
3980### Example
3981
Cary Clark4c06f5e2017-08-04 12:48:24 -04003982<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line has <a href="undocumented#UTF_8">UTF-8</a> encoding.
3983Second line has <a href="undocumented#UTF_16">UTF-16</a> encoding.
3984Third line has <a href="undocumented#UTF_32">UTF-32</a> encoding.
Cary Clark12799e12017-07-28 15:18:29 -04003985Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
3986
Cary Clark493df1f2017-08-25 13:14:33 -04003987<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003988## getTextEncoding
3989
3990<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3991TextEncoding getTextEncoding() const
3992</pre>
3993
Cary Clark8cc16c72017-08-25 11:51:49 -04003994Returns <a href="#Text_Encoding">Text Encoding</a>.
3995<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 -04003996
3997### Return Value
3998
Cary Clark8cc16c72017-08-25 11:51:49 -04003999one 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
4000<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004001
4002### Example
4003
4004<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
4005
4006#### Example Output
4007
4008~~~~
4009kUTF8_TextEncoding == text encoding
4010kGlyphID_TextEncoding == text encoding
4011~~~~
4012
4013</fiddle-embed></div>
4014
4015---
4016
Cary Clark493df1f2017-08-25 13:14:33 -04004017<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004018## setTextEncoding
4019
4020<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4021void setTextEncoding(TextEncoding encoding)
4022</pre>
4023
Cary Clark8cc16c72017-08-25 11:51:49 -04004024Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
4025<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
4026Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004027
4028### Parameters
4029
Cary Clark8cc16c72017-08-25 11:51:49 -04004030<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
4031one 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
4032<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004033 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004034#
4035
Cary Clark12799e12017-07-28 15:18:29 -04004036</table>
4037
4038### Example
4039
4040<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
4041
4042#### Example Output
4043
4044~~~~
40454 != text encoding
4046~~~~
4047
4048</fiddle-embed></div>
4049
4050---
4051
4052# <a name="Font_Metrics"></a> Font Metrics
Cary Clark8cc16c72017-08-25 11:51:49 -04004053<a href="#Font_Metrics">Font Metrics</a> describe dimensions common to the glyphs in <a href="undocumented#Typeface">Typeface</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004054The dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data and do not take
Cary Clark8cc16c72017-08-25 11:51:49 -04004055<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004056
Cary Clark4c06f5e2017-08-04 12:48:24 -04004057<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 -04004058X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4059are positive.
4060Y-axis values above the baseline are negative, and below the baseline are positive.
4061
4062### Example
4063
4064<div><fiddle-embed name="b5b76e0a15da0c3530071186a9006498"></fiddle-embed></div>
4065
Cary Clark8cc16c72017-08-25 11:51:49 -04004066# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clark12799e12017-07-28 15:18:29 -04004067
4068<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004069struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4070enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4071<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4072<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4073<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4074<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004075};
4076
Cary Clark8cc16c72017-08-25 11:51:49 -04004077uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4078<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4079<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4080<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4081<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4082<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4083<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4084<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4085<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4086<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4087<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4088<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4089<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4090<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4091<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4092<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004093
Cary Clark8cc16c72017-08-25 11:51:49 -04004094bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4095bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4096bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4097bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004098};</pre>
4099
Cary Clark8cc16c72017-08-25 11:51:49 -04004100<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
Cary Clark4c06f5e2017-08-04 12:48:24 -04004101computed 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 Clark12799e12017-07-28 15:18:29 -04004102not availble.
4103
Cary Clark8cc16c72017-08-25 11:51:49 -04004104<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 Clark12799e12017-07-28 15:18:29 -04004105are valid, since their value may be zero.
Cary Clark8cc16c72017-08-25 11:51:49 -04004106<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 Clark12799e12017-07-28 15:18:29 -04004107are valid, since their value may be zero.
4108
Cary Clark8cc16c72017-08-25 11:51:49 -04004109## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004110
4111<pre style="padding: 1em 1em 1em 1em;width: 44em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004112enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4113<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4114<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4115<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4116<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004117};</pre>
4118
Cary Clark8cc16c72017-08-25 11:51:49 -04004119<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 Clark12799e12017-07-28 15:18:29 -04004120the underline or strikeout metric may be valid and zero.
4121Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4122
4123### Constants
4124
4125<table>
4126 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004127 <td><a name="SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag"> <code><strong>SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag </strong></code> </a></td><td>0x0001</td><td>Set if <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a> is valid.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004128 </tr>
4129 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004130 <td><a name="SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag"> <code><strong>SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag </strong></code> </a></td><td>0x0002</td><td>Set if <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a> is valid.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004131 </tr>
4132 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004133 <td><a name="SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag"> <code><strong>SkPaint::FontMetrics::kStrikeoutThicknessIsValid_Flag </strong></code> </a></td><td>0x0004</td><td>Set if <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a> is valid.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004134 </tr>
4135 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004136 <td><a name="SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag"> <code><strong>SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag </strong></code> </a></td><td>0x0008</td><td>Set if <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a> is valid.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004137 </tr>
4138
4139</table>
4140
Cary Clark8cc16c72017-08-25 11:51:49 -04004141<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004142
Cary Clark8cc16c72017-08-25 11:51:49 -04004143<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004144
Cary Clark8cc16c72017-08-25 11:51:49 -04004145<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004146
4147Largest height for any glyph.
4148A measure from the baseline, and is less than or equal to zero.
4149
Cary Clark8cc16c72017-08-25 11:51:49 -04004150<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004151
4152Recommended distance above the baseline to reserve for a line of text.
4153A measure from the baseline, and is less than or equal to zero.
4154
Cary Clark8cc16c72017-08-25 11:51:49 -04004155<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004156
4157Recommended distance below the baseline to reserve for a line of text.
4158A measure from the baseline, and is greater than or equal to zero.
4159
Cary Clark8cc16c72017-08-25 11:51:49 -04004160<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004161
4162Greatest extent below the baseline for any glyph.
4163A measure from the baseline, and is greater than or equal to zero.
4164
Cary Clark8cc16c72017-08-25 11:51:49 -04004165<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004166
4167Recommended distance to add between lines of text.
4168Greater than or equal to zero.
4169
Cary Clark8cc16c72017-08-25 11:51:49 -04004170<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004171
4172Average character width, if it is available.
4173Zero if no average width is stored in the font.
4174
Cary Clark8cc16c72017-08-25 11:51:49 -04004175<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004176
4177Maximum character width.
4178
Cary Clark8cc16c72017-08-25 11:51:49 -04004179<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004180
4181Minimum bounding box x value for all glyphs.
4182Typically less than zero.
4183
Cary Clark8cc16c72017-08-25 11:51:49 -04004184<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004185
4186Maximum bounding box x value for all glyphs.
4187Typically greater than zero.
4188
Cary Clark8cc16c72017-08-25 11:51:49 -04004189<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004190
4191Height of a lower-case 'x'.
4192May be zero if no lower-case height is stored in the font.
4193
Cary Clark8cc16c72017-08-25 11:51:49 -04004194<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004195
4196Height of an upper-case letter.
4197May be zero if no upper-case height is stored in the font.
4198
Cary Clark8cc16c72017-08-25 11:51:49 -04004199<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004200
4201Underline thickness. If the metric
Cary Clark8cc16c72017-08-25 11:51:49 -04004202is valid, the <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4203If <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is clear, <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004204
Cary Clark8cc16c72017-08-25 11:51:49 -04004205<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004206
4207Underline position relative to the baseline.
4208It may be negative, to draw the underline above the baseline, zero
4209to draw the underline on the baseline, or positive to draw the underline
4210below the baseline.
4211
Cary Clark8cc16c72017-08-25 11:51:49 -04004212If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4213If <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is clear, <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004214
Cary Clark8cc16c72017-08-25 11:51:49 -04004215<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004216
4217Strikeout thickness. If the metric
Cary Clark8cc16c72017-08-25 11:51:49 -04004218is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4219If <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is clear, <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004220
Cary Clark8cc16c72017-08-25 11:51:49 -04004221<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004222
4223Strikeout position relative to the baseline.
4224It may be negative, to draw the strikeout above the baseline, zero
4225to draw the strikeout on the baseline, or positive to draw the strikeout
4226below the baseline.
4227
Cary Clark8cc16c72017-08-25 11:51:49 -04004228If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4229If <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is clear, <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004230
Cary Clark493df1f2017-08-25 13:14:33 -04004231<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004232## hasUnderlineThickness
4233
4234<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4235bool hasUnderlineThickness(SkScalar* thickness) const
4236</pre>
4237
Cary Clark8cc16c72017-08-25 11:51:49 -04004238If <a href="#Font_Metrics">Font Metrics</a> has a valid underline <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>, return true, and set
4239<a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a> to that value. If it doesn't, return false, and ignore
4240<a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004241
4242### Parameters
4243
Cary Clark8cc16c72017-08-25 11:51:49 -04004244<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004245storage for underline width</td>
4246 </tr>
4247</table>
4248
4249### Return Value
4250
4251true if font specifies underline width
4252
4253---
4254
Cary Clark493df1f2017-08-25 13:14:33 -04004255<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004256## hasUnderlinePosition
4257
4258<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4259bool hasUnderlinePosition(SkScalar* position) const
4260</pre>
4261
Cary Clark8cc16c72017-08-25 11:51:49 -04004262If <a href="#Font_Metrics">Font Metrics</a> has a valid underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>, return true, and set
4263<a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a> to that value. If it doesn't, return false, and ignore
4264<a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004265
4266### Parameters
4267
Cary Clark8cc16c72017-08-25 11:51:49 -04004268<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4269storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004270 </tr>
4271</table>
4272
4273### Return Value
4274
Cary Clark8cc16c72017-08-25 11:51:49 -04004275true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004276
4277---
4278
Cary Clark493df1f2017-08-25 13:14:33 -04004279<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004280## hasStrikeoutThickness
4281
4282<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4283bool hasStrikeoutThickness(SkScalar* thickness) const
4284</pre>
4285
Cary Clark8cc16c72017-08-25 11:51:49 -04004286If <a href="#Font_Metrics">Font Metrics</a> has a valid strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>, return true, and set
4287<a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a> to that value. If it doesn't, return false, and ignore
4288<a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004289
4290### Parameters
4291
Cary Clark8cc16c72017-08-25 11:51:49 -04004292<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004293storage for strikeout width</td>
4294 </tr>
4295</table>
4296
4297### Return Value
4298
4299true if font specifies strikeout width
4300
4301---
4302
Cary Clark493df1f2017-08-25 13:14:33 -04004303<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004304## hasStrikeoutPosition
4305
4306<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4307bool hasStrikeoutPosition(SkScalar* position) const
4308</pre>
4309
Cary Clark8cc16c72017-08-25 11:51:49 -04004310If <a href="#Font_Metrics">Font Metrics</a> has a valid strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>, return true, and set
4311<a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a> to that value. If it doesn't, return false, and ignore
4312<a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004313
4314### Parameters
4315
Cary Clark8cc16c72017-08-25 11:51:49 -04004316<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4317storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004318 </tr>
4319</table>
4320
4321### Return Value
4322
Cary Clark8cc16c72017-08-25 11:51:49 -04004323true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004324
4325---
4326
Cary Clark493df1f2017-08-25 13:14:33 -04004327<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004328## getFontMetrics
4329
4330<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4331SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4332</pre>
4333
Cary Clark8cc16c72017-08-25 11:51:49 -04004334Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4335The 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 -04004336descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004337If <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>.
4338Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4339dimensions 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>,
4340<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4341Results 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 -04004342is ignored.
4343
4344### Parameters
4345
Cary Clark8cc16c72017-08-25 11:51:49 -04004346<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4347storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4348 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004349additional multiplier for returned values</td>
4350 </tr>
4351</table>
4352
4353### Return Value
4354
4355recommended spacing between lines
4356
4357### Example
4358
4359<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4360
4361### See Also
4362
Cary Clark8cc16c72017-08-25 11:51:49 -04004363<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 -04004364
4365---
4366
Cary Clark493df1f2017-08-25 13:14:33 -04004367<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004368## getFontSpacing
4369
4370<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4371SkScalar getFontSpacing() const
4372</pre>
4373
4374Returns the recommended spacing between lines: the sum of metrics
4375descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004376Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004377dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004378Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004379
4380### Return Value
4381
4382recommended spacing between lines
4383
4384### Example
4385
4386<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4387
4388#### Example Output
4389
4390~~~~
4391textSize: 12 fontSpacing: 13.9688
4392textSize: 18 fontSpacing: 20.9531
4393textSize: 24 fontSpacing: 27.9375
4394textSize: 32 fontSpacing: 37.25
4395~~~~
4396
4397</fiddle-embed></div>
4398
4399---
4400
Cary Clark493df1f2017-08-25 13:14:33 -04004401<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004402## getFontBounds
4403
4404<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4405SkRect getFontBounds() const
4406</pre>
4407
4408Returns the union of bounds of all glyphs.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004409Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004410ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4411and <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 -04004412
Cary Clark8cc16c72017-08-25 11:51:49 -04004413If <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,
4414returns the same bounds as <a href="#Font_Metrics">Font Metrics</a> { <a href="#SkPaint_FontMetrics_fXMin">FontMetrics::fXMin</a>,
4415<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 -04004416
4417### Return Value
4418
4419union of bounds of all glyphs
4420
4421### Example
4422
4423<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4424
4425#### Example Output
4426
4427~~~~
4428metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4429font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4430~~~~
4431
4432</fiddle-embed></div>
4433
4434---
4435
Cary Clark493df1f2017-08-25 13:14:33 -04004436<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004437## textToGlyphs
4438
4439<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4440int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4441</pre>
4442
Cary Clark8cc16c72017-08-25 11:51:49 -04004443Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4444Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4445<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>.
4446<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004447
Cary Clark8cc16c72017-08-25 11:51:49 -04004448Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character encoding or valid
Cary Clark12799e12017-07-28 15:18:29 -04004449glyph indices.
4450
Cary Clark8cc16c72017-08-25 11:51:49 -04004451If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4452If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004453
Cary Clark8cc16c72017-08-25 11:51:49 -04004454If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
4455<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid <a href="undocumented#UTF_8">UTF-8</a> sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004456
4457### Parameters
4458
Cary Clark8cc16c72017-08-25 11:51:49 -04004459<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
4460character stroage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
4461 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004462length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004463 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004464storage for glyph indices; may be nullptr</td>
4465 </tr>
4466</table>
4467
4468### Return Value
4469
Cary Clark8cc16c72017-08-25 11:51:49 -04004470number 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 -04004471
4472### Example
4473
4474<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4475
4476---
4477
Cary Clark493df1f2017-08-25 13:14:33 -04004478<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004479## countText
4480
4481<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4482int countText(const void* text, size_t byteLength) const
4483</pre>
4484
Cary Clark8cc16c72017-08-25 11:51:49 -04004485Returns the number of glyphs in <a href="#SkPaint_countText_text">text</a>.
4486Uses <a href="#Text_Encoding">Text Encoding</a> to count the glyphs.
4487Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004488
4489### Parameters
4490
Cary Clark8cc16c72017-08-25 11:51:49 -04004491<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
4492character stroage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
4493 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004494length of character storage in bytes</td>
4495 </tr>
4496</table>
4497
4498### Return Value
4499
Cary Clark8cc16c72017-08-25 11:51:49 -04004500number of glyphs 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 -04004501
4502### Example
4503
4504<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4505
4506#### Example Output
4507
4508~~~~
4509count = 5
4510~~~~
4511
4512</fiddle-embed></div>
4513
4514---
4515
Cary Clark493df1f2017-08-25 13:14:33 -04004516<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004517## containsText
4518
4519<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4520bool containsText(const void* text, size_t byteLength) const
4521</pre>
4522
Cary Clark8cc16c72017-08-25 11:51:49 -04004523Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
4524Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004525<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004526
Cary Clark8cc16c72017-08-25 11:51:49 -04004527If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4528returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4529does 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 -04004530
4531Returns true if bytelength is zero.
4532
4533### Parameters
4534
Cary Clark8cc16c72017-08-25 11:51:49 -04004535<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004536array of characters or glyphs</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004537 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4538number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004539 </tr>
4540</table>
4541
4542### Return Value
4543
Cary Clark8cc16c72017-08-25 11:51:49 -04004544true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004545
4546### Example
4547
Cary Clark8cc16c72017-08-25 11:51:49 -04004548<div><fiddle-embed name="9202369019552f09cd4bec7f3046fee4"><div><a href="#SkPaint_containsText">containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark4c06f5e2017-08-04 12:48:24 -04004549corresponding to the <a href="undocumented#Unicode">Unicode</a> surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004550
4551#### Example Output
4552
4553~~~~
45540x00b0 == has char
45550xd800 != has char
4556~~~~
4557
4558</fiddle-embed></div>
4559
4560### Example
4561
Cary Clark8cc16c72017-08-25 11:51:49 -04004562<div><fiddle-embed name="904227febfd1c2e264955da0ef66da73"><div><a href="#SkPaint_containsText">containsText</a> returns true that glyph index is greater than zero, not
Cary Clark4c06f5e2017-08-04 12:48:24 -04004563that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004564
4565#### Example Output
4566
4567~~~~
45680x01ff == has glyph
45690x0000 != has glyph
45700xffff == has glyph
4571~~~~
4572
4573</fiddle-embed></div>
4574
4575### See Also
4576
Cary Clark8cc16c72017-08-25 11:51:49 -04004577<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004578
4579---
4580
Cary Clark493df1f2017-08-25 13:14:33 -04004581<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004582## glyphsToUnichars
4583
4584<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4585void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4586</pre>
4587
Cary Clark8cc16c72017-08-25 11:51:49 -04004588Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004589<a href="undocumented#Glyph">Glyph</a> values without direct <a href="undocumented#Unicode">Unicode</a> equivalents are mapped to zero.
4590Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004591by <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 -04004592
Cary Clark8cc16c72017-08-25 11:51:49 -04004593Only supported on platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004594
4595### Parameters
4596
Cary Clark8cc16c72017-08-25 11:51:49 -04004597<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004598array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004599 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004600length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004601 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004602storage for character codes, one per glyph</td>
4603 </tr>
4604</table>
4605
4606### Example
4607
Cary Clark8cc16c72017-08-25 11:51:49 -04004608<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert <a href="undocumented#UTF_8">UTF-8</a> <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 <a href="undocumented#Unichar">Unichar</a> code points.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004609
4610---
4611
4612# <a name="Measure_Text"></a> Measure Text
4613
Cary Clark493df1f2017-08-25 13:14:33 -04004614<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004615## measureText
4616
4617<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4618SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4619</pre>
4620
Cary Clark8cc16c72017-08-25 11:51:49 -04004621Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4622and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4623The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4624Uses <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,
4625and <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
4626<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4627Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4628The 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 -04004629
4630### Parameters
4631
Cary Clark8cc16c72017-08-25 11:51:49 -04004632<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004633character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004634 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4635number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4636 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004637returns bounding box relative to (0, 0) if not nullptr</td>
4638 </tr>
4639</table>
4640
4641### Return Value
4642
4643advance width or height
4644
4645### Example
4646
4647<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4648
4649---
4650
4651<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4652SkScalar measureText(const void* text, size_t length) const
4653</pre>
4654
Cary Clark8cc16c72017-08-25 11:51:49 -04004655Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4656and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4657The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4658Uses <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,
4659and <a href="#Text_Size">Text Size</a> to scale the metrics.
4660Does 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 -04004661
4662### Parameters
4663
Cary Clark8cc16c72017-08-25 11:51:49 -04004664<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004665character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004666 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4667number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004668 </tr>
4669</table>
4670
4671### Return Value
4672
4673advance width or height
4674
4675### Example
4676
4677<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4678
4679#### Example Output
4680
4681~~~~
4682default width = 5
4683double width = 10
4684~~~~
4685
4686</fiddle-embed></div>
4687
4688---
4689
Cary Clark493df1f2017-08-25 13:14:33 -04004690<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004691## breakText
4692
4693<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4694size_t breakText(const void* text, size_t length, SkScalar maxWidth,
4695 SkScalar* measuredWidth = NULL) const
4696</pre>
4697
Cary Clark8cc16c72017-08-25 11:51:49 -04004698Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4699If <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
4700equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4701If <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
4702equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4703Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4704Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4705Uses <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,
4706and <a href="#Text_Size">Text Size</a> to scale the metrics.
4707Does 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 -04004708
4709### Parameters
4710
Cary Clark8cc16c72017-08-25 11:51:49 -04004711<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004712character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004713 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4714number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4715 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4716advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4717 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4718returns 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 -04004719 </tr>
4720</table>
4721
4722### Return Value
4723
Cary Clark8cc16c72017-08-25 11:51:49 -04004724bytes 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 -04004725
4726### Example
4727
Cary Clark4c06f5e2017-08-04 12:48:24 -04004728<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href="undocumented#Line">Line</a> under "" shows desired width, shorter than available characters.
Cary Clark8cc16c72017-08-25 11:51:49 -04004729<a href="undocumented#Line">Line</a> under "" shows measured width after breaking <a href="#SkPaint_breakText_text">text</a>.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004730
4731---
4732
Cary Clark493df1f2017-08-25 13:14:33 -04004733<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004734## getTextWidths
4735
4736<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4737int getTextWidths(const void* text, size_t byteLength, SkScalar widths[],
4738 SkRect bounds[] = NULL) const
4739</pre>
4740
Cary Clark8cc16c72017-08-25 11:51:49 -04004741Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4742the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4743Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4744If <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.
4745if <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.
4746If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4747If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4748Uses <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,
4749and <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>.
4750Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4751Does 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 -04004752
4753### Parameters
4754
Cary Clark8cc16c72017-08-25 11:51:49 -04004755<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004756character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004757 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4758number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4759 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4760returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4761 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4762returns <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 -04004763 </tr>
4764</table>
4765
4766### Return Value
4767
Cary Clark8cc16c72017-08-25 11:51:49 -04004768glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004769
4770### Example
4771
Cary Clark8cc16c72017-08-25 11:51:49 -04004772<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of glyphs increase for stroked <a href="#SkPaint_getTextWidths_text">text</a>, but <a href="#SkPaint_getTextWidths_text">text</a> advance remains the same.
4773The underlines show the <a href="#SkPaint_getTextWidths_text">text</a> advance, spaced to keep them distinct.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004774
4775---
4776
4777# <a name="Text_Path"></a> Text Path
Cary Clark8cc16c72017-08-25 11:51:49 -04004778<a href="#Text_Path">Text Path</a> describes the geometry of glyphs used to draw text.
Cary Clark12799e12017-07-28 15:18:29 -04004779
Cary Clark493df1f2017-08-25 13:14:33 -04004780<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004781## getTextPath
4782
4783<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4784void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y,
4785 SkPath* path) const
4786</pre>
4787
Cary Clark8cc16c72017-08-25 11:51:49 -04004788Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4789Uses <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,
4790and <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.
4791All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4792Uses <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 -04004793
4794### Parameters
4795
Cary Clark8cc16c72017-08-25 11:51:49 -04004796<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004797character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004798 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4799number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4800 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
4801x-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
4802 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
4803y-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
4804 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004805geometry of the glyphs</td>
4806 </tr>
4807</table>
4808
4809### Example
4810
Cary Clark4c06f5e2017-08-04 12:48:24 -04004811<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 Clark12799e12017-07-28 15:18:29 -04004812the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4813
4814---
4815
Cary Clark493df1f2017-08-25 13:14:33 -04004816<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004817## getPosTextPath
4818
4819<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4820void getPosTextPath(const void* text, size_t length, const SkPoint pos[],
4821 SkPath* path) const
4822</pre>
4823
Cary Clark8cc16c72017-08-25 11:51:49 -04004824Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4825Uses <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,
4826and <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.
4827All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4828Uses <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>.
4829<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004830
4831### Parameters
4832
Cary Clark8cc16c72017-08-25 11:51:49 -04004833<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004834character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004835 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4836number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4837 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004838positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004839 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004840geometry of the glyphs</td>
4841 </tr>
4842</table>
4843
4844### Example
4845
4846<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three glyphs to eliminate overlaps, and strokes the result.</div></fiddle-embed></div>
4847
4848---
4849
4850# <a name="Text_Intercepts"></a> Text Intercepts
Cary Clark8cc16c72017-08-25 11:51:49 -04004851<a href="#Text_Intercepts">Text Intercepts</a> describe the intersection of drawn text glyphs with a pair
4852of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark12799e12017-07-28 15:18:29 -04004853underline that skips descenders.
4854
Cary Clark493df1f2017-08-25 13:14:33 -04004855<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004856## getTextIntercepts
4857
4858<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4859int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4860 const SkScalar bounds[2], SkScalar* intervals) const
4861</pre>
4862
Cary Clark8cc16c72017-08-25 11:51:49 -04004863Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4864<a href="#SkPaint_getTextIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getTextIntercepts_text">text</a> advance.
Cary Clark12799e12017-07-28 15:18:29 -04004865The return count is zero or a multiple of two, and is at most twice the number of glyphs in
4866the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004867Uses <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,
4868and <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.
4869Uses <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>.
4870Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4871<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004872
4873### Parameters
4874
Cary Clark8cc16c72017-08-25 11:51:49 -04004875<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004876character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004877 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4878number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4879 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
4880x-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4881 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
4882y-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4883 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004884lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004885 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004886returned intersections; may be nullptr</td>
4887 </tr>
4888</table>
4889
4890### Return Value
4891
4892number of intersections; may be zero
4893
4894### Example
4895
4896<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph descender.</div></fiddle-embed></div>
4897
4898---
4899
Cary Clark493df1f2017-08-25 13:14:33 -04004900<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004901## getPosTextIntercepts
4902
4903<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4904int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4905 const SkScalar bounds[2], SkScalar* intervals) const
4906</pre>
4907
Cary Clark8cc16c72017-08-25 11:51:49 -04004908Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4909<a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getPosTextIntercepts_text">text</a> advance.
Cary Clark12799e12017-07-28 15:18:29 -04004910The return count is zero or a multiple of two, and is at most twice the number of glyphs in
4911the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004912Uses <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,
4913and <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.
4914Uses <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>.
4915Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4916<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004917
4918### Parameters
4919
Cary Clark8cc16c72017-08-25 11:51:49 -04004920<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004921character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004922 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4923number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4924 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004925positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004926 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004927lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004928 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004929returned intersections; may be nullptr</td>
4930 </tr>
4931</table>
4932
4933### Return Value
4934
4935The number of intersections; may be zero
4936
4937### Example
4938
Cary Clark4c06f5e2017-08-04 12:48:24 -04004939<div><fiddle-embed name="98b2dfc552d0540a7c041fe7a2839bd7"><div><a href="undocumented#Text">Text</a> intercepts draw on either side of, but not inside, glyphs in a run.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004940
4941---
4942
Cary Clark493df1f2017-08-25 13:14:33 -04004943<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004944## getPosTextHIntercepts
4945
4946<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4947int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[],
4948 SkScalar constY, const SkScalar bounds[2],
4949 SkScalar* intervals) const
4950</pre>
4951
Cary Clark8cc16c72017-08-25 11:51:49 -04004952Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4953<a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getPosTextHIntercepts_text">text</a> advance.
Cary Clark12799e12017-07-28 15:18:29 -04004954The return count is zero or a multiple of two, and is at most twice the number of glyphs in
4955the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004956Uses <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,
4957and <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.
4958Uses <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>.
4959Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4960<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004961
4962### Parameters
4963
Cary Clark8cc16c72017-08-25 11:51:49 -04004964<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004965character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004966 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4967number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4968 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004969positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004970 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004971position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004972 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004973lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004974 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004975returned intersections; may be nullptr</td>
4976 </tr>
4977</table>
4978
4979### Return Value
4980
4981number of intersections; may be zero
4982
4983### Example
4984
Cary Clark4c06f5e2017-08-04 12:48:24 -04004985<div><fiddle-embed name="dc9851c43acc3716aca8c9a4d40d452d"><div><a href="undocumented#Text">Text</a> intercepts do not take stroke thickness into consideration.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004986
4987---
4988
Cary Clark493df1f2017-08-25 13:14:33 -04004989<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004990## getTextBlobIntercepts
4991
4992<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4993int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2],
4994 SkScalar* intervals) const
4995</pre>
4996
Cary Clark8cc16c72017-08-25 11:51:49 -04004997Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4998<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clark12799e12017-07-28 15:18:29 -04004999The return count is zero or a multiple of two, and is at most twice the number of glyphs in
5000the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04005001Uses <a href="#Text_Encoding">Text Encoding</a> to decode text, <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
5002and <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.
5003Uses pos array and <a href="#Text_Align">Text Align</a> to position <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a>.
5004Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
5005<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005006
5007### Parameters
5008
Cary Clark8cc16c72017-08-25 11:51:49 -04005009<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005010glyphs, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005011 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005012lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005013 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005014returned intersections; may be nullptr</td>
5015 </tr>
5016</table>
5017
5018### Return Value
5019
5020number of intersections; may be zero
5021
5022### Example
5023
5024<div><fiddle-embed name="4961b05f4f26cf270ab4948a57876341"></fiddle-embed></div>
5025
5026---
5027
Cary Clark493df1f2017-08-25 13:14:33 -04005028<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005029## nothingToDraw
5030
5031<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5032bool nothingToDraw() const
5033</pre>
5034
Cary Clark8cc16c72017-08-25 11:51:49 -04005035Returns true if <a href="#Paint">Paint</a> prevents all drawing;
5036otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005037
Cary Clark8cc16c72017-08-25 11:51:49 -04005038Returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> and <a href="#Alpha">Color Alpha</a> are enabled,
5039and computed <a href="#Alpha">Color Alpha</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04005040
5041### Return Value
5042
Cary Clark8cc16c72017-08-25 11:51:49 -04005043true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005044
5045### Example
5046
5047<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5048
5049#### Example Output
5050
5051~~~~
5052initial nothing to draw: false
5053blend dst nothing to draw: true
5054blend src over nothing to draw: false
5055alpha 0 nothing to draw: true
5056~~~~
5057
5058</fiddle-embed></div>
5059
5060---
5061
5062# <a name="Fast_Bounds"></a> Fast Bounds
Cary Clark8cc16c72017-08-25 11:51:49 -04005063<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5064<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005065
Cary Clark493df1f2017-08-25 13:14:33 -04005066<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005067## canComputeFastBounds
5068
5069<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5070bool canComputeFastBounds() const
5071</pre>
5072
Cary Clark8cc16c72017-08-25 11:51:49 -04005073Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5074to 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 -04005075always returns false.
5076
5077### Return Value
5078
Cary Clark8cc16c72017-08-25 11:51:49 -04005079true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005080
5081---
5082
Cary Clark493df1f2017-08-25 13:14:33 -04005083<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005084## computeFastBounds
5085
5086<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5087const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5088</pre>
5089
Cary Clark8cc16c72017-08-25 11:51:49 -04005090Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005091raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005092effects in the paint (e.g. stroking). If needed, it uses the <a href="#SkPaint_computeFastBounds_storage">storage</a>
Cary Clark12799e12017-07-28 15:18:29 -04005093rect parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005094for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005095
Cary Clark8cc16c72017-08-25 11:51:49 -04005096The returned rect will either be <a href="#SkPaint_computeFastBounds_orig">orig</a> or <a href="#SkPaint_computeFastBounds_storage">storage</a>, thus the caller
5097should not rely on <a href="#SkPaint_computeFastBounds_storage">storage</a> being set to the result, but should always
5098use the retured value. It is legal for <a href="#SkPaint_computeFastBounds_orig">orig</a> and <a href="#SkPaint_computeFastBounds_storage">storage</a> to be the same
Cary Clark12799e12017-07-28 15:18:29 -04005099rect.
5100
5101### Parameters
5102
Cary Clark8cc16c72017-08-25 11:51:49 -04005103<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5104geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5105 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005106computed bounds of geometry; may not be nullptr</td>
5107 </tr>
5108</table>
5109
5110### Return Value
5111
5112fast computed bounds
5113
5114---
5115
Cary Clark493df1f2017-08-25 13:14:33 -04005116<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005117## computeFastStrokeBounds
5118
5119<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5120const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5121</pre>
5122
5123### Parameters
5124
Cary Clark8cc16c72017-08-25 11:51:49 -04005125<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5126geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5127 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005128computed bounds of geometry</td>
5129 </tr>
5130</table>
5131
5132### Return Value
5133
5134fast computed bounds
5135
5136---
5137
Cary Clark493df1f2017-08-25 13:14:33 -04005138<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005139## doComputeFastBounds
5140
5141<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5142const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage,
5143 Style style) const
5144</pre>
5145
Cary Clark8cc16c72017-08-25 11:51:49 -04005146Take the <a href="#SkPaint_doComputeFastBounds_style">style</a> explicitly, so the caller can force us to be stroked
Cary Clark12799e12017-07-28 15:18:29 -04005147without having to make a copy of the paint just to change that field.
5148
5149### Parameters
5150
Cary Clark8cc16c72017-08-25 11:51:49 -04005151<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5152geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5153 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005154computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005155 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5156overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005157 </tr>
5158</table>
5159
5160### Return Value
5161
5162fast computed bounds
5163
5164---
5165
Cary Clark493df1f2017-08-25 13:14:33 -04005166<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005167## toString
5168
5169<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5170void toString(SkString* str) const;
5171</pre>
5172
Cary Clark8cc16c72017-08-25 11:51:49 -04005173Converts <a href="#Paint">Paint</a> to machine parsable form in developer mode.
Cary Clark12799e12017-07-28 15:18:29 -04005174
5175### Parameters
5176
Cary Clark8cc16c72017-08-25 11:51:49 -04005177<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
5178storage for string containing parsable <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005179 </tr>
5180</table>
5181
5182### Example
5183
5184<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5185
5186#### Example Output
5187
5188~~~~
5189text size = 12
5190~~~~
5191
5192</fiddle-embed></div>
5193
5194---
5195