blob: 43871cd7fbf031a634d42226c90d4f210c76621e [file] [log] [blame] [view]
Cary Clark12799e12017-07-28 15:18:29 -04001SkPaint Reference
2===
3
4# <a name="Paint"></a> Paint
Cary Clarke4aa3712017-09-15 02:56:12 -04005
6# <a name="SkPaint"></a> Class SkPaint
Cary Clark8cc16c72017-08-25 11:51:49 -04007<a href="#Paint">Paint</a> controls options applied when drawing and measuring. <a href="#Paint">Paint</a> collects all
8options outside of the <a href="#Clip">Canvas Clip</a> and <a href="#Matrix">Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -04009
Cary Clark7cfcbca2018-01-04 16:11:51 -050010Various options apply to text, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -040011
12Some options may not be implemented on all platforms; in these cases, setting
Cary Clark4c06f5e2017-08-04 12:48:24 -040013the option has no effect. Some options are conveniences that duplicate <a href="SkCanvas_Reference#Canvas">Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040014functionality; for instance, text size is identical to matrix scale.
15
Cary Clark8cc16c72017-08-25 11:51:49 -040016<a href="#Paint">Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
17pipeline and multiple pipeline stages may be affected by a single <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040018
Cary Clark7cfcbca2018-01-04 16:11:51 -050019<a href="#Paint">Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040020algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark7cfcbca2018-01-04 16:11:51 -050021<a href="#Paint">Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -040022
Cary Clark8cc16c72017-08-25 11:51:49 -040023The objects contained by <a href="#Paint">Paint</a> are opaque, and cannot be edited outside of the <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -040024to affect it. The implementation is free to defer computations associated with the
Cary Clark7cfcbca2018-01-04 16:11:51 -050025<a href="#Paint">Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
26<a href="SkPath_Reference#Path">Path</a> geometries with Anti-aliasing, regardless of how <a href="#SkPaint_kAntiAlias_Flag">SkPaint::kAntiAlias Flag</a>
Cary Clark8cc16c72017-08-25 11:51:49 -040027is set in <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040028
Cary Clark8cc16c72017-08-25 11:51:49 -040029<a href="#Paint">Paint</a> describes a single color, a single font, a single image quality, and so on.
Cary Clark12799e12017-07-28 15:18:29 -040030Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark8cc16c72017-08-25 11:51:49 -040031<a href="undocumented#Shader">Shader</a> attached to <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040032
Cary Clark12799e12017-07-28 15:18:29 -040033# <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. |
Cary Clark7cfcbca2018-01-04 16:11:51 -050040| Destructor | <a href="#Paint">Paint</a> termination. |
Cary Clark8cc16c72017-08-25 11:51:49 -040041| <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 Clarka560c472017-11-27 10:44:06 -050044| Anti-alias | 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 Clarkce101242017-09-01 15:51:02 -040047| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | Custom sized bitmap <a href="#Glyph">Glyphs</a>. |
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. |
Cary Clarkce101242017-09-01 15:51:02 -040073| <a href="#Text_Encoding">Text Encoding</a> | <a href="undocumented#Text">Text</a> encoded as characters or <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040074| <a href="#Font_Metrics">Font Metrics</a> | Common glyph dimensions. |
75| <a href="#Measure_Text">Measure Text</a> | Width, height, bounds of text. |
Cary Clarkce101242017-09-01 15:51:02 -040076| <a href="#Text_Path">Text Path</a> | Geometry of <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040077| <a href="#Text_Intercepts">Text Intercepts</a> | Advanced underline, strike through. |
Cary Clarkce101242017-09-01 15:51:02 -040078| <a href="#Fast_Bounds">Fast Bounds</a> | Approximate 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. |
Cary Clarkbc5697d2017-10-04 14:31:33 -040091| <a href="#SkPaint_TextEncoding">TextEncoding</a> | Character or glyph encoded 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. |
Cary Clark73fa9722017-08-29 17:36:51 -0400104| <a href="#SkPaint_copy_const_SkPaint">SkPaint(const SkPaint& paint)</a> | Makes a shallow copy. |
105| <a href="#SkPaint_move_SkPaint">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 Clarka560c472017-11-27 10:44:06 -0500112| <a href="#SkPaint_copy_operator">operator=(const SkPaint& paint)</a> | Makes a shallow copy. |
113| <a href="#SkPaint_move_operator">operator=(SkPaint&& paint)</a> | Moves paint without copying it. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400114| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | Compares paints for equality. |
Cary Clarka560c472017-11-27 10:44:06 -0500115| <a href="#SkPaint_notequal_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. |
Cary Clarkce101242017-09-01 15:51:02 -0400125| <a href="#SkPaint_containsText">containsText</a> | Returns if all text corresponds to <a href="#Glyph">Glyphs</a>. |
126| <a href="#SkPaint_countText">countText</a> | Returns number of <a href="#Glyph">Glyphs</a> in text. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400127| <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. |
Cary Clarkce101242017-09-01 15:51:02 -0400130| <a href="#SkPaint_getBlendMode">getBlendMode</a> | Returns <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with <a href="undocumented#Device">Device</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400131| <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. |
Cary Clarkbc5697d2017-10-04 14:31:33 -0400157| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | Returns character or glyph encoded size. b |
Cary Clark8cc16c72017-08-25 11:51:49 -0400158| <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. |
Cary Clarkce101242017-09-01 15:51:02 -0400165| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | Converts <a href="#Glyph">Glyphs</a> into text. |
Cary Clarka560c472017-11-27 10:44:06 -0500166| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | Returns true if Anti-alias is set. |
Cary Clarkce101242017-09-01 15:51:02 -0400167| <a href="#SkPaint_isAutohinted">isAutohinted</a> | Returns true if <a href="#Glyph">Glyphs</a> are always hinted. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400168| <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. |
Cary Clarka560c472017-11-27 10:44:06 -0500188| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | Sets or clears Anti-alias. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400189| <a href="#SkPaint_setARGB">setARGB</a> | Sets color by component. |
Cary Clarkce101242017-09-01 15:51:02 -0400190| <a href="#SkPaint_setAutohinted">setAutohinted</a> | Sets <a href="#Glyph">Glyphs</a> to always be hinted. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400191| <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. |
Cary Clarkbc5697d2017-10-04 14:31:33 -0400215| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | Sets character or glyph encoded size. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400216| <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. |
Cary Clarkce101242017-09-01 15:51:02 -0400222| <a href="#SkPaint_toString">toString</a> | Converts <a href="#Paint">Paint</a> to machine readable form. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400223| <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
Cary Clarka560c472017-11-27 10:44:06 -0500230<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400231SkPaint()
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 Clarka560c472017-11-27 10:44:06 -0500238| Anti-alias | 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 Clark7cfcbca2018-01-04 16:11:51 -0500273paint default values. The overrides may be included in "SkUserConfig.h" 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 Clark73fa9722017-08-29 17:36:51 -0400286<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400287## SkPaint
288
Cary Clarka560c472017-11-27 10:44:06 -0500289<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400290SkPaint(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 Clark73fa9722017-08-29 17:36:51 -0400295between the original <a href="#SkPaint_copy_const_SkPaint_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -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 Clark73fa9722017-08-29 17:36:51 -0400304<table> <tr> <td><a name="SkPaint_copy_const_SkPaint_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 Clark73fa9722017-08-29 17:36:51 -0400311shallow copy of <a href="#SkPaint_copy_const_SkPaint_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 Clark73fa9722017-08-29 17:36:51 -0400328<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400329## SkPaint
330
Cary Clarka560c472017-11-27 10:44:06 -0500331<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400332SkPaint(SkPaint&& paint)
333</pre>
334
Cary Clarkd0530ba2017-09-14 11:25:39 -0400335Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400336of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400337
Cary Clark73fa9722017-08-29 17:36:51 -0400338After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400339
340### Parameters
341
Cary Clark73fa9722017-08-29 17:36:51 -0400342<table> <tr> <td><a name="SkPaint_move_SkPaint_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 Clark73fa9722017-08-29 17:36:51 -0400349content of <a href="#SkPaint_move_SkPaint_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
Cary Clarka560c472017-11-27 10:44:06 -0500368<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400369void reset()
370</pre>
371
Cary Clarkbc5697d2017-10-04 14:31:33 -0400372Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
373<a href="#Paint">Paint</a> 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
Cary Clarka560c472017-11-27 10:44:06 -0500394<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400395~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 Clarka560c472017-11-27 10:44:06 -0500406<a name="SkPaint_copy_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400407## operator=
408
Cary Clarka560c472017-11-27 10:44:06 -0500409<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400410SkPaint& 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 Clarka560c472017-11-27 10:44:06 -0500415between the original <a href="#SkPaint_copy_operator_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400416prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clarka560c472017-11-27 10:44:06 -0500417resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
418are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400419
420### Parameters
421
Cary Clarka560c472017-11-27 10:44:06 -0500422<table> <tr> <td><a name="SkPaint_copy_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 Clarka560c472017-11-27 10:44:06 -0500429content of <a href="#SkPaint_copy_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 Clarka560c472017-11-27 10:44:06 -0500446<a name="SkPaint_move_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400447## operator=
448
Cary Clarka560c472017-11-27 10:44:06 -0500449<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400450SkPaint& operator=(SkPaint&& paint)
451</pre>
452
Cary Clarka560c472017-11-27 10:44:06 -0500453Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
454of objects referenced by the <a href="#SkPaint_move_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -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 Clarka560c472017-11-27 10:44:06 -0500458After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400459
460### Parameters
461
Cary Clarka560c472017-11-27 10:44:06 -0500462<table> <tr> <td><a name="SkPaint_move_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 Clarka560c472017-11-27 10:44:06 -0500469content of <a href="#SkPaint_move_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
Cary Clarka560c472017-11-27 10:44:06 -0500488<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400489bool 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 Clarka560c472017-11-27 10:44:06 -0500524<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400525## operator!=
526
Cary Clarka560c472017-11-27 10:44:06 -0500527<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400528bool operator!=(const SkPaint& a, const SkPaint& b)
529</pre>
530
Cary Clarka560c472017-11-27 10:44:06 -0500531Compares <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a>, and returns true if <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a> are not equivalent. May return true
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 Clarka560c472017-11-27 10:44:06 -0500537<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400538<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500539 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400540<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
Cary Clarka560c472017-11-27 10:44:06 -0500566<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400567uint32_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
Cary Clarka560c472017-11-27 10:44:06 -0500602<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400603void 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
Cary Clark12799e12017-07-28 15:18:29 -0400616---
617
Cary Clark493df1f2017-08-25 13:14:33 -0400618<a name="SkPaint_unflatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400619## unflatten
620
Cary Clarka560c472017-11-27 10:44:06 -0500621<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Update Docsad2cd562018-01-19 05:52:02 +0000622bool unflatten(SkReadBuffer& buffer)
Cary Clark12799e12017-07-28 15:18:29 -0400623</pre>
624
Cary Clark8cc16c72017-08-25 11:51:49 -0400625Populates <a href="#Paint">Paint</a>, typically from a serialized stream, created by calling
626<a href="#SkPaint_flatten">flatten</a> at an earlier time.
Cary Clark12799e12017-07-28 15:18:29 -0400627
Cary Clark8cc16c72017-08-25 11:51:49 -0400628<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 -0400629by the client.
630
631### Parameters
632
Cary Clark8cc16c72017-08-25 11:51:49 -0400633<table> <tr> <td><a name="SkPaint_unflatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -0400634serialized data describing <a href="#Paint">Paint</a> content</td>
Cary Clark12799e12017-07-28 15:18:29 -0400635 </tr>
636</table>
637
Update Docsad2cd562018-01-19 05:52:02 +0000638### Return Value
639
Cary Clark2ade9972017-11-02 17:49:34 -0400640### See Also
641
642<a href="undocumented#SkReadBuffer">SkReadBuffer</a>
643
Cary Clark12799e12017-07-28 15:18:29 -0400644---
645
646# <a name="Hinting"></a> Hinting
647
Cary Clark8cc16c72017-08-25 11:51:49 -0400648## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400649
Cary Clarka560c472017-11-27 10:44:06 -0500650<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400651enum <a href="#Hinting">Hinting</a> {
652<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
653<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
654<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
655<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400656};</pre>
657
Cary Clark8cc16c72017-08-25 11:51:49 -0400658<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
659look 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 -0400660muted effect or no effect at all depending on the platform.
661
Cary Clark7cfcbca2018-01-04 16:11:51 -0500662The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark8cc16c72017-08-25 11:51:49 -0400663as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400664
665### Constants
666
667<table>
668 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400669 <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 Clark7cfcbca2018-01-04 16:11:51 -0500670With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
671bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400672outline being loaded should not be fitted to the pixel grid but simply scaled
673to 26.6 fractional pixels.</td>
674 </tr>
675 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400676 <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 Clark7cfcbca2018-01-04 16:11:51 -0500677With FreeType, this is equivalent in spirit to the
678FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400679lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400680Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400681 </tr>
682 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400683 <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 Clark7cfcbca2018-01-04 16:11:51 -0500684With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
685choosing the default hinting algorithm, which is optimized for standard
Cary Clark12799e12017-07-28 15:18:29 -0400686gray-level rendering.</td>
687 </tr>
688 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500689 <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 FreeType, this selects
690FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
691FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
692horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
693variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400694 </tr>
695</table>
696
Cary Clark7cfcbca2018-01-04 16:11:51 -0500697On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400698
Cary Clark8cc16c72017-08-25 11:51:49 -0400699<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400700Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400701
702
703
Cary Clark493df1f2017-08-25 13:14:33 -0400704<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400705## getHinting
706
Cary Clarka560c472017-11-27 10:44:06 -0500707<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400708Hinting getHinting() const
709</pre>
710
711Returns level of glyph outline adjustment.
712
713### Return Value
714
Cary Clark8cc16c72017-08-25 11:51:49 -0400715one 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 -0400716
717### Example
718
719<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
720
721#### Example Output
722
723~~~~
724SkPaint::kNormal_Hinting == paint.getHinting()
725~~~~
726
727</fiddle-embed></div>
728
729---
730
Cary Clark493df1f2017-08-25 13:14:33 -0400731<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400732## setHinting
733
Cary Clarka560c472017-11-27 10:44:06 -0500734<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400735void setHinting(Hinting hintingLevel)
736</pre>
737
738Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400739Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400740
Cary Clark8cc16c72017-08-25 11:51:49 -0400741| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400742| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400743| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400744| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
745| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
746| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400747
748### Parameters
749
Cary Clark8cc16c72017-08-25 11:51:49 -0400750<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
751one 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 -0400752 </tr>
753</table>
754
755### Example
756
757<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
758
759#### Example Output
760
761~~~~
762paint1 == paint2
763~~~~
764
765</fiddle-embed></div>
766
767---
768
769# <a name="Flags"></a> Flags
770
Cary Clark8cc16c72017-08-25 11:51:49 -0400771## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400772
Cary Clarka560c472017-11-27 10:44:06 -0500773<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400774enum <a href="#Flags">Flags</a> {
775<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
776<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
777<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
778<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
779<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
780<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
781<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
782<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
783<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
784<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
785<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400786
Cary Clark8cc16c72017-08-25 11:51:49 -0400787<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400788};
789</pre>
790
Cary Clark8cc16c72017-08-25 11:51:49 -0400791The bit values stored in <a href="#Flags">Flags</a>.
792The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400793with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400794All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400795multiple settings at once.
796
797### Constants
798
799<table>
800 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500801 <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting Anti-alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400802 </tr>
803 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400804 <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 -0400805 </tr>
806 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400807 <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 -0400808 </tr>
809 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400810 <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 -0400811 </tr>
812 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400813 <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 -0400814 </tr>
815 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400816 <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 -0400817 </tr>
818 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400819 <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 -0400820 </tr>
821 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400822 <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 -0400823 </tr>
824 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400825 <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 -0400826 </tr>
827 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400828 <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 -0400829 </tr>
830 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400831 <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 -0400832 </tr>
833 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400834 <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 -0400835 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400836<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400837
838</table>
839
Cary Clark8cc16c72017-08-25 11:51:49 -0400840## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400841
Cary Clarka560c472017-11-27 10:44:06 -0500842<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400843enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
844<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
845<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400846};</pre>
847
848### Constants
849
850<table>
851 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400852 <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 -0400853 </tr>
854 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400855 <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 -0400856 </tr>
857</table>
858
Cary Clark2ade9972017-11-02 17:49:34 -0400859### See Also
860
861<a href="#Flags">Flags</a> <a href="#SkPaint_getFlags">getFlags</a>
862
Cary Clark12799e12017-07-28 15:18:29 -0400863
864
Cary Clark493df1f2017-08-25 13:14:33 -0400865<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400866## getFlags
867
Cary Clarka560c472017-11-27 10:44:06 -0500868<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400869uint32_t getFlags() const
870</pre>
871
Cary Clark8cc16c72017-08-25 11:51:49 -0400872Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
873bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400874
875### Return Value
876
Cary Clark8cc16c72017-08-25 11:51:49 -0400877zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400878
879### Example
880
881<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
882
883#### Example Output
884
885~~~~
886(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
887~~~~
888
889</fiddle-embed></div>
890
891---
892
Cary Clark493df1f2017-08-25 13:14:33 -0400893<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400894## setFlags
895
Cary Clarka560c472017-11-27 10:44:06 -0500896<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400897void setFlags(uint32_t flags)
898</pre>
899
Cary Clark8cc16c72017-08-25 11:51:49 -0400900Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
901All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400902
903### Parameters
904
Cary Clark8cc16c72017-08-25 11:51:49 -0400905<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
906union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400907 </tr>
908</table>
909
910### Example
911
912<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
913
914#### Example Output
915
916~~~~
917paint.isAntiAlias()
918paint.isDither()
919~~~~
920
921</fiddle-embed></div>
922
923---
924
925# <a name="Anti-alias"></a> Anti-alias
Cary Clarka560c472017-11-27 10:44:06 -0500926Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400927If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
928If <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 -0400929
Cary Clark7cfcbca2018-01-04 16:11:51 -0500930The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400931passing through the pixel center may, but is not required to, draw the pixel.
932
Cary Clarkce101242017-09-01 15:51:02 -0400933<a href="undocumented#Raster_Engine">Raster Engine</a> draws <a href="#Alias">Aliased</a> pixels whose centers are on or to the right of the start of an
Cary Clark4c06f5e2017-08-04 12:48:24 -0400934active <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 -0400935
Cary Clark7cfcbca2018-01-04 16:11:51 -0500936A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500937<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400938<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400939
Cary Clarka560c472017-11-27 10:44:06 -0500940The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400941
Cary Clarka560c472017-11-27 10:44:06 -0500942Anti-alias is disabled by default.
943Anti-alias 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 -0400944at compile time.
945
946### Example
947
948<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
949A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400950The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clarkce101242017-09-01 15:51:02 -0400951<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400952
Cary Clark493df1f2017-08-25 13:14:33 -0400953<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400954## isAntiAlias
955
Cary Clarka560c472017-11-27 10:44:06 -0500956<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400957bool isAntiAlias() const
958</pre>
959
Cary Clark4c06f5e2017-08-04 12:48:24 -0400960If 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 -0400961
Cary Clark8cc16c72017-08-25 11:51:49 -0400962Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400963
964### Return Value
965
Cary Clark8cc16c72017-08-25 11:51:49 -0400966<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400967
968### Example
969
970<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
971
972#### Example Output
973
974~~~~
975paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
976paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
977~~~~
978
979</fiddle-embed></div>
980
981---
982
Cary Clark493df1f2017-08-25 13:14:33 -0400983<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400984## setAntiAlias
985
Cary Clarka560c472017-11-27 10:44:06 -0500986<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400987void setAntiAlias(bool aa)
988</pre>
989
Cary Clark4c06f5e2017-08-04 12:48:24 -0400990Requests, 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 -0400991partial transparency.
992
Cary Clark8cc16c72017-08-25 11:51:49 -0400993Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
994Clears <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 -0400995
996### Parameters
997
Cary Clark8cc16c72017-08-25 11:51:49 -0400998<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
999setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001000 </tr>
1001</table>
1002
1003### Example
1004
1005<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1006
1007#### Example Output
1008
1009~~~~
1010paint1 == paint2
1011~~~~
1012
1013</fiddle-embed></div>
1014
1015---
1016
1017# <a name="Dither"></a> Dither
Cary Clark7cfcbca2018-01-04 16:11:51 -05001018<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001019This can help to smooth color transitions and reducing banding in gradients.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001020Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05001021and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
Cary Clarka560c472017-11-27 10:44:06 -05001022and improves rendering into a <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001023
1024Dithering is always enabled for linear gradients drawing into
Cary Clarka560c472017-11-27 10:44:06 -05001025<a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
1026<a href="#Dither">Dither</a> cannot be enabled for <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and
1027<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001028
Cary Clark8cc16c72017-08-25 11:51:49 -04001029<a href="#Dither">Dither</a> is disabled by default.
1030<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 -04001031at compile time.
1032
Cary Clark8cc16c72017-08-25 11:51:49 -04001033Some 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 -04001034
1035### Example
1036
1037<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1038alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1039
1040### Example
1041
1042<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001043Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001044dither, making it easier to see.</div></fiddle-embed></div>
1045
Cary Clark493df1f2017-08-25 13:14:33 -04001046<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001047## isDither
1048
Cary Clarka560c472017-11-27 10:44:06 -05001049<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001050bool isDither() const
1051</pre>
1052
1053If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001054Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001055
1056### Return Value
1057
Cary Clark8cc16c72017-08-25 11:51:49 -04001058<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001059
1060### Example
1061
1062<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1063
1064#### Example Output
1065
1066~~~~
1067paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1068paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1069~~~~
1070
1071</fiddle-embed></div>
1072
1073---
1074
Cary Clark493df1f2017-08-25 13:14:33 -04001075<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001076## setDither
1077
Cary Clarka560c472017-11-27 10:44:06 -05001078<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001079void setDither(bool dither)
1080</pre>
1081
1082Requests, but does not require, to distribute color error.
1083
Cary Clark8cc16c72017-08-25 11:51:49 -04001084Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1085Clears <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 -04001086
1087### Parameters
1088
Cary Clark8cc16c72017-08-25 11:51:49 -04001089<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1090setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001091 </tr>
1092</table>
1093
1094### Example
1095
1096<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1097
1098#### Example Output
1099
1100~~~~
1101paint1 == paint2
1102~~~~
1103
1104</fiddle-embed></div>
1105
1106### See Also
1107
Cary Clark4c06f5e2017-08-04 12:48:24 -04001108<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001109
1110---
1111
1112### See Also
1113
Cary Clarka560c472017-11-27 10:44:06 -05001114Gradient <a href="#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001115
1116# <a name="Device_Text"></a> Device Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001117<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 -04001118
Cary Clark7cfcbca2018-01-04 16:11:51 -05001119When 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 -04001120create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001121on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001122<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 -04001123the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001124
Cary Clark7cfcbca2018-01-04 16:11:51 -05001125<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 -04001126As the opaqueness
1127of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1128
1129Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001130<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> and <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> are clear by default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001131<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 -04001132<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 -04001133
1134### Example
1135
Cary Clark4c06f5e2017-08-04 12:48:24 -04001136<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>.
Cary Clarkce101242017-09-01 15:51:02 -04001137When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1138When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is enabled, the comma <a href="#Glyph">Glyphs</a> are unique, but appear evenly spaced.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04001139
1140## <a name="Linear_Text"></a> Linear Text
1141
Cary Clark4c06f5e2017-08-04 12:48:24 -04001142<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 -04001143If <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>.
Cary Clarkd0530ba2017-09-14 11:25:39 -04001144If <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear, it is the same as setting <a href="#SkPaint_Hinting">Hinting</a> to <a href="#SkPaint_kNo_Hinting">kNo Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001145
Cary Clark493df1f2017-08-25 13:14:33 -04001146<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001147## isLinearText
1148
Cary Clarka560c472017-11-27 10:44:06 -05001149<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001150bool isLinearText() const
1151</pre>
1152
Cary Clark4c06f5e2017-08-04 12:48:24 -04001153If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001154
Cary Clark8cc16c72017-08-25 11:51:49 -04001155Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001156
1157### Return Value
1158
Cary Clark8cc16c72017-08-25 11:51:49 -04001159<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001160
1161### Example
1162
1163<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1164
1165### See Also
1166
Cary Clark8cc16c72017-08-25 11:51:49 -04001167<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001168
1169---
1170
Cary Clark493df1f2017-08-25 13:14:33 -04001171<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001172## setLinearText
1173
Cary Clarka560c472017-11-27 10:44:06 -05001174<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001175void setLinearText(bool linearText)
1176</pre>
1177
Cary Clark4c06f5e2017-08-04 12:48:24 -04001178If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001179By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001180
Cary Clark8cc16c72017-08-25 11:51:49 -04001181Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1182Clears <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 -04001183
1184### Parameters
1185
Cary Clark8cc16c72017-08-25 11:51:49 -04001186<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1187setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001188 </tr>
1189</table>
1190
1191### Example
1192
1193<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1194
1195### See Also
1196
Cary Clark8cc16c72017-08-25 11:51:49 -04001197<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001198
1199---
1200
1201## <a name="Subpixel_Text"></a> Subpixel Text
1202
Cary Clark7cfcbca2018-01-04 16:11:51 -05001203<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 -04001204As the opaqueness
1205of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1206
Cary Clark493df1f2017-08-25 13:14:33 -04001207<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001208## isSubpixelText
1209
Cary Clarka560c472017-11-27 10:44:06 -05001210<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001211bool isSubpixelText() const
1212</pre>
1213
Cary Clarkce101242017-09-01 15:51:02 -04001214If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001215
Cary Clark8cc16c72017-08-25 11:51:49 -04001216Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001217
1218### Return Value
1219
Cary Clark8cc16c72017-08-25 11:51:49 -04001220<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001221
1222### Example
1223
1224<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1225
1226#### Example Output
1227
1228~~~~
1229paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1230paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1231~~~~
1232
1233</fiddle-embed></div>
1234
1235---
1236
Cary Clark493df1f2017-08-25 13:14:33 -04001237<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001238## setSubpixelText
1239
Cary Clarka560c472017-11-27 10:44:06 -05001240<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001241void setSubpixelText(bool subpixelText)
1242</pre>
1243
Cary Clarkce101242017-09-01 15:51:02 -04001244Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001245
Cary Clark8cc16c72017-08-25 11:51:49 -04001246Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1247Clears <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 -04001248
1249### Parameters
1250
Cary Clark8cc16c72017-08-25 11:51:49 -04001251<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1252setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001253 </tr>
1254</table>
1255
1256### Example
1257
1258<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1259
1260#### Example Output
1261
1262~~~~
1263paint1 == paint2
1264~~~~
1265
1266</fiddle-embed></div>
1267
1268---
1269
1270## <a name="LCD_Text"></a> LCD Text
1271
Cary Clark7cfcbca2018-01-04 16:11:51 -05001272When 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 -04001273create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001274on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001275<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 -04001276the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001277
Cary Clark493df1f2017-08-25 13:14:33 -04001278<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001279## isLCDRenderText
1280
Cary Clarka560c472017-11-27 10:44:06 -05001281<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001282bool isLCDRenderText() const
1283</pre>
1284
Cary Clark7cfcbca2018-01-04 16:11:51 -05001285If true, <a href="#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001286
Cary Clark8cc16c72017-08-25 11:51:49 -04001287Returns 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 -04001288
1289### Return Value
1290
Cary Clark8cc16c72017-08-25 11:51:49 -04001291<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001292
1293### Example
1294
1295<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1296
1297#### Example Output
1298
1299~~~~
1300paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1301paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1302~~~~
1303
1304</fiddle-embed></div>
1305
1306---
1307
Cary Clark493df1f2017-08-25 13:14:33 -04001308<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001309## setLCDRenderText
1310
Cary Clarka560c472017-11-27 10:44:06 -05001311<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001312void setLCDRenderText(bool lcdText)
1313</pre>
1314
Cary Clark7cfcbca2018-01-04 16:11:51 -05001315Requests, but does not require, that <a href="#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001316
Cary Clark8cc16c72017-08-25 11:51:49 -04001317Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1318Clears <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 -04001319
1320### Parameters
1321
Cary Clark8cc16c72017-08-25 11:51:49 -04001322<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1323setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001324 </tr>
1325</table>
1326
1327### Example
1328
1329<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1330
1331#### Example Output
1332
1333~~~~
1334paint1 == paint2
1335~~~~
1336
1337</fiddle-embed></div>
1338
1339---
1340
1341# <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
Cary Clarkce101242017-09-01 15:51:02 -04001342<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> allows selecting custom sized bitmap <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001343<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> when set chooses an embedded bitmap glyph over an outline contained
Cary Clark7cfcbca2018-01-04 16:11:51 -05001344in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001345
Cary Clark7cfcbca2018-01-04 16:11:51 -05001346FreeType selects the bitmap glyph if available when <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set, and selects
Cary Clark8cc16c72017-08-25 11:51:49 -04001347the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001348Windows may select the bitmap glyph but is not required to do so.
1349<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001350
Cary Clark4c06f5e2017-08-04 12:48:24 -04001351<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1352<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 -04001353<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001354
1355### Example
1356
Cary Clarka560c472017-11-27 10:44:06 -05001357<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
1358void draw(SkCanvas* canvas) {<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
1359 includes an embedded bitmap Glyph at odd font sizes. This example works
1360 on platforms that use FreeType as their Font_Engine.
1361 Windows may, but is not required to, return a bitmap glyph if
1362 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1363 bitmap.allocN32Pixels(30, 15);
1364 bitmap.eraseColor(0);
1365 SkCanvas offscreen(bitmap);
1366 SkPaint paint;
1367 paint.setAntiAlias(true);
1368 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001369 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001370 for (bool embedded : { false, true}) {
1371 paint.setEmbeddedBitmapText(embedded);
1372 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1373 }
1374 canvas->drawBitmap(bitmap, 0, 0);
1375 canvas->scale(10, 10);
1376 canvas->drawBitmap(bitmap, -2, 1);
1377}
1378</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001379
Cary Clark493df1f2017-08-25 13:14:33 -04001380<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001381## isEmbeddedBitmapText
1382
Cary Clarka560c472017-11-27 10:44:06 -05001383<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001384bool isEmbeddedBitmapText() const
1385</pre>
1386
Cary Clarkce101242017-09-01 15:51:02 -04001387If true, <a href="#Engine">Font Engine</a> may return <a href="#Glyph">Glyphs</a> from font bitmaps instead of from outlines.
Cary Clark12799e12017-07-28 15:18:29 -04001388
Cary Clark8cc16c72017-08-25 11:51:49 -04001389Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001390
1391### Return Value
1392
Cary Clark8cc16c72017-08-25 11:51:49 -04001393<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001394
1395### Example
1396
1397<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1398
1399#### Example Output
1400
1401~~~~
1402paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1403paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1404~~~~
1405
1406</fiddle-embed></div>
1407
1408---
1409
Cary Clark493df1f2017-08-25 13:14:33 -04001410<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001411## setEmbeddedBitmapText
1412
Cary Clarka560c472017-11-27 10:44:06 -05001413<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001414void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1415</pre>
1416
1417Requests, but does not require, to use bitmaps in fonts instead of outlines.
1418
Cary Clark8cc16c72017-08-25 11:51:49 -04001419Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1420Clears <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 -04001421
1422### Parameters
1423
Cary Clark8cc16c72017-08-25 11:51:49 -04001424<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1425setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001426 </tr>
1427</table>
1428
1429### Example
1430
1431<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1432
1433#### Example Output
1434
1435~~~~
1436paint1 == paint2
1437~~~~
1438
1439</fiddle-embed></div>
1440
1441---
1442
1443# <a name="Automatic_Hinting"></a> Automatic Hinting
Cary Clark8cc16c72017-08-25 11:51:49 -04001444If <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 Clarkce101242017-09-01 15:51:02 -04001445instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001446<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
1447<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001448
Cary Clark7cfcbca2018-01-04 16:11:51 -05001449<a href="#Automatic_Hinting">Automatic Hinting</a> only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001450
Cary Clark493df1f2017-08-25 13:14:33 -04001451<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001452## isAutohinted
1453
Cary Clarka560c472017-11-27 10:44:06 -05001454<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001455bool isAutohinted() const
1456</pre>
1457
Cary Clark8cc16c72017-08-25 11:51:49 -04001458If 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 Clark7cfcbca2018-01-04 16:11:51 -05001459platform uses FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>, instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint
Cary Clarkce101242017-09-01 15:51:02 -04001460<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001461
Cary Clark8cc16c72017-08-25 11:51:49 -04001462Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001463
1464### Return Value
1465
Cary Clark8cc16c72017-08-25 11:51:49 -04001466<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001467
1468### Example
1469
1470<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1471
1472#### Example Output
1473
1474~~~~
1475paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1476paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1477~~~~
1478
1479</fiddle-embed></div>
1480
1481### See Also
1482
Cary Clark8cc16c72017-08-25 11:51:49 -04001483<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001484
1485---
1486
Cary Clark493df1f2017-08-25 13:14:33 -04001487<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001488## setAutohinted
1489
Cary Clarka560c472017-11-27 10:44:06 -05001490<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001491void setAutohinted(bool useAutohinter)
1492</pre>
1493
Cary Clark8cc16c72017-08-25 11:51:49 -04001494If <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 Clarkce101242017-09-01 15:51:02 -04001495instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001496<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
1497<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001498
Cary Clark7cfcbca2018-01-04 16:11:51 -05001499Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001500
Cary Clark8cc16c72017-08-25 11:51:49 -04001501Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1502Clears <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 -04001503
1504### Parameters
1505
Cary Clark8cc16c72017-08-25 11:51:49 -04001506<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1507setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001508 </tr>
1509</table>
1510
1511### Example
1512
1513<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1514
1515### See Also
1516
Cary Clark8cc16c72017-08-25 11:51:49 -04001517<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001518
1519---
1520
1521# <a name="Vertical_Text"></a> Vertical Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001522<a href="undocumented#Text">Text</a> may be drawn by positioning each glyph, or by positioning the first glyph and
Cary Clarkce101242017-09-01 15:51:02 -04001523using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1524is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1525<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001526
Cary Clark7cfcbca2018-01-04 16:11:51 -05001527Skia can translate text character codes as a series of <a href="#Glyph">Glyphs</a>, but does not implement
1528font substitution,
1529textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1530a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001531into glyph series.
1532
Cary Clark8cc16c72017-08-25 11:51:49 -04001533<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 -04001534
Cary Clark8cc16c72017-08-25 11:51:49 -04001535<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1536<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 -04001537
Cary Clark8cc16c72017-08-25 11:51:49 -04001538<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1539<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1540<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001541
1542### Example
1543
1544<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1545
Cary Clark493df1f2017-08-25 13:14:33 -04001546<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001547## isVerticalText
1548
Cary Clarka560c472017-11-27 10:44:06 -05001549<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001550bool isVerticalText() const
1551</pre>
1552
Cary Clarkce101242017-09-01 15:51:02 -04001553If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001554
Cary Clark8cc16c72017-08-25 11:51:49 -04001555Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001556
1557### Return Value
1558
Cary Clark8cc16c72017-08-25 11:51:49 -04001559<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001560
1561### Example
1562
1563<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1564
1565#### Example Output
1566
1567~~~~
1568paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1569paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1570~~~~
1571
1572</fiddle-embed></div>
1573
1574---
1575
Cary Clark493df1f2017-08-25 13:14:33 -04001576<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001577## setVerticalText
1578
Cary Clarka560c472017-11-27 10:44:06 -05001579<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001580void setVerticalText(bool verticalText)
1581</pre>
1582
1583If true, text advance positions the next glyph below the previous glyph instead of to the
1584right of previous glyph.
1585
Cary Clark8cc16c72017-08-25 11:51:49 -04001586Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1587Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001588
1589### Parameters
1590
Cary Clark8cc16c72017-08-25 11:51:49 -04001591<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1592setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001593 </tr>
1594</table>
1595
1596### Example
1597
1598<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1599
1600#### Example Output
1601
1602~~~~
1603paint1 == paint2
1604~~~~
1605
1606</fiddle-embed></div>
1607
1608---
1609
1610# <a name="Fake_Bold"></a> Fake Bold
Cary Clark8cc16c72017-08-25 11:51:49 -04001611<a href="#Fake_Bold">Fake Bold</a> approximates the bold font style accompanying a normal font when a bold font face
Cary Clark7cfcbca2018-01-04 16:11:51 -05001612is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001613bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001614
Cary Clark7cfcbca2018-01-04 16:11:51 -05001615Use <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 -04001616is not available.
1617
Cary Clark7cfcbca2018-01-04 16:11:51 -05001618A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkce101242017-09-01 15:51:02 -04001619the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark7cfcbca2018-01-04 16:11:51 -05001620by 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 -04001621
Cary Clark8cc16c72017-08-25 11:51:49 -04001622<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001623
1624### Example
1625
1626<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1627
Cary Clark493df1f2017-08-25 13:14:33 -04001628<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001629## isFakeBoldText
1630
Cary Clarka560c472017-11-27 10:44:06 -05001631<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001632bool isFakeBoldText() const
1633</pre>
1634
1635If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1636from outlines.
1637
Cary Clark8cc16c72017-08-25 11:51:49 -04001638Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001639
1640### Return Value
1641
Cary Clark8cc16c72017-08-25 11:51:49 -04001642<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001643
1644### Example
1645
1646<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1647
1648#### Example Output
1649
1650~~~~
1651paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1652paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1653~~~~
1654
1655</fiddle-embed></div>
1656
1657---
1658
Cary Clark493df1f2017-08-25 13:14:33 -04001659<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001660## setFakeBoldText
1661
Cary Clarka560c472017-11-27 10:44:06 -05001662<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001663void setFakeBoldText(bool fakeBoldText)
1664</pre>
1665
Cary Clarkce101242017-09-01 15:51:02 -04001666Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001667
Cary Clark8cc16c72017-08-25 11:51:49 -04001668Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1669Clears <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 -04001670
1671### Parameters
1672
Cary Clark8cc16c72017-08-25 11:51:49 -04001673<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1674setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001675 </tr>
1676</table>
1677
1678### Example
1679
1680<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1681
1682#### Example Output
1683
1684~~~~
1685paint1 == paint2
1686~~~~
1687
1688</fiddle-embed></div>
1689
1690---
1691
1692# <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
Cary Clarkce101242017-09-01 15:51:02 -04001693if <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> adjusts the character
Cary Clark7cfcbca2018-01-04 16:11:51 -05001694spacing by the difference of the hinted and Unhinted <a href="undocumented#Left_Side_Bearing">Left Side Bearing</a> and
Cary Clarkce101242017-09-01 15:51:02 -04001695<a href="undocumented#Right_Side_Bearing">Right Side Bearing</a>. <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> only applies to platforms that use
Cary Clark7cfcbca2018-01-04 16:11:51 -05001696FreeType as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001697
Cary Clark7cfcbca2018-01-04 16:11:51 -05001698<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text Kerning, where the space between
1699a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001700
Cary Clark493df1f2017-08-25 13:14:33 -04001701<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001702## isDevKernText
1703
Cary Clarka560c472017-11-27 10:44:06 -05001704<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001705bool isDevKernText() const
1706</pre>
1707
1708Returns if character spacing may be adjusted by the hinting difference.
1709
Cary Clark8cc16c72017-08-25 11:51:49 -04001710Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001711
1712### Return Value
1713
Cary Clark8cc16c72017-08-25 11:51:49 -04001714<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001715
1716### Example
1717
1718<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1719
1720---
1721
Cary Clark493df1f2017-08-25 13:14:33 -04001722<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001723## setDevKernText
1724
Cary Clarka560c472017-11-27 10:44:06 -05001725<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001726void setDevKernText(bool devKernText)
1727</pre>
1728
1729Requests, but does not require, to use hinting to adjust glyph spacing.
1730
Cary Clark8cc16c72017-08-25 11:51:49 -04001731Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1732Clears <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 -04001733
1734### Parameters
1735
Cary Clark8cc16c72017-08-25 11:51:49 -04001736<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1737setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001738 </tr>
1739</table>
1740
1741### Example
1742
1743<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1744
1745#### Example Output
1746
1747~~~~
1748paint1 == paint2
1749~~~~
1750
1751</fiddle-embed></div>
1752
1753---
1754
1755# <a name="Filter_Quality_Methods"></a> Filter Quality Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04001756<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1757A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1758A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001759If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1760in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001761
Cary Clark8cc16c72017-08-25 11:51:49 -04001762<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 -04001763
1764<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001765 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1766 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1767 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1768 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001769</table>
1770
Cary Clarka560c472017-11-27 10:44:06 -05001771and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</a> specialization that uses <a href="SkImage_Reference#Image">Image</a> or <a href="SkBitmap_Reference#Bitmap">Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001772
Cary Clark4c06f5e2017-08-04 12:48:24 -04001773<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 -04001774
1775### Example
1776
1777<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1778
Cary Clark493df1f2017-08-25 13:14:33 -04001779<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001780## getFilterQuality
1781
Cary Clarka560c472017-11-27 10:44:06 -05001782<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001783SkFilterQuality getFilterQuality() const
1784</pre>
1785
Cary Clark4c06f5e2017-08-04 12:48:24 -04001786Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001787draws faster; a higher setting looks better when the image is scaled.
1788
1789### Return Value
1790
Cary Clark7cfcbca2018-01-04 16:11:51 -05001791one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001792<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001793
1794### Example
1795
1796<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1797
1798#### Example Output
1799
1800~~~~
1801kNone_SkFilterQuality == paint.getFilterQuality()
1802~~~~
1803
1804</fiddle-embed></div>
1805
1806---
1807
Cary Clark493df1f2017-08-25 13:14:33 -04001808<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001809## setFilterQuality
1810
Cary Clarka560c472017-11-27 10:44:06 -05001811<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001812void setFilterQuality(SkFilterQuality quality)
1813</pre>
1814
Cary Clark4c06f5e2017-08-04 12:48:24 -04001815Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001816draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001817Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001818
1819### Parameters
1820
Cary Clark8cc16c72017-08-25 11:51:49 -04001821<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05001822one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001823<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001824 </tr>
1825</table>
1826
1827### Example
1828
1829<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1830
1831#### Example Output
1832
1833~~~~
1834kHigh_SkFilterQuality == paint.getFilterQuality()
1835~~~~
1836
1837</fiddle-embed></div>
1838
1839### See Also
1840
Cary Clark4c06f5e2017-08-04 12:48:24 -04001841<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001842
1843---
1844
1845# <a name="Color_Methods"></a> Color Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04001846<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 -04001847or stroked shape in a
184832-bit value. Each component occupies 8-bits, ranging from zero: no contribution;
1849to 255: full intensity. All values in any combination are valid.
1850
Cary Clarkce101242017-09-01 15:51:02 -04001851<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>;
Cary Clark8cc16c72017-08-25 11:51:49 -04001852<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 -04001853
Cary Clark8cc16c72017-08-25 11:51:49 -04001854The 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 -04001855on the output device, which may have more or fewer bits, and may have a different arrangement.
1856
Cary Clark8cc16c72017-08-25 11:51:49 -04001857| 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 -04001858| --- | --- | --- | --- | --- |
1859| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1860
1861### Example
1862
1863<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1864
Cary Clark493df1f2017-08-25 13:14:33 -04001865<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001866## getColor
1867
Cary Clarka560c472017-11-27 10:44:06 -05001868<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001869SkColor getColor() const
1870</pre>
1871
Cary Clarkce101242017-09-01 15:51:02 -04001872Retrieves <a href="#Alpha">Alpha</a> and <a href="#RGB">Color RGB</a>, <a href="#Unpremultiply">Unpremultiplied</a>, packed into 32 bits.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001873Use 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 -04001874a color component.
1875
1876### Return Value
1877
Cary Clarkce101242017-09-01 15:51:02 -04001878<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001879
1880### Example
1881
1882<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1883
1884#### Example Output
1885
1886~~~~
1887Yellow is 100% red, 100% green, and 0% blue.
1888~~~~
1889
1890</fiddle-embed></div>
1891
1892### See Also
1893
Cary Clark4c06f5e2017-08-04 12:48:24 -04001894<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001895
1896---
1897
Cary Clark493df1f2017-08-25 13:14:33 -04001898<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001899## setColor
1900
Cary Clarka560c472017-11-27 10:44:06 -05001901<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001902void setColor(SkColor color)
1903</pre>
1904
Cary Clarkce101242017-09-01 15:51:02 -04001905Sets <a href="#Alpha">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,
Cary Clark7cfcbca2018-01-04 16:11:51 -05001906<a href="#Unpremultiply">Unpremultiplied</a>, packing 8-bit components for <a href="#Alpha">Alpha</a>, <a href="#Red">Red</a>, <a href="#Blue">Blue</a>, and <a href="#Green">Green</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001907
1908### Parameters
1909
Cary Clark8cc16c72017-08-25 11:51:49 -04001910<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001911<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001912 </tr>
1913</table>
1914
1915### Example
1916
1917<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1918
1919#### Example Output
1920
1921~~~~
1922green1 == green2
1923~~~~
1924
1925</fiddle-embed></div>
1926
1927### See Also
1928
Cary Clark8cc16c72017-08-25 11:51:49 -04001929<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 -04001930
1931---
1932
1933## <a name="Alpha_Methods"></a> Alpha Methods
1934
Cary Clark8cc16c72017-08-25 11:51:49 -04001935<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 -04001936
Cary Clark493df1f2017-08-25 13:14:33 -04001937<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001938## getAlpha
1939
Cary Clarka560c472017-11-27 10:44:06 -05001940<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001941uint8_t getAlpha() const
1942</pre>
1943
Cary Clarkce101242017-09-01 15:51:02 -04001944Retrieves <a href="#Alpha">Alpha</a> from the <a href="undocumented#Color">Color</a> used when stroking and filling.
Cary Clark12799e12017-07-28 15:18:29 -04001945
1946### Return Value
1947
Cary Clarkce101242017-09-01 15:51:02 -04001948<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001949
1950### Example
1951
1952<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1953
1954#### Example Output
1955
1956~~~~
1957255 == paint.getAlpha()
1958~~~~
1959
1960</fiddle-embed></div>
1961
1962---
1963
Cary Clark493df1f2017-08-25 13:14:33 -04001964<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001965## setAlpha
1966
Cary Clarka560c472017-11-27 10:44:06 -05001967<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001968void setAlpha(U8CPU a)
1969</pre>
1970
Cary Clark7cfcbca2018-01-04 16:11:51 -05001971Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001972unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001973build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1974<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 -04001975fully opaque.
1976
1977### Parameters
1978
Cary Clark8cc16c72017-08-25 11:51:49 -04001979<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001980<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001981 </tr>
1982</table>
1983
1984### Example
1985
1986<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1987
1988#### Example Output
1989
1990~~~~
19910x44112233 == paint.getColor()
1992~~~~
1993
1994</fiddle-embed></div>
1995
1996---
1997
Cary Clark493df1f2017-08-25 13:14:33 -04001998<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001999## setARGB
2000
Cary Clarka560c472017-11-27 10:44:06 -05002001<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002002void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
2003</pre>
2004
Cary Clark4c06f5e2017-08-04 12:48:24 -04002005Sets <a href="undocumented#Color">Color</a> used when drawing solid fills. The color components range from 0 to 255.
Cary Clarkce101242017-09-01 15:51:02 -04002006The color is <a href="#Unpremultiply">Unpremultiplied</a>; <a href="#Alpha">Alpha</a> sets the transparency independent of <a href="#RGB">Color RGB</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002007
2008### Parameters
2009
Cary Clark8cc16c72017-08-25 11:51:49 -04002010<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2011amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2012 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2013amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2014 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2015amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2016 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2017amount 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 -04002018 </tr>
2019</table>
2020
2021### Example
2022
2023<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2024
2025#### Example Output
2026
2027~~~~
2028transRed1 == transRed2
2029~~~~
2030
2031</fiddle-embed></div>
2032
2033### See Also
2034
Cary Clark8cc16c72017-08-25 11:51:49 -04002035<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002036
2037---
2038
2039# <a name="Style"></a> Style
Cary Clark8cc16c72017-08-25 11:51:49 -04002040<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2041Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002042
Cary Clark8cc16c72017-08-25 11:51:49 -04002043Set <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 -04002044The fill covers the area inside the geometry for most shapes.
2045
Cary Clark8cc16c72017-08-25 11:51:49 -04002046Set <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 -04002047
2048## <a name="Fill"></a> Fill
2049
2050### See Also
2051
Cary Clark8cc16c72017-08-25 11:51:49 -04002052<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002053
2054## <a name="Stroke"></a> Stroke
2055
Cary Clarkbc5697d2017-10-04 14:31:33 -04002056The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002057<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>.
2058The area covered where the shape turns a corner is described by <a href="#Stroke_Join">Stroke Join</a>.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002059The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002060
Cary Clark8cc16c72017-08-25 11:51:49 -04002061As <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
2062may 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 -04002063
2064## <a name="Hairline"></a> Hairline
2065
Cary Clark8cc16c72017-08-25 11:51:49 -04002066<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Hairline">Hairline</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002067<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
2068flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002069
Cary Clark8cc16c72017-08-25 11:51:49 -04002070<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
2071two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2072pixel. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clark7cfcbca2018-01-04 16:11:51 -05002073GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002074while stroking.
2075
Cary Clark8cc16c72017-08-25 11:51:49 -04002076## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002077
Cary Clarka560c472017-11-27 10:44:06 -05002078<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002079enum <a href="#SkPaint_Style">Style</a> {
2080<a href="#SkPaint_kFill_Style">kFill Style</a>,
2081<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2082<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002083};</pre>
2084
Cary Clark8cc16c72017-08-25 11:51:49 -04002085Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002086The stroke and fill
2087share all paint attributes; for instance, they are drawn with the same color.
2088
Cary Clark8cc16c72017-08-25 11:51:49 -04002089Use <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 -04002090a fill draw.
2091
2092### Constants
2093
2094<table>
2095 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002096 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002097Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clarka560c472017-11-27 10:44:06 -05002098<a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="SkImage_Reference#Image">Image</a>, <a href="#Patch">Patches</a>, <a href="undocumented#Region">Region</a>, <a href="#Sprite">Sprites</a>, and <a href="undocumented#Vertices">Vertices</a> are painted as if
Cary Clark8cc16c72017-08-25 11:51:49 -04002099<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2100The <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 -04002101and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002102<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 -04002103 </tr>
2104 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002105 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002106Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Arc">Arcs</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clarkce101242017-09-01 15:51:02 -04002107<a href="#Arc">Arcs</a>, <a href="#Line">Lines</a>, and <a href="#Point">Points</a>, are always drawn as if <a href="#SkPaint_kStroke_Style">kStroke Style</a> is set,
Cary Clark8cc16c72017-08-25 11:51:49 -04002108and ignore the set <a href="#SkPaint_Style">Style</a>.
2109The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002110 </tr>
2111 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002112 <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 Clarkbc5697d2017-10-04 14:31:33 -04002113Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002114<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2115and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002116 </tr>
2117
2118</table>
2119
Cary Clark8cc16c72017-08-25 11:51:49 -04002120## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002121
Cary Clarka560c472017-11-27 10:44:06 -05002122<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002123enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002124<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002125};</pre>
2126
2127### Constants
2128
2129<table>
2130 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002131 <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.
2132May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002133 </tr>
2134
2135</table>
2136
Cary Clark493df1f2017-08-25 13:14:33 -04002137<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002138## getStyle
2139
Cary Clarka560c472017-11-27 10:44:06 -05002140<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002141Style getStyle() const
2142</pre>
2143
2144Whether the geometry is filled, stroked, or filled and stroked.
2145
2146### Return Value
2147
Cary Clark8cc16c72017-08-25 11:51:49 -04002148one 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 -04002149
2150### Example
2151
2152<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2153
2154#### Example Output
2155
2156~~~~
2157SkPaint::kFill_Style == paint.getStyle()
2158~~~~
2159
2160</fiddle-embed></div>
2161
2162### See Also
2163
Cary Clark8cc16c72017-08-25 11:51:49 -04002164<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002165
2166---
2167
Cary Clark493df1f2017-08-25 13:14:33 -04002168<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002169## setStyle
2170
Cary Clarka560c472017-11-27 10:44:06 -05002171<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002172void setStyle(Style style)
2173</pre>
2174
2175Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002176Has 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 -04002177
2178### Parameters
2179
Cary Clark8cc16c72017-08-25 11:51:49 -04002180<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2181one 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 -04002182 </tr>
2183</table>
2184
2185### Example
2186
2187<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2188
2189### See Also
2190
Cary Clark8cc16c72017-08-25 11:51:49 -04002191<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002192
2193---
2194
2195### See Also
2196
Cary Clark8cc16c72017-08-25 11:51:49 -04002197<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 -04002198
2199# <a name="Stroke_Width"></a> Stroke Width
Cary Clark8cc16c72017-08-25 11:51:49 -04002200<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002201of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002202set 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 -04002203
2204When width is greater than zero, the stroke encompasses as many pixels partially
2205or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002206the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002207
Cary Clarkbc5697d2017-10-04 14:31:33 -04002208The stroke dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002209remains one pixel wide regardless of scaling.
2210
2211The default width for the paint is zero.
2212
2213### Example
2214
Cary Clark7cfcbca2018-01-04 16:11:51 -05002215<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756" gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clarkbc5697d2017-10-04 14:31:33 -04002216line and the platform implementation.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002217
Cary Clark493df1f2017-08-25 13:14:33 -04002218<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002219## getStrokeWidth
2220
Cary Clarka560c472017-11-27 10:44:06 -05002221<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002222SkScalar getStrokeWidth() const
2223</pre>
2224
Cary Clark8cc16c72017-08-25 11:51:49 -04002225Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002226outline the shape.
2227
2228### Return Value
2229
Cary Clark8cc16c72017-08-25 11:51:49 -04002230zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002231
2232### Example
2233
2234<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2235
2236#### Example Output
2237
2238~~~~
22390 == paint.getStrokeWidth()
2240~~~~
2241
2242</fiddle-embed></div>
2243
2244---
2245
Cary Clark493df1f2017-08-25 13:14:33 -04002246<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002247## setStrokeWidth
2248
Cary Clarka560c472017-11-27 10:44:06 -05002249<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002250void setStrokeWidth(SkScalar width)
2251</pre>
2252
2253Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002254outline the shape.
2255Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002256
2257### Parameters
2258
Cary Clark8cc16c72017-08-25 11:51:49 -04002259<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2260zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002261 </tr>
2262</table>
2263
2264### Example
2265
2266<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2267
2268#### Example Output
2269
2270~~~~
22715 == paint.getStrokeWidth()
2272~~~~
2273
2274</fiddle-embed></div>
2275
2276---
2277
2278# <a name="Miter_Limit"></a> Miter Limit
Cary Clark8cc16c72017-08-25 11:51:49 -04002279<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002280relative to the stroke width.
2281
Cary Clark8cc16c72017-08-25 11:51:49 -04002282<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2283is 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>
2284or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002285
Cary Clark8cc16c72017-08-25 11:51:49 -04002286If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2287is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002288
Cary Clark8cc16c72017-08-25 11:51:49 -04002289<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002290
Cary Clark8cc16c72017-08-25 11:51:49 -04002291miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002292The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002293in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002294
2295Here are some miter limits and the angles that triggers them.
2296
2297| miter limit | angle in degrees |
2298| --- | --- |
2299| 10 | 11.48 |
2300| 9 | 12.76 |
2301| 8 | 14.36 |
2302| 7 | 16.43 |
2303| 6 | 19.19 |
2304| 5 | 23.07 |
2305| 4 | 28.96 |
2306| 3 | 38.94 |
2307| 2 | 60 |
2308| 1 | 180 |
2309
2310### Example
2311
2312<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2313When the miter limit is decreased slightly, the miter join is replaced
2314by a bevel join.</div></fiddle-embed></div>
2315
Cary Clark493df1f2017-08-25 13:14:33 -04002316<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002317## getStrokeMiter
2318
Cary Clarka560c472017-11-27 10:44:06 -05002319<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002320SkScalar getStrokeMiter() const
2321</pre>
2322
2323The limit at which a sharp corner is drawn beveled.
2324
2325### Return Value
2326
Cary Clark8cc16c72017-08-25 11:51:49 -04002327zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002328
2329### Example
2330
2331<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2332
2333#### Example Output
2334
2335~~~~
2336default miter limit == 4
2337~~~~
2338
2339</fiddle-embed></div>
2340
2341### See Also
2342
Cary Clark8cc16c72017-08-25 11:51:49 -04002343<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 -04002344
2345---
2346
Cary Clark493df1f2017-08-25 13:14:33 -04002347<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002348## setStrokeMiter
2349
Cary Clarka560c472017-11-27 10:44:06 -05002350<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002351void setStrokeMiter(SkScalar miter)
2352</pre>
2353
2354The limit at which a sharp corner is drawn beveled.
2355Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002356Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002357
2358### Parameters
2359
Cary Clark8cc16c72017-08-25 11:51:49 -04002360<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2361zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002362 </tr>
2363</table>
2364
2365### Example
2366
2367<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2368
2369#### Example Output
2370
2371~~~~
2372default miter limit == 8
2373~~~~
2374
2375</fiddle-embed></div>
2376
2377### See Also
2378
Cary Clark8cc16c72017-08-25 11:51:49 -04002379<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 -04002380
2381---
2382
2383# <a name="Stroke_Cap"></a> Stroke Cap
2384
Cary Clark8cc16c72017-08-25 11:51:49 -04002385## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002386
Cary Clarka560c472017-11-27 10:44:06 -05002387<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002388enum <a href="#SkPaint_Cap">Cap</a> {
2389<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2390<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2391<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002392
Cary Clark8cc16c72017-08-25 11:51:49 -04002393<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2394<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002395};
Cary Clark6fc50412017-09-21 12:31:06 -04002396
Cary Clark8cc16c72017-08-25 11:51:49 -04002397static 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 -04002398
Cary Clark8cc16c72017-08-25 11:51:49 -04002399<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 -04002400
2401### Constants
2402
2403<table>
2404 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002405 <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 -04002406 </tr>
2407 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002408 <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 -04002409and end.</td>
2410 </tr>
2411 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002412 <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 -04002413and end. The square sides are parallel to the initial and final direction
2414of the stroke.</td>
2415 </tr>
2416 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002417 <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 -04002418 </tr>
2419 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002420 <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>.
2421<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 -04002422 </tr>
2423 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002424 <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.
2425May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002426 </tr>
2427
Cary Clark7cfcbca2018-01-04 16:11:51 -05002428Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002429follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002430
Cary Clark8cc16c72017-08-25 11:51:49 -04002431If 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 -04002432visible beginning and end.
2433
Cary Clark8cc16c72017-08-25 11:51:49 -04002434<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 -04002435
Cary Clark8cc16c72017-08-25 11:51:49 -04002436<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> is not drawn.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002437<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 -04002438at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002439<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
2440<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002441
Cary Clark8cc16c72017-08-25 11:51:49 -04002442<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 -04002443
2444</table>
2445
2446### Example
2447
Cary Clark2ade9972017-11-02 17:49:34 -04002448<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002449
Cary Clark493df1f2017-08-25 13:14:33 -04002450<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002451## getStrokeCap
2452
Cary Clarka560c472017-11-27 10:44:06 -05002453<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002454Cap getStrokeCap() const
2455</pre>
2456
2457The geometry drawn at the beginning and end of strokes.
2458
2459### Return Value
2460
Cary Clark8cc16c72017-08-25 11:51:49 -04002461one 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 -04002462
2463### Example
2464
2465<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2466
2467#### Example Output
2468
2469~~~~
2470kButt_Cap == default stroke cap
2471~~~~
2472
2473</fiddle-embed></div>
2474
2475### See Also
2476
Cary Clark8cc16c72017-08-25 11:51:49 -04002477<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002478
2479---
2480
Cary Clark493df1f2017-08-25 13:14:33 -04002481<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002482## setStrokeCap
2483
Cary Clarka560c472017-11-27 10:44:06 -05002484<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002485void setStrokeCap(Cap cap)
2486</pre>
2487
2488The geometry drawn at the beginning and end of strokes.
2489
2490### Parameters
2491
Cary Clark8cc16c72017-08-25 11:51:49 -04002492<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2493one 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>;
2494has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002495 </tr>
2496</table>
2497
2498### Example
2499
2500<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2501
2502#### Example Output
2503
2504~~~~
2505kRound_Cap == paint.getStrokeCap()
2506~~~~
2507
2508</fiddle-embed></div>
2509
2510### See Also
2511
Cary Clark8cc16c72017-08-25 11:51:49 -04002512<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002513
2514---
2515
2516# <a name="Stroke_Join"></a> Stroke Join
Cary Clark8cc16c72017-08-25 11:51:49 -04002517<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 -04002518
Cary Clark7cfcbca2018-01-04 16:11:51 -05002519Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002520follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002521
2522If the contour direction changes abruptly, because the tangent direction leading
2523to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002524the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002525
2526### Example
2527
Cary Clark2ade9972017-11-02 17:49:34 -04002528<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002529
Cary Clark8cc16c72017-08-25 11:51:49 -04002530## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002531
Cary Clarka560c472017-11-27 10:44:06 -05002532<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002533enum <a href="#SkPaint_Join">Join</a> {
2534<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2535<a href="#SkPaint_kRound_Join">kRound Join</a>,
2536<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002537
Cary Clark8cc16c72017-08-25 11:51:49 -04002538<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2539<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002540};
Cary Clark6fc50412017-09-21 12:31:06 -04002541
Cary Clark8cc16c72017-08-25 11:51:49 -04002542static 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 -04002543
Cary Clark8cc16c72017-08-25 11:51:49 -04002544<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 -04002545affects the four corners of a stroked rectangle, and the connected segments in a
2546stroked path.
2547
2548Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2549radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2550connect the thick strokes.
2551
Cary Clark7cfcbca2018-01-04 16:11:51 -05002552The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002553not contain the actual join. For instance, a fill path constructed with round joins does
2554not necessarily include circles at each connected segment.
2555
2556### Constants
2557
2558<table>
2559 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002560 <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>.
2561If 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 -04002562 </tr>
2563 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002564 <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 -04002565 </tr>
2566 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002567 <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 -04002568 </tr>
2569 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002570 <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 -04002571 </tr>
2572 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002573 <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>.
2574<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 -04002575 </tr>
2576 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002577 <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.
2578May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002579 </tr>
2580</table>
2581
2582### Example
2583
2584<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2585
2586### See Also
2587
Cary Clark8cc16c72017-08-25 11:51:49 -04002588<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 -04002589
2590
2591
Cary Clark493df1f2017-08-25 13:14:33 -04002592<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002593## getStrokeJoin
2594
Cary Clarka560c472017-11-27 10:44:06 -05002595<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002596Join getStrokeJoin() const
2597</pre>
2598
Cary Clark0c5f5462017-12-15 11:21:51 -05002599The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002600
2601### Return Value
2602
Cary Clark8cc16c72017-08-25 11:51:49 -04002603one 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 -04002604
2605### Example
2606
2607<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2608
2609#### Example Output
2610
2611~~~~
2612kMiter_Join == default stroke join
2613~~~~
2614
2615</fiddle-embed></div>
2616
2617### See Also
2618
Cary Clark8cc16c72017-08-25 11:51:49 -04002619<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002620
2621---
2622
Cary Clark493df1f2017-08-25 13:14:33 -04002623<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002624## setStrokeJoin
2625
Cary Clarka560c472017-11-27 10:44:06 -05002626<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002627void setStrokeJoin(Join join)
2628</pre>
2629
Cary Clark0c5f5462017-12-15 11:21:51 -05002630The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002631
2632### Parameters
2633
Cary Clark8cc16c72017-08-25 11:51:49 -04002634<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2635one 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 -04002636otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002637 </tr>
2638</table>
2639
2640### Example
2641
2642<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2643
2644#### Example Output
2645
2646~~~~
2647kMiter_Join == paint.getStrokeJoin()
2648~~~~
2649
2650</fiddle-embed></div>
2651
2652### See Also
2653
Cary Clark8cc16c72017-08-25 11:51:49 -04002654<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002655
2656---
2657
2658### See Also
2659
Cary Clark8cc16c72017-08-25 11:51:49 -04002660<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002661
2662# <a name="Fill_Path"></a> Fill Path
Cary Clark8cc16c72017-08-25 11:51:49 -04002663<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 -04002664
Cary Clark8cc16c72017-08-25 11:51:49 -04002665If <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 -04002666replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2667destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002668
Cary Clark4c06f5e2017-08-04 12:48:24 -04002669Fill <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
2670the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002671
Cary Clark7cfcbca2018-01-04 16:11:51 -05002672If <a href="#SkPaint_Style">Style</a> is <a href="#SkPaint_kStroke_Style">kStroke Style</a> or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04002673and <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>,
2674and <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 -04002675
Cary Clark7cfcbca2018-01-04 16:11:51 -05002676Fill <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 -04002677
Cary Clark8cc16c72017-08-25 11:51:49 -04002678If 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>
2679returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002680
Cary Clark493df1f2017-08-25 13:14:33 -04002681<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002682## getFillPath
2683
Cary Clarka560c472017-11-27 10:44:06 -05002684<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2685bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002686</pre>
2687
2688The filled equivalent of the stroked path.
2689
2690### Parameters
2691
Cary Clark8cc16c72017-08-25 11:51:49 -04002692<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002693<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002694 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2695resulting <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>
2696 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002697optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002698 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002699if > 1, increase precision, else if (0 < res < 1) reduce precision
2700to favor speed and size</td>
2701 </tr>
2702</table>
2703
2704### Return Value
2705
Cary Clark8cc16c72017-08-25 11:51:49 -04002706true 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 -04002707
2708### Example
2709
Cary Clarkce101242017-09-01 15:51:02 -04002710<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href="#Quad">Quad</a> stroke is turned into a filled path with increasing levels of precision.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002711At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002712At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2713
2714---
2715
Cary Clarka560c472017-11-27 10:44:06 -05002716<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002717bool getFillPath(const SkPath& src, SkPath* dst) const
2718</pre>
2719
2720The filled equivalent of the stroked path.
2721
Cary Clark8cc16c72017-08-25 11:51:49 -04002722Replaces <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>.
2723<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 -04002724
2725### Parameters
2726
Cary Clark8cc16c72017-08-25 11:51:49 -04002727<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002728<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002729 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2730resulting <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 -04002731 </tr>
2732</table>
2733
2734### Return Value
2735
Cary Clark8cc16c72017-08-25 11:51:49 -04002736true 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 -04002737
2738### Example
2739
2740<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2741
2742---
2743
2744### See Also
2745
Cary Clark8cc16c72017-08-25 11:51:49 -04002746<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 -04002747
2748# <a name="Shader_Methods"></a> Shader Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002749<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2750<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002751If <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 -04002752
Cary Clark8cc16c72017-08-25 11:51:49 -04002753<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2754If <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 -04002755the fill.
2756
Cary Clark8cc16c72017-08-25 11:51:49 -04002757The 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 -04002758
2759### Example
2760
2761<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2762
Cary Clark8cc16c72017-08-25 11:51:49 -04002763If <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 -04002764
2765### Example
2766
2767<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2768
Cary Clark493df1f2017-08-25 13:14:33 -04002769<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002770## getShader
2771
Cary Clarka560c472017-11-27 10:44:06 -05002772<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002773SkShader* getShader() const
2774</pre>
2775
2776Optional colors used when filling a path, such as a gradient.
2777
Cary Clark4c06f5e2017-08-04 12:48:24 -04002778Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002779
2780### Return Value
2781
Cary Clark4c06f5e2017-08-04 12:48:24 -04002782<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002783
2784### Example
2785
2786<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2787
2788#### Example Output
2789
2790~~~~
2791nullptr == shader
2792nullptr != shader
2793~~~~
2794
2795</fiddle-embed></div>
2796
2797---
2798
Cary Clark493df1f2017-08-25 13:14:33 -04002799<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002800## refShader
2801
Cary Clarka560c472017-11-27 10:44:06 -05002802<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002803sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002804</pre>
2805
2806Optional colors used when filling a path, such as a gradient.
2807
Cary Clark4c06f5e2017-08-04 12:48:24 -04002808Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002809
2810### Return Value
2811
Cary Clark4c06f5e2017-08-04 12:48:24 -04002812<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002813
2814### Example
2815
2816<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2817
2818#### Example Output
2819
2820~~~~
2821shader unique: true
2822shader unique: false
2823~~~~
2824
2825</fiddle-embed></div>
2826
2827---
2828
Cary Clark493df1f2017-08-25 13:14:33 -04002829<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002830## setShader
2831
Cary Clarka560c472017-11-27 10:44:06 -05002832<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002833void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002834</pre>
2835
2836Optional colors used when filling a path, such as a gradient.
2837
Cary Clarkd0530ba2017-09-14 11:25:39 -04002838Sets <a href="undocumented#Shader">Shader</a> to <a href="#SkPaint_setShader_shader">shader</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Shader">Shader</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002839Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002840
2841### Parameters
2842
Cary Clark8cc16c72017-08-25 11:51:49 -04002843<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002844how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002845 </tr>
2846</table>
2847
2848### Example
2849
2850<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2851
2852---
2853
2854# <a name="Color_Filter_Methods"></a> Color Filter Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002855<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2856<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 -04002857If <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 -04002858
Cary Clark8cc16c72017-08-25 11:51:49 -04002859The 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 -04002860
2861### Example
2862
2863<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2864
Cary Clark493df1f2017-08-25 13:14:33 -04002865<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002866## getColorFilter
2867
Cary Clarka560c472017-11-27 10:44:06 -05002868<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002869SkColorFilter* getColorFilter() const
2870</pre>
2871
Cary Clark4c06f5e2017-08-04 12:48:24 -04002872Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2873Does 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 -04002874
2875### Return Value
2876
Cary Clark4c06f5e2017-08-04 12:48:24 -04002877<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002878
2879### Example
2880
2881<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2882
2883#### Example Output
2884
2885~~~~
2886nullptr == color filter
2887nullptr != color filter
2888~~~~
2889
2890</fiddle-embed></div>
2891
2892---
2893
Cary Clark493df1f2017-08-25 13:14:33 -04002894<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002895## refColorFilter
2896
Cary Clarka560c472017-11-27 10:44:06 -05002897<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002898sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002899</pre>
2900
Cary Clark4c06f5e2017-08-04 12:48:24 -04002901Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2902Increases <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 -04002903
2904### Return Value
2905
Cary Clark4c06f5e2017-08-04 12:48:24 -04002906<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002907
2908### Example
2909
2910<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2911
2912#### Example Output
2913
2914~~~~
2915color filter unique: true
2916color filter unique: false
2917~~~~
2918
2919</fiddle-embed></div>
2920
2921---
2922
Cary Clark493df1f2017-08-25 13:14:33 -04002923<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002924## setColorFilter
2925
Cary Clarka560c472017-11-27 10:44:06 -05002926<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002927void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002928</pre>
2929
Cary Clark6fc50412017-09-21 12:31:06 -04002930Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2931<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2932
2933Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002934
2935### Parameters
2936
Cary Clark8cc16c72017-08-25 11:51:49 -04002937<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002938<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002939 </tr>
2940</table>
2941
2942### Example
2943
2944<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2945
2946---
2947
2948# <a name="Blend_Mode_Methods"></a> Blend Mode Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002949<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 -04002950The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002951over the destination color.
2952
2953### Example
2954
2955<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2956
2957### See Also
2958
Cary Clark4c06f5e2017-08-04 12:48:24 -04002959<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002960
Cary Clark493df1f2017-08-25 13:14:33 -04002961<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002962## getBlendMode
2963
Cary Clarka560c472017-11-27 10:44:06 -05002964<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002965SkBlendMode getBlendMode() const
2966</pre>
2967
Cary Clark4c06f5e2017-08-04 12:48:24 -04002968Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002969By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002970
2971### Return Value
2972
2973mode used to combine source color with destination color
2974
2975### Example
2976
2977<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2978
2979#### Example Output
2980
2981~~~~
2982kSrcOver == getBlendMode
2983kSrcOver != getBlendMode
2984~~~~
2985
2986</fiddle-embed></div>
2987
2988---
2989
Cary Clark493df1f2017-08-25 13:14:33 -04002990<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002991## isSrcOver
2992
Cary Clarka560c472017-11-27 10:44:06 -05002993<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002994bool isSrcOver() const
2995</pre>
2996
Cary Clark8cc16c72017-08-25 11:51:49 -04002997Returns 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 -04002998
2999### Return Value
3000
Cary Clark8cc16c72017-08-25 11:51:49 -04003001true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003002
3003### Example
3004
3005<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3006
3007#### Example Output
3008
3009~~~~
3010isSrcOver == true
3011isSrcOver != true
3012~~~~
3013
3014</fiddle-embed></div>
3015
3016---
3017
Cary Clark493df1f2017-08-25 13:14:33 -04003018<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003019## setBlendMode
3020
Cary Clarka560c472017-11-27 10:44:06 -05003021<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003022void setBlendMode(SkBlendMode mode)
3023</pre>
3024
Cary Clark7cfcbca2018-01-04 16:11:51 -05003025Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003026Does not check for valid input.
3027
3028### Parameters
3029
Cary Clark8cc16c72017-08-25 11:51:49 -04003030<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003031<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003032 </tr>
3033</table>
3034
3035### Example
3036
3037<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3038
3039#### Example Output
3040
3041~~~~
3042isSrcOver == true
3043isSrcOver != true
3044~~~~
3045
3046</fiddle-embed></div>
3047
3048---
3049
3050# <a name="Path_Effect_Methods"></a> Path Effect Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003051<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3052<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 -04003053If <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 -04003054
3055### Example
3056
3057<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3058
3059### See Also
3060
Cary Clark4c06f5e2017-08-04 12:48:24 -04003061<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003062
Cary Clark493df1f2017-08-25 13:14:33 -04003063<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003064## getPathEffect
3065
Cary Clarka560c472017-11-27 10:44:06 -05003066<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003067SkPathEffect* getPathEffect() const
3068</pre>
3069
Cary Clark4c06f5e2017-08-04 12:48:24 -04003070Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3071Does 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 -04003072
3073### Return Value
3074
Cary Clark4c06f5e2017-08-04 12:48:24 -04003075<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003076
3077### Example
3078
3079<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3080
3081#### Example Output
3082
3083~~~~
3084nullptr == path effect
3085nullptr != path effect
3086~~~~
3087
3088</fiddle-embed></div>
3089
3090---
3091
Cary Clark493df1f2017-08-25 13:14:33 -04003092<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003093## refPathEffect
3094
Cary Clarka560c472017-11-27 10:44:06 -05003095<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003096sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003097</pre>
3098
Cary Clark4c06f5e2017-08-04 12:48:24 -04003099Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3100Increases <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 -04003101
3102### Return Value
3103
Cary Clark4c06f5e2017-08-04 12:48:24 -04003104<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003105
3106### Example
3107
Cary Clarka560c472017-11-27 10:44:06 -05003108<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003109
3110#### Example Output
3111
3112~~~~
3113path effect unique: true
3114path effect unique: false
3115~~~~
3116
3117</fiddle-embed></div>
3118
3119---
3120
Cary Clark493df1f2017-08-25 13:14:33 -04003121<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003122## setPathEffect
3123
Cary Clarka560c472017-11-27 10:44:06 -05003124<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003125void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003126</pre>
3127
Cary Clark6fc50412017-09-21 12:31:06 -04003128Sets <a href="undocumented#Path_Effect">Path Effect</a> to <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3129<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3130
3131Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003132
3133### Parameters
3134
Cary Clark8cc16c72017-08-25 11:51:49 -04003135<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003136replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003137 </tr>
3138</table>
3139
3140### Example
3141
3142<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3143
3144---
3145
3146# <a name="Mask_Filter_Methods"></a> Mask Filter Methods
Cary Clarkce101242017-09-01 15:51:02 -04003147<a href="undocumented#Mask_Filter">Mask Filter</a> uses coverage of the shape drawn to create <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003148<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>,
3149and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003150
3151<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3152creating a blur effect. Set <a href="undocumented#Mask_Filter">Mask Filter</a> to nullptr to prevent <a href="undocumented#Mask_Filter">Mask Filter</a> from
3153modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003154
3155### Example
3156
3157<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3158
Cary Clark493df1f2017-08-25 13:14:33 -04003159<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003160## getMaskFilter
3161
Cary Clarka560c472017-11-27 10:44:06 -05003162<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003163SkMaskFilter* getMaskFilter() const
3164</pre>
3165
Cary Clark4c06f5e2017-08-04 12:48:24 -04003166Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3167Does 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 -04003168
3169### Return Value
3170
Cary Clark4c06f5e2017-08-04 12:48:24 -04003171<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003172
3173### Example
3174
3175<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3176
3177#### Example Output
3178
3179~~~~
3180nullptr == mask filter
3181nullptr != mask filter
3182~~~~
3183
3184</fiddle-embed></div>
3185
3186---
3187
Cary Clark493df1f2017-08-25 13:14:33 -04003188<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003189## refMaskFilter
3190
Cary Clarka560c472017-11-27 10:44:06 -05003191<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003192sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003193</pre>
3194
Cary Clark4c06f5e2017-08-04 12:48:24 -04003195Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003196
Cary Clark4c06f5e2017-08-04 12:48:24 -04003197Increases <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 -04003198
3199### Return Value
3200
Cary Clark4c06f5e2017-08-04 12:48:24 -04003201<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003202
3203### Example
3204
3205<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3206
3207#### Example Output
3208
3209~~~~
3210mask filter unique: true
3211mask filter unique: false
3212~~~~
3213
3214</fiddle-embed></div>
3215
3216---
3217
Cary Clark493df1f2017-08-25 13:14:33 -04003218<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003219## setMaskFilter
3220
Cary Clarka560c472017-11-27 10:44:06 -05003221<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003222void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003223</pre>
3224
Cary Clark6fc50412017-09-21 12:31:06 -04003225Sets <a href="undocumented#Mask_Filter">Mask Filter</a> to <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3226<a href="undocumented#Mask_Filter">Mask Filter</a>. Pass nullptr to clear <a href="undocumented#Mask_Filter">Mask Filter</a> and leave <a href="undocumented#Mask_Filter">Mask Filter</a> effect on
3227<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3228
Cary Clark4c06f5e2017-08-04 12:48:24 -04003229Does not affect <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003230Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003231
3232### Parameters
3233
Cary Clark8cc16c72017-08-25 11:51:49 -04003234<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003235modifies clipping mask generated from drawn geometry</td>
3236 </tr>
3237</table>
3238
3239### Example
3240
3241<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3242
3243---
3244
3245# <a name="Typeface_Methods"></a> Typeface Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003246<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3247<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3248The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003249implementation.
3250
3251### Example
3252
Ben Wagner700ff172017-11-08 15:37:22 -05003253<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003254
Cary Clark493df1f2017-08-25 13:14:33 -04003255<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003256## getTypeface
3257
Cary Clarka560c472017-11-27 10:44:06 -05003258<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003259SkTypeface* getTypeface() const
3260</pre>
3261
Cary Clark4c06f5e2017-08-04 12:48:24 -04003262Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003263Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003264
3265### Return Value
3266
Cary Clark4c06f5e2017-08-04 12:48:24 -04003267<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003268
3269### Example
3270
Cary Clark71961fb2018-01-05 14:21:59 -05003271<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003272
3273#### Example Output
3274
3275~~~~
3276nullptr == typeface
3277nullptr != typeface
3278~~~~
3279
3280</fiddle-embed></div>
3281
3282---
3283
Cary Clark493df1f2017-08-25 13:14:33 -04003284<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003285## refTypeface
3286
Cary Clarka560c472017-11-27 10:44:06 -05003287<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003288sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003289</pre>
3290
Cary Clark4c06f5e2017-08-04 12:48:24 -04003291Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003292
3293### Return Value
3294
Cary Clark4c06f5e2017-08-04 12:48:24 -04003295<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003296
3297### Example
3298
Cary Clark71961fb2018-01-05 14:21:59 -05003299<div><fiddle-embed name="4bf8ed109c4b46d8a05c8b7763c1982c">
Cary Clark12799e12017-07-28 15:18:29 -04003300
3301#### Example Output
3302
3303~~~~
3304typeface1 != typeface2
3305typeface1 == typeface2
3306~~~~
3307
3308</fiddle-embed></div>
3309
3310---
3311
Cary Clark493df1f2017-08-25 13:14:33 -04003312<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003313## setTypeface
3314
Cary Clarka560c472017-11-27 10:44:06 -05003315<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003316void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003317</pre>
3318
Cary Clark7cfcbca2018-01-04 16:11:51 -05003319Sets <a href="undocumented#Typeface">Typeface</a> to <a href="#SkPaint_setTypeface_typeface">typeface</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Typeface">Typeface</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003320Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3321<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003322
3323### Parameters
3324
Cary Clark8cc16c72017-08-25 11:51:49 -04003325<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003326font and style used to draw text</td>
3327 </tr>
3328</table>
3329
3330### Example
3331
Cary Clark71961fb2018-01-05 14:21:59 -05003332<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003333
3334---
3335
3336# <a name="Rasterizer_Methods"></a> Rasterizer Methods
Cary Clark7cfcbca2018-01-04 16:11:51 -05003337<a href="undocumented#Rasterizer">Rasterizer</a> controls how shapes are converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003338<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>,
3339and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003340
Cary Clark4c06f5e2017-08-04 12:48:24 -04003341<a href="undocumented#Rasterizer">Rasterizer</a> may change the geometry and transparency of the shape, such as
Cary Clark8cc16c72017-08-25 11:51:49 -04003342creating 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 -04003343creates effects like embossing and outlining.
Cary Clark6fc50412017-09-21 12:31:06 -04003344
Cary Clarkbc5697d2017-10-04 14:31:33 -04003345<a href="undocumented#Rasterizer">Rasterizer</a> applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Arc">Arcs</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003346<a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003347
3348### Example
3349
3350<div><fiddle-embed name="e63f8a50996699342a14c6e54d684108"></fiddle-embed></div>
3351
Cary Clark493df1f2017-08-25 13:14:33 -04003352<a name="SkPaint_getRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003353## getRasterizer
3354
Cary Clarka560c472017-11-27 10:44:06 -05003355<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003356SkRasterizer* getRasterizer() const
3357</pre>
3358
Cary Clark4c06f5e2017-08-04 12:48:24 -04003359Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3360Does not alter <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003361
3362### Return Value
3363
Cary Clark4c06f5e2017-08-04 12:48:24 -04003364<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003365
3366### Example
3367
3368<div><fiddle-embed name="0707d407c3a14388b107af8ae5873e55">
3369
3370#### Example Output
3371
3372~~~~
3373nullptr == rasterizer
3374nullptr != rasterizer
3375~~~~
3376
3377</fiddle-embed></div>
3378
3379---
3380
Cary Clark493df1f2017-08-25 13:14:33 -04003381<a name="SkPaint_refRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003382## refRasterizer
3383
Cary Clarka560c472017-11-27 10:44:06 -05003384<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003385sk_sp&lt;SkRasterizer&gt; refRasterizer() const
Cary Clark12799e12017-07-28 15:18:29 -04003386</pre>
3387
Cary Clark4c06f5e2017-08-04 12:48:24 -04003388Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3389Increases <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003390
3391### Return Value
3392
Cary Clark4c06f5e2017-08-04 12:48:24 -04003393<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003394
3395### Example
3396
3397<div><fiddle-embed name="c0855ce19a33cb7e5747750ef341b7b3">
3398
3399#### Example Output
3400
3401~~~~
3402rasterizer unique: true
3403rasterizer unique: false
3404~~~~
3405
3406</fiddle-embed></div>
3407
3408---
3409
Cary Clark493df1f2017-08-25 13:14:33 -04003410<a name="SkPaint_setRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003411## setRasterizer
3412
Cary Clarka560c472017-11-27 10:44:06 -05003413<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003414void setRasterizer(sk_sp&lt;SkRasterizer&gt; rasterizer)
Cary Clark12799e12017-07-28 15:18:29 -04003415</pre>
3416
Cary Clark6fc50412017-09-21 12:31:06 -04003417Sets <a href="undocumented#Rasterizer">Rasterizer</a> to <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3418<a href="undocumented#Rasterizer">Rasterizer</a>. Pass nullptr to clear <a href="undocumented#Rasterizer">Rasterizer</a> and leave <a href="undocumented#Rasterizer">Rasterizer</a> effect on
3419<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3420
Cary Clark4c06f5e2017-08-04 12:48:24 -04003421Does not affect <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003422Increments <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003423
3424### Parameters
3425
Cary Clark8cc16c72017-08-25 11:51:49 -04003426<table> <tr> <td><a name="SkPaint_setRasterizer_rasterizer"> <code><strong>rasterizer </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003427how geometry is converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003428 </tr>
3429</table>
3430
3431### Example
3432
3433<div><fiddle-embed name="aec8ed9296c1628073086a33039f62b7"></fiddle-embed></div>
3434
3435---
3436
3437# <a name="Image_Filter_Methods"></a> Image Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003438<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3439with <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 -04003440which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003441
Cary Clark4c06f5e2017-08-04 12:48:24 -04003442<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 Clarkce101242017-09-01 15:51:02 -04003443can operate on all channels of <a href="undocumented#Color">Color</a>, while <a href="undocumented#Mask_Filter">Mask Filter</a> generates <a href="#Alpha">Alpha</a> only.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003444<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
3445<a href="undocumented#Mask_Filter">Mask Filter</a> and <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003446
3447### Example
3448
Cary Clarka560c472017-11-27 10:44:06 -05003449<div><fiddle-embed name="0b2eec148d6397d6231e1fa0b3d1496d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003450
Cary Clark493df1f2017-08-25 13:14:33 -04003451<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003452## getImageFilter
3453
Cary Clarka560c472017-11-27 10:44:06 -05003454<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003455SkImageFilter* getImageFilter() const
3456</pre>
3457
Cary Clark4c06f5e2017-08-04 12:48:24 -04003458Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3459Does 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 -04003460
3461### Return Value
3462
Cary Clark4c06f5e2017-08-04 12:48:24 -04003463<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003464
3465### Example
3466
Cary Clarka560c472017-11-27 10:44:06 -05003467<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003468
3469#### Example Output
3470
3471~~~~
3472nullptr == image filter
3473nullptr != image filter
3474~~~~
3475
3476</fiddle-embed></div>
3477
3478---
3479
Cary Clark493df1f2017-08-25 13:14:33 -04003480<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003481## refImageFilter
3482
Cary Clarka560c472017-11-27 10:44:06 -05003483<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003484sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003485</pre>
3486
Cary Clark4c06f5e2017-08-04 12:48:24 -04003487Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3488Increases <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 -04003489
3490### Return Value
3491
Cary Clark4c06f5e2017-08-04 12:48:24 -04003492<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003493
3494### Example
3495
3496<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3497
3498#### Example Output
3499
3500~~~~
3501image filter unique: true
3502image filter unique: false
3503~~~~
3504
3505</fiddle-embed></div>
3506
3507---
3508
Cary Clark493df1f2017-08-25 13:14:33 -04003509<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003510## setImageFilter
3511
Cary Clarka560c472017-11-27 10:44:06 -05003512<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003513void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003514</pre>
3515
Cary Clark6fc50412017-09-21 12:31:06 -04003516Sets <a href="undocumented#Image_Filter">Image Filter</a> to <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3517<a href="undocumented#Image_Filter">Image Filter</a>. Pass nullptr to clear <a href="undocumented#Image_Filter">Image Filter</a>, and remove <a href="undocumented#Image_Filter">Image Filter</a> effect
Cary Clark12799e12017-07-28 15:18:29 -04003518on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003519
Cary Clark4c06f5e2017-08-04 12:48:24 -04003520Does not affect <a href="undocumented#Rasterizer">Rasterizer</a> or <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003521Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003522
3523### Parameters
3524
Cary Clark8cc16c72017-08-25 11:51:49 -04003525<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003526how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003527 </tr>
3528</table>
3529
3530### Example
3531
3532<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3533
3534---
3535
3536# <a name="Draw_Looper_Methods"></a> Draw Looper Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003537<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 -04003538to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003539
Cary Clark4c06f5e2017-08-04 12:48:24 -04003540<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3541<a href="undocumented#Draw_Looper">Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003542Set <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 -04003543
3544### Example
3545
3546<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3547
Cary Clark493df1f2017-08-25 13:14:33 -04003548<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003549## getDrawLooper
3550
Cary Clarka560c472017-11-27 10:44:06 -05003551<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003552SkDrawLooper* getDrawLooper() const
3553</pre>
3554
Cary Clark4c06f5e2017-08-04 12:48:24 -04003555Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3556Does 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 -04003557
3558### Return Value
3559
Cary Clark4c06f5e2017-08-04 12:48:24 -04003560<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003561
3562### Example
3563
3564<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3565
3566#### Example Output
3567
3568~~~~
3569nullptr == draw looper
3570nullptr != draw looper
3571~~~~
3572
3573</fiddle-embed></div>
3574
3575---
3576
Cary Clark493df1f2017-08-25 13:14:33 -04003577<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003578## refDrawLooper
3579
Cary Clarka560c472017-11-27 10:44:06 -05003580<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003581sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003582</pre>
3583
Cary Clark4c06f5e2017-08-04 12:48:24 -04003584Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3585Increases <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 -04003586
3587### Return Value
3588
Cary Clark4c06f5e2017-08-04 12:48:24 -04003589<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003590
3591### Example
3592
3593<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3594
3595#### Example Output
3596
3597~~~~
3598draw looper unique: true
3599draw looper unique: false
3600~~~~
3601
3602</fiddle-embed></div>
3603
3604---
3605
Cary Clark493df1f2017-08-25 13:14:33 -04003606<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003607## getLooper
3608
Cary Clarka560c472017-11-27 10:44:06 -05003609<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003610SkDrawLooper* getLooper() const
3611</pre>
3612
3613Deprecated.
3614
3615(see bug.skia.org/6259)
3616
3617### Return Value
3618
Cary Clark4c06f5e2017-08-04 12:48:24 -04003619<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003620
3621---
3622
Cary Clark493df1f2017-08-25 13:14:33 -04003623<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003624## setDrawLooper
3625
Cary Clarka560c472017-11-27 10:44:06 -05003626<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003627void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003628</pre>
3629
Cary Clark6fc50412017-09-21 12:31:06 -04003630Sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3631<a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>. Pass nullptr to clear <a href="undocumented#Draw_Looper">Draw Looper</a> and leave <a href="undocumented#Draw_Looper">Draw Looper</a> effect on
3632drawing unaltered.
3633
3634Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003635
3636### Parameters
3637
Cary Clark8cc16c72017-08-25 11:51:49 -04003638<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003639iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003640 </tr>
3641</table>
3642
3643### Example
3644
3645<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3646
3647---
3648
Cary Clark493df1f2017-08-25 13:14:33 -04003649<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003650## setLooper
3651
Cary Clarka560c472017-11-27 10:44:06 -05003652<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003653void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003654</pre>
3655
3656Deprecated.
3657
3658(see bug.skia.org/6259)
3659
3660### Parameters
3661
Cary Clark8cc16c72017-08-25 11:51:49 -04003662<table> <tr> <td><a name="SkPaint_setLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3663sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setLooper_drawLooper">drawLooper</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003664 </tr>
3665
3666---
3667
3668</table>
3669
3670# <a name="Text_Align"></a> Text Align
3671
Cary Clark8cc16c72017-08-25 11:51:49 -04003672## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003673
Cary Clarka560c472017-11-27 10:44:06 -05003674<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003675enum <a href="#SkPaint_Align">Align</a> {
3676<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3677<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3678<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003679};</pre>
3680
Cary Clark8cc16c72017-08-25 11:51:49 -04003681<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003682<a href="#SkPaint_Align">Align</a> affects <a href="#Glyph">Glyphs</a> drawn with: <a href="#SkCanvas_drawText">SkCanvas::drawText</a>, <a href="#SkCanvas_drawPosText">SkCanvas::drawPosText</a>,
Cary Clark7cfcbca2018-01-04 16:11:51 -05003683<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04003684<a href="#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
Cary Clark7cfcbca2018-01-04 16:11:51 -05003685and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003686as well as calls that place text <a href="#Glyph">Glyphs</a> like <a href="#SkPaint_getTextWidths">getTextWidths</a> and <a href="#SkPaint_getTextPath">getTextPath</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003687
3688The text position is set by the font for both horizontal and vertical text.
3689Typically, for horizontal text, the position is to the left side of the glyph on the
3690base line; and for vertical text, the position is the horizontal center of the glyph
3691at the caps height.
3692
Cary Clark7cfcbca2018-01-04 16:11:51 -05003693<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 -04003694using the metrics returned by the font.
3695
Cary Clark8cc16c72017-08-25 11:51:49 -04003696<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003697
3698### Constants
3699
3700<table>
3701 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003702 <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 -04003703 </tr>
3704 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003705 <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
3706half 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 -04003707 </tr>
3708 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003709 <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,
3710and 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 -04003711 </tr>
3712
3713</table>
3714
Cary Clark8cc16c72017-08-25 11:51:49 -04003715## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003716
Cary Clarka560c472017-11-27 10:44:06 -05003717<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003718enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003719<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003720};</pre>
3721
3722### Constants
3723
3724<table>
3725 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003726 <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 -04003727 </tr>
3728
3729</table>
3730
3731### Example
3732
3733<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3734
3735### Example
3736
Cary Clark8cc16c72017-08-25 11:51:49 -04003737<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 -04003738
Cary Clark493df1f2017-08-25 13:14:33 -04003739<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003740## getTextAlign
3741
Cary Clarka560c472017-11-27 10:44:06 -05003742<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003743Align getTextAlign() const
3744</pre>
3745
Cary Clark8cc16c72017-08-25 11:51:49 -04003746Returns <a href="#Text_Align">Text Align</a>.
3747Returns <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 -04003748
3749### Return Value
3750
3751text placement relative to position
3752
3753### Example
3754
3755<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3756
3757#### Example Output
3758
3759~~~~
3760kLeft_Align == default
3761~~~~
3762
3763</fiddle-embed></div>
3764
3765---
3766
Cary Clark493df1f2017-08-25 13:14:33 -04003767<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003768## setTextAlign
3769
Cary Clarka560c472017-11-27 10:44:06 -05003770<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003771void setTextAlign(Align align)
3772</pre>
3773
Cary Clark8cc16c72017-08-25 11:51:49 -04003774Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3775Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003776
3777### Parameters
3778
Cary Clark8cc16c72017-08-25 11:51:49 -04003779<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003780text placement relative to position</td>
3781 </tr>
3782</table>
3783
3784### Example
3785
Cary Clark4c06f5e2017-08-04 12:48:24 -04003786<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 -04003787alignment out of range has no effect.</div></fiddle-embed></div>
3788
3789---
3790
3791# <a name="Text_Size"></a> Text Size
Cary Clark8cc16c72017-08-25 11:51:49 -04003792<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3793<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3794<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003795Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003796
3797### Example
3798
3799<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3800
Cary Clark493df1f2017-08-25 13:14:33 -04003801<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003802## getTextSize
3803
Cary Clarka560c472017-11-27 10:44:06 -05003804<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003805SkScalar getTextSize() const
3806</pre>
3807
Cary Clark8cc16c72017-08-25 11:51:49 -04003808Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003809
3810### Return Value
3811
3812typographic height of text
3813
3814### Example
3815
3816<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3817
3818---
3819
Cary Clark493df1f2017-08-25 13:14:33 -04003820<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003821## setTextSize
3822
Cary Clarka560c472017-11-27 10:44:06 -05003823<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003824void setTextSize(SkScalar textSize)
3825</pre>
3826
Cary Clark8cc16c72017-08-25 11:51:49 -04003827Sets <a href="#Text_Size">Text Size</a> in points.
3828Has 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 -04003829
3830### Parameters
3831
Cary Clark8cc16c72017-08-25 11:51:49 -04003832<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003833typographic height of text</td>
3834 </tr>
3835</table>
3836
3837### Example
3838
3839<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3840
3841---
3842
3843# <a name="Text_Scale_X"></a> Text Scale X
Cary Clark8cc16c72017-08-25 11:51:49 -04003844<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003845<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003846is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003847<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3848<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003849
3850### Example
3851
3852<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3853
Cary Clark493df1f2017-08-25 13:14:33 -04003854<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003855## getTextScaleX
3856
Cary Clarka560c472017-11-27 10:44:06 -05003857<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003858SkScalar getTextScaleX() const
3859</pre>
3860
Cary Clark8cc16c72017-08-25 11:51:49 -04003861Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003862Default value is 1.
3863
3864### Return Value
3865
3866text horizontal scale
3867
3868### Example
3869
3870<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3871
3872---
3873
Cary Clark493df1f2017-08-25 13:14:33 -04003874<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003875## setTextScaleX
3876
Cary Clarka560c472017-11-27 10:44:06 -05003877<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003878void setTextScaleX(SkScalar scaleX)
3879</pre>
3880
Cary Clark8cc16c72017-08-25 11:51:49 -04003881Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003882Default value is 1.
3883
3884### Parameters
3885
Cary Clark8cc16c72017-08-25 11:51:49 -04003886<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003887text horizontal scale</td>
3888 </tr>
3889</table>
3890
3891### Example
3892
3893<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3894
3895---
3896
3897# <a name="Text_Skew_X"></a> Text Skew X
Cary Clark8cc16c72017-08-25 11:51:49 -04003898<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003899<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003900is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003901<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3902<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003903
3904### Example
3905
3906<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3907
Cary Clark493df1f2017-08-25 13:14:33 -04003908<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003909## getTextSkewX
3910
Cary Clarka560c472017-11-27 10:44:06 -05003911<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003912SkScalar getTextSkewX() const
3913</pre>
3914
Cary Clark8cc16c72017-08-25 11:51:49 -04003915Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003916Default value is zero.
3917
3918### Return Value
3919
3920additional shear in x-axis relative to y-axis
3921
3922### Example
3923
3924<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3925
3926---
3927
Cary Clark493df1f2017-08-25 13:14:33 -04003928<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003929## setTextSkewX
3930
Cary Clarka560c472017-11-27 10:44:06 -05003931<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003932void setTextSkewX(SkScalar skewX)
3933</pre>
3934
Cary Clark8cc16c72017-08-25 11:51:49 -04003935Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003936Default value is zero.
3937
3938### Parameters
3939
Cary Clark8cc16c72017-08-25 11:51:49 -04003940<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003941additional shear in x-axis relative to y-axis</td>
3942 </tr>
3943</table>
3944
3945### Example
3946
3947<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3948
3949---
3950
3951# <a name="Text_Encoding"></a> Text Encoding
3952
Cary Clark8cc16c72017-08-25 11:51:49 -04003953## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003954
Cary Clarka560c472017-11-27 10:44:06 -05003955<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003956enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3957<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3958<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3959<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3960<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003961};</pre>
3962
Cary Clark6fc50412017-09-21 12:31:06 -04003963<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003964size, or glyph indices. Characters are encoded as specified by the <a href="http://unicode.org/standard/standard.html">Unicode standard</a> .
Cary Clark6fc50412017-09-21 12:31:06 -04003965
Cary Clarka560c472017-11-27 10:44:06 -05003966Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003967All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003968in the total storage required.
3969
Cary Clark7cfcbca2018-01-04 16:11:51 -05003970<a href="https://tools.ietf.org/html/rfc3629">UTF-8 (RFC 3629)</a> encodes each character as one or more 8-bit bytes.
Cary Clark6fc50412017-09-21 12:31:06 -04003971
Cary Clark7cfcbca2018-01-04 16:11:51 -05003972<a href="https://tools.ietf.org/html/rfc2781">UTF-16 (RFC 2781)</a> encodes each character as one or two 16-bit words.
Cary Clark6fc50412017-09-21 12:31:06 -04003973
Cary Clark7cfcbca2018-01-04 16:11:51 -05003974<a href="http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf">UTF-32</a> encodes each character as one 32-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003975
Cary Clark7cfcbca2018-01-04 16:11:51 -05003976<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 -04003977A glyph index is a 16-bit word.
3978
Cary Clark8cc16c72017-08-25 11:51:49 -04003979<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 -04003980
3981### Constants
3982
3983<table>
3984 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003985 <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent UTF-8 or ASCII.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003986 </tr>
3987 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003988 <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 Unicode.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003989 </tr>
3990 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003991 <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 Unicode.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003992 </tr>
3993 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003994 <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 -04003995 </tr>
3996
3997</table>
3998
3999### Example
4000
Cary Clarka560c472017-11-27 10:44:06 -05004001<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4002Second line is encoded in UTF-16.
4003Third line is encoded in UTF-32.
Cary Clark12799e12017-07-28 15:18:29 -04004004Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
4005
Cary Clark493df1f2017-08-25 13:14:33 -04004006<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004007## getTextEncoding
4008
Cary Clarka560c472017-11-27 10:44:06 -05004009<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004010TextEncoding getTextEncoding() const
4011</pre>
4012
Cary Clark8cc16c72017-08-25 11:51:49 -04004013Returns <a href="#Text_Encoding">Text Encoding</a>.
4014<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 -04004015
4016### Return Value
4017
Cary Clark7cfcbca2018-01-04 16:11:51 -05004018one 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
Cary Clark8cc16c72017-08-25 11:51:49 -04004019<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004020
4021### Example
4022
4023<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
4024
4025#### Example Output
4026
4027~~~~
4028kUTF8_TextEncoding == text encoding
4029kGlyphID_TextEncoding == text encoding
4030~~~~
4031
4032</fiddle-embed></div>
4033
4034---
4035
Cary Clark493df1f2017-08-25 13:14:33 -04004036<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004037## setTextEncoding
4038
Cary Clarka560c472017-11-27 10:44:06 -05004039<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004040void setTextEncoding(TextEncoding encoding)
4041</pre>
4042
Cary Clark7cfcbca2018-01-04 16:11:51 -05004043Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004044<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
4045Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004046
4047### Parameters
4048
Cary Clark8cc16c72017-08-25 11:51:49 -04004049<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05004050one 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
Cary Clark8cc16c72017-08-25 11:51:49 -04004051<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004052 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004053#
4054
Cary Clark12799e12017-07-28 15:18:29 -04004055</table>
4056
4057### Example
4058
4059<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
4060
4061#### Example Output
4062
4063~~~~
40644 != text encoding
4065~~~~
4066
4067</fiddle-embed></div>
4068
4069---
4070
4071# <a name="Font_Metrics"></a> Font Metrics
Cary Clarkce101242017-09-01 15:51:02 -04004072<a href="#Font_Metrics">Font Metrics</a> describe dimensions common to the <a href="#Glyph">Glyphs</a> in <a href="undocumented#Typeface">Typeface</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004073The 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 -04004074<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004075
Cary Clark4c06f5e2017-08-04 12:48:24 -04004076<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 -04004077X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4078are positive.
4079Y-axis values above the baseline are negative, and below the baseline are positive.
4080
4081### Example
4082
Ben Wagnere5806492017-11-09 12:08:31 -05004083<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004084
Cary Clark8cc16c72017-08-25 11:51:49 -04004085# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004086
Cary Clarka560c472017-11-27 10:44:06 -05004087<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004088struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4089enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4090<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4091<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4092<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4093<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004094};
4095
Cary Clark8cc16c72017-08-25 11:51:49 -04004096uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4097<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4098<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4099<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4100<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4101<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4102<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4103<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4104<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4105<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4106<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4107<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4108<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4109<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4110<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4111<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004112
Cary Clark8cc16c72017-08-25 11:51:49 -04004113bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4114bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4115bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4116bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004117};</pre>
4118
Cary Clark154beea2017-10-26 07:58:48 -04004119<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
4120computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4121not available.
4122
Ben Wagnere5806492017-11-09 12:08:31 -05004123All vertical values relative to the baseline are given y-down. As such, zero is on the
4124baseline, negative values are above the baseline, and positive values are below the
4125baseline.
4126
Cary Clark154beea2017-10-26 07:58:48 -04004127<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
4128are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004129
Cary Clark154beea2017-10-26 07:58:48 -04004130<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
4131are valid, since their value may be zero.
4132
Cary Clark8cc16c72017-08-25 11:51:49 -04004133## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004134
Cary Clarka560c472017-11-27 10:44:06 -05004135<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004136enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4137<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4138<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4139<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4140<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004141};</pre>
4142
Cary Clark154beea2017-10-26 07:58:48 -04004143<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4144the underline or strikeout metric may be valid and zero.
4145Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4146
Cary Clark12799e12017-07-28 15:18:29 -04004147### Constants
4148
4149<table>
4150 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004151 <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 -04004152 </tr>
4153 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004154 <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 -04004155 </tr>
4156 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004157 <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 -04004158 </tr>
4159 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004160 <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 -04004161 </tr>
4162
4163</table>
4164
Cary Clark8cc16c72017-08-25 11:51:49 -04004165<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004166
Cary Clark8cc16c72017-08-25 11:51:49 -04004167<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004168
Cary Clark8cc16c72017-08-25 11:51:49 -04004169<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004170
Ben Wagnere5806492017-11-09 12:08:31 -05004171Greatest extent above the baseline for any glyph.
4172Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004173
Cary Clark8cc16c72017-08-25 11:51:49 -04004174<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004175
4176Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004177Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004178
Cary Clark8cc16c72017-08-25 11:51:49 -04004179<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004180
4181Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004182Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004183
Cary Clark8cc16c72017-08-25 11:51:49 -04004184<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004185
Ben Wagnere5806492017-11-09 12:08:31 -05004186Greatest extent below the baseline for any glyph.
4187Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004188
Cary Clark8cc16c72017-08-25 11:51:49 -04004189<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004190
4191Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004192Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004193
Cary Clark8cc16c72017-08-25 11:51:49 -04004194<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004195
4196Average character width, if it is available.
4197Zero if no average width is stored in the font.
4198
Cary Clark8cc16c72017-08-25 11:51:49 -04004199<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004200
4201Maximum character width.
4202
Cary Clark8cc16c72017-08-25 11:51:49 -04004203<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004204
Ben Wagnere5806492017-11-09 12:08:31 -05004205Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004206Typically less than zero.
4207
Cary Clark8cc16c72017-08-25 11:51:49 -04004208<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004209
Cary Clarkce101242017-09-01 15:51:02 -04004210Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004211Typically greater than zero.
4212
Cary Clark8cc16c72017-08-25 11:51:49 -04004213<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004214
4215Height of a lower-case 'x'.
4216May be zero if no lower-case height is stored in the font.
4217
Cary Clark8cc16c72017-08-25 11:51:49 -04004218<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004219
4220Height of an upper-case letter.
4221May be zero if no upper-case height is stored in the font.
4222
Cary Clark8cc16c72017-08-25 11:51:49 -04004223<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004224
Ben Wagnere5806492017-11-09 12:08:31 -05004225Underline thickness.
4226
4227If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004228If <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 -04004229
Cary Clark8cc16c72017-08-25 11:51:49 -04004230<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004231
Ben Wagnere5806492017-11-09 12:08:31 -05004232Position of the top of the underline stroke relative to the baseline.
4233Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004234
Cary Clark8cc16c72017-08-25 11:51:49 -04004235If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4236If <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 -04004237
Cary Clark8cc16c72017-08-25 11:51:49 -04004238<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004239
Ben Wagnere5806492017-11-09 12:08:31 -05004240Strikeout thickness.
4241
4242If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004243If <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 -04004244
Cary Clark8cc16c72017-08-25 11:51:49 -04004245<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004246
Ben Wagnere5806492017-11-09 12:08:31 -05004247Position of the bottom of the strikeout stroke relative to the baseline.
4248Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004249
Cary Clark8cc16c72017-08-25 11:51:49 -04004250If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4251If <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 -04004252
Cary Clark493df1f2017-08-25 13:14:33 -04004253<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004254## hasUnderlineThickness
4255
Cary Clarka560c472017-11-27 10:44:06 -05004256<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004257bool hasUnderlineThickness(SkScalar* thickness) const
4258</pre>
4259
Ben Wagnere5806492017-11-09 12:08:31 -05004260If <a href="#Font_Metrics">Font Metrics</a> has a valid underline <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004261<a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a> to that value. If the underline <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a> is not valid,
4262return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004263
4264### Parameters
4265
Cary Clark8cc16c72017-08-25 11:51:49 -04004266<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004267storage for underline width</td>
4268 </tr>
4269</table>
4270
4271### Return Value
4272
4273true if font specifies underline width
4274
4275---
4276
Cary Clark493df1f2017-08-25 13:14:33 -04004277<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004278## hasUnderlinePosition
4279
Cary Clarka560c472017-11-27 10:44:06 -05004280<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004281bool hasUnderlinePosition(SkScalar* position) const
4282</pre>
4283
Ben Wagnere5806492017-11-09 12:08:31 -05004284If <a href="#Font_Metrics">Font Metrics</a> has a valid underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004285<a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a> to that value. If the underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a> is not valid,
4286return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004287
4288### Parameters
4289
Cary Clark8cc16c72017-08-25 11:51:49 -04004290<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4291storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004292 </tr>
4293</table>
4294
4295### Return Value
4296
Cary Clark8cc16c72017-08-25 11:51:49 -04004297true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004298
4299---
4300
Cary Clark493df1f2017-08-25 13:14:33 -04004301<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004302## hasStrikeoutThickness
4303
Cary Clarka560c472017-11-27 10:44:06 -05004304<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004305bool hasStrikeoutThickness(SkScalar* thickness) const
4306</pre>
4307
Ben Wagnere5806492017-11-09 12:08:31 -05004308If <a href="#Font_Metrics">Font Metrics</a> has a valid strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004309<a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a> to that value. If the underline <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a> is not valid,
4310return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004311
4312### Parameters
4313
Cary Clark8cc16c72017-08-25 11:51:49 -04004314<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004315storage for strikeout width</td>
4316 </tr>
4317</table>
4318
4319### Return Value
4320
4321true if font specifies strikeout width
4322
4323---
4324
Cary Clark493df1f2017-08-25 13:14:33 -04004325<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004326## hasStrikeoutPosition
4327
Cary Clarka560c472017-11-27 10:44:06 -05004328<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004329bool hasStrikeoutPosition(SkScalar* position) const
4330</pre>
4331
Ben Wagnere5806492017-11-09 12:08:31 -05004332If <a href="#Font_Metrics">Font Metrics</a> has a valid strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004333<a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a> to that value. If the underline <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a> is not valid,
4334return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004335
4336### Parameters
4337
Cary Clark8cc16c72017-08-25 11:51:49 -04004338<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4339storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004340 </tr>
4341</table>
4342
4343### Return Value
4344
Cary Clark8cc16c72017-08-25 11:51:49 -04004345true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004346
4347---
4348
Cary Clark493df1f2017-08-25 13:14:33 -04004349<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004350## getFontMetrics
4351
Cary Clarka560c472017-11-27 10:44:06 -05004352<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004353SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4354</pre>
4355
Cary Clark8cc16c72017-08-25 11:51:49 -04004356Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4357The 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 -04004358descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004359If <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>.
4360Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4361dimensions 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>,
4362<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4363Results 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 -04004364is ignored.
4365
4366### Parameters
4367
Cary Clark8cc16c72017-08-25 11:51:49 -04004368<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4369storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4370 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004371additional multiplier for returned values</td>
4372 </tr>
4373</table>
4374
4375### Return Value
4376
4377recommended spacing between lines
4378
4379### Example
4380
4381<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4382
4383### See Also
4384
Cary Clark8cc16c72017-08-25 11:51:49 -04004385<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 -04004386
4387---
4388
Cary Clark493df1f2017-08-25 13:14:33 -04004389<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004390## getFontSpacing
4391
Cary Clarka560c472017-11-27 10:44:06 -05004392<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004393SkScalar getFontSpacing() const
4394</pre>
4395
4396Returns the recommended spacing between lines: the sum of metrics
4397descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004398Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004399dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004400Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004401
4402### Return Value
4403
4404recommended spacing between lines
4405
4406### Example
4407
4408<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4409
4410#### Example Output
4411
4412~~~~
4413textSize: 12 fontSpacing: 13.9688
4414textSize: 18 fontSpacing: 20.9531
4415textSize: 24 fontSpacing: 27.9375
4416textSize: 32 fontSpacing: 37.25
4417~~~~
4418
4419</fiddle-embed></div>
4420
4421---
4422
Cary Clark493df1f2017-08-25 13:14:33 -04004423<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004424## getFontBounds
4425
Cary Clarka560c472017-11-27 10:44:06 -05004426<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004427SkRect getFontBounds() const
4428</pre>
4429
Cary Clarkce101242017-09-01 15:51:02 -04004430Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004431Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004432ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4433and <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 -04004434
Cary Clark8cc16c72017-08-25 11:51:49 -04004435If <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,
Cary Clark7cfcbca2018-01-04 16:11:51 -05004436returns the same bounds as <a href="#Font_Metrics">Font Metrics</a> { <a href="#SkPaint_FontMetrics_fXMin">FontMetrics::fXMin</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04004437<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 -04004438
4439### Return Value
4440
Cary Clarkce101242017-09-01 15:51:02 -04004441union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004442
4443### Example
4444
4445<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4446
4447#### Example Output
4448
4449~~~~
4450metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4451font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4452~~~~
4453
4454</fiddle-embed></div>
4455
4456---
4457
Cary Clark493df1f2017-08-25 13:14:33 -04004458<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004459## textToGlyphs
4460
Cary Clarka560c472017-11-27 10:44:06 -05004461<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004462int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4463</pre>
4464
Cary Clark8cc16c72017-08-25 11:51:49 -04004465Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4466Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4467<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>.
4468<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004469
Cary Clarkbc5697d2017-10-04 14:31:33 -04004470Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004471
Cary Clark8cc16c72017-08-25 11:51:49 -04004472If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4473If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004474
Cary Clark8cc16c72017-08-25 11:51:49 -04004475If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004476<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004477
4478### Parameters
4479
Cary Clark8cc16c72017-08-25 11:51:49 -04004480<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004481character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004482 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004483length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004484 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004485storage for glyph indices; may be nullptr</td>
4486 </tr>
4487</table>
4488
4489### Return Value
4490
Cary Clark8cc16c72017-08-25 11:51:49 -04004491number 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 -04004492
4493### Example
4494
4495<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4496
4497---
4498
Cary Clark493df1f2017-08-25 13:14:33 -04004499<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004500## countText
4501
Cary Clarka560c472017-11-27 10:44:06 -05004502<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004503int countText(const void* text, size_t byteLength) const
4504</pre>
4505
Cary Clarkce101242017-09-01 15:51:02 -04004506Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4507Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004508Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004509
4510### Parameters
4511
Cary Clark8cc16c72017-08-25 11:51:49 -04004512<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004513character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004514 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004515length of character storage in bytes</td>
4516 </tr>
4517</table>
4518
4519### Return Value
4520
Cary Clarkce101242017-09-01 15:51:02 -04004521number of <a href="#Glyph">Glyphs</a> represented by <a href="#SkPaint_countText_text">text</a> of length <a href="#SkPaint_countText_byteLength">byteLength</a>
Cary Clark12799e12017-07-28 15:18:29 -04004522
4523### Example
4524
4525<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4526
4527#### Example Output
4528
4529~~~~
4530count = 5
4531~~~~
4532
4533</fiddle-embed></div>
4534
4535---
4536
Cary Clark493df1f2017-08-25 13:14:33 -04004537<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004538## containsText
4539
Cary Clarka560c472017-11-27 10:44:06 -05004540<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004541bool containsText(const void* text, size_t byteLength) const
4542</pre>
4543
Cary Clark7cfcbca2018-01-04 16:11:51 -05004544Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004545Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004546<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004547
Cary Clark8cc16c72017-08-25 11:51:49 -04004548If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4549returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4550does 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 -04004551
Cary Clarkce101242017-09-01 15:51:02 -04004552Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004553
4554### Parameters
4555
Cary Clark8cc16c72017-08-25 11:51:49 -04004556<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004557array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004558 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4559number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004560 </tr>
4561</table>
4562
4563### Return Value
4564
Cary Clark8cc16c72017-08-25 11:51:49 -04004565true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004566
4567### Example
4568
Cary Clark8cc16c72017-08-25 11:51:49 -04004569<div><fiddle-embed name="9202369019552f09cd4bec7f3046fee4"><div><a href="#SkPaint_containsText">containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark7cfcbca2018-01-04 16:11:51 -05004570corresponding to the Unicode surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004571
4572#### Example Output
4573
4574~~~~
45750x00b0 == has char
45760xd800 != has char
4577~~~~
4578
4579</fiddle-embed></div>
4580
4581### Example
4582
Cary Clark8cc16c72017-08-25 11:51:49 -04004583<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 -04004584that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004585
4586#### Example Output
4587
4588~~~~
45890x01ff == has glyph
45900x0000 != has glyph
45910xffff == has glyph
4592~~~~
4593
4594</fiddle-embed></div>
4595
4596### See Also
4597
Cary Clark8cc16c72017-08-25 11:51:49 -04004598<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004599
4600---
4601
Cary Clark493df1f2017-08-25 13:14:33 -04004602<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004603## glyphsToUnichars
4604
Cary Clarka560c472017-11-27 10:44:06 -05004605<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004606void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4607</pre>
4608
Cary Clark7cfcbca2018-01-04 16:11:51 -05004609Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4610<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004611Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004612by <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 -04004613
Cary Clark7cfcbca2018-01-04 16:11:51 -05004614Only supported on platforms that use FreeType as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004615
4616### Parameters
4617
Cary Clark8cc16c72017-08-25 11:51:49 -04004618<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004619array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004620 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004621length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004622 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004623storage for character codes, one per glyph</td>
4624 </tr>
4625</table>
4626
4627### Example
4628
Cary Clark7cfcbca2018-01-04 16:11:51 -05004629<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert UTF-8 <a href="#SkPaint_glyphsToUnichars_text">text</a> to <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a>; then convert <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> to Unichar code points.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004630
4631---
4632
4633# <a name="Measure_Text"></a> Measure Text
4634
Cary Clark493df1f2017-08-25 13:14:33 -04004635<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004636## measureText
4637
Cary Clarka560c472017-11-27 10:44:06 -05004638<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004639SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4640</pre>
4641
Cary Clark8cc16c72017-08-25 11:51:49 -04004642Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4643and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4644The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4645Uses <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,
4646and <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
4647<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4648Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4649The 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 -04004650
4651### Parameters
4652
Cary Clark8cc16c72017-08-25 11:51:49 -04004653<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004654character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004655 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4656number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4657 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004658returns bounding box relative to (0, 0) if not nullptr</td>
4659 </tr>
4660</table>
4661
4662### Return Value
4663
4664advance width or height
4665
4666### Example
4667
4668<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4669
4670---
4671
Cary Clarka560c472017-11-27 10:44:06 -05004672<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004673SkScalar measureText(const void* text, size_t length) const
4674</pre>
4675
Cary Clark8cc16c72017-08-25 11:51:49 -04004676Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4677and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4678The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4679Uses <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,
4680and <a href="#Text_Size">Text Size</a> to scale the metrics.
4681Does 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 -04004682
4683### Parameters
4684
Cary Clark8cc16c72017-08-25 11:51:49 -04004685<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004686character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004687 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4688number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004689 </tr>
4690</table>
4691
4692### Return Value
4693
4694advance width or height
4695
4696### Example
4697
4698<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4699
4700#### Example Output
4701
4702~~~~
4703default width = 5
4704double width = 10
4705~~~~
4706
4707</fiddle-embed></div>
4708
4709---
4710
Cary Clark493df1f2017-08-25 13:14:33 -04004711<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004712## breakText
4713
Cary Clarka560c472017-11-27 10:44:06 -05004714<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004715size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004716 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004717</pre>
4718
Cary Clark8cc16c72017-08-25 11:51:49 -04004719Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4720If <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
4721equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4722If <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
4723equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4724Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4725Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4726Uses <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,
4727and <a href="#Text_Size">Text Size</a> to scale the metrics.
4728Does 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 -04004729
4730### Parameters
4731
Cary Clark8cc16c72017-08-25 11:51:49 -04004732<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004733character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004734 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4735number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4736 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4737advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4738 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4739returns 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 -04004740 </tr>
4741</table>
4742
4743### Return Value
4744
Cary Clark8cc16c72017-08-25 11:51:49 -04004745bytes 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 -04004746
4747### Example
4748
Cary Clark4c06f5e2017-08-04 12:48:24 -04004749<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 -04004750<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 -04004751
4752---
4753
Cary Clark493df1f2017-08-25 13:14:33 -04004754<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004755## getTextWidths
4756
Cary Clarka560c472017-11-27 10:44:06 -05004757<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4758int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004759</pre>
4760
Cary Clark8cc16c72017-08-25 11:51:49 -04004761Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4762the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4763Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4764If <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.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004765if <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.
Cary Clark8cc16c72017-08-25 11:51:49 -04004766If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4767If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4768Uses <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,
4769and <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>.
4770Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4771Does 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 -04004772
4773### Parameters
4774
Cary Clark8cc16c72017-08-25 11:51:49 -04004775<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004776character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004777 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4778number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4779 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4780returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4781 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4782returns <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 -04004783 </tr>
4784</table>
4785
4786### Return Value
4787
Cary Clark8cc16c72017-08-25 11:51:49 -04004788glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004789
4790### Example
4791
Cary Clarkce101242017-09-01 15:51:02 -04004792<div><fiddle-embed name="6b9e101f49e9c2c28755c5bdcef64dfb"><div>Bounds of <a href="#Glyph">Glyphs</a> increase for stroked <a href="#SkPaint_getTextWidths_text">text</a>, but <a href="#SkPaint_getTextWidths_text">text</a> advance remains the same.
Cary Clark8cc16c72017-08-25 11:51:49 -04004793The 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 -04004794
4795---
4796
4797# <a name="Text_Path"></a> Text Path
Cary Clarkce101242017-09-01 15:51:02 -04004798<a href="#Text_Path">Text Path</a> describes the geometry of <a href="#Glyph">Glyphs</a> used to draw text.
Cary Clark12799e12017-07-28 15:18:29 -04004799
Cary Clark493df1f2017-08-25 13:14:33 -04004800<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004801## getTextPath
4802
Cary Clarka560c472017-11-27 10:44:06 -05004803<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4804void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004805</pre>
4806
Cary Clark8cc16c72017-08-25 11:51:49 -04004807Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4808Uses <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,
4809and <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.
4810All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4811Uses <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 -04004812
4813### Parameters
4814
Cary Clark8cc16c72017-08-25 11:51:49 -04004815<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004816character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004817 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4818number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4819 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004820<a href="#SkPaint_getTextPath_x">x</a>-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004821 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004822<a href="#SkPaint_getTextPath_y">y</a>-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004823 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004824geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004825 </tr>
4826</table>
4827
4828### Example
4829
Cary Clark4c06f5e2017-08-04 12:48:24 -04004830<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 -04004831the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4832
4833---
4834
Cary Clark493df1f2017-08-25 13:14:33 -04004835<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004836## getPosTextPath
4837
Cary Clarka560c472017-11-27 10:44:06 -05004838<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4839void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004840</pre>
4841
Cary Clark8cc16c72017-08-25 11:51:49 -04004842Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4843Uses <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,
4844and <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.
4845All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4846Uses <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>.
4847<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004848
4849### Parameters
4850
Cary Clark8cc16c72017-08-25 11:51:49 -04004851<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004852character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004853 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4854number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4855 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004856positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004857 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004858geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004859 </tr>
4860</table>
4861
4862### Example
4863
Cary Clarkce101242017-09-01 15:51:02 -04004864<div><fiddle-embed name="7f27c93472aa99a7542fb3493076f072"><div>Simplifies three <a href="#Glyph">Glyphs</a> to eliminate overlaps, and strokes the result.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004865
4866---
4867
4868# <a name="Text_Intercepts"></a> Text Intercepts
Cary Clarkce101242017-09-01 15:51:02 -04004869<a href="#Text_Intercepts">Text Intercepts</a> describe the intersection of drawn text <a href="#Glyph">Glyphs</a> with a pair
Cary Clark8cc16c72017-08-25 11:51:49 -04004870of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004871underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004872
Cary Clark493df1f2017-08-25 13:14:33 -04004873<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004874## getTextIntercepts
4875
Cary Clarka560c472017-11-27 10:44:06 -05004876<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004877int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4878 const SkScalar bounds[2], SkScalar* intervals) const
4879</pre>
4880
Cary Clark8cc16c72017-08-25 11:51:49 -04004881Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4882<a href="#SkPaint_getTextIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getTextIntercepts_text">text</a> advance.
Cary Clarkce101242017-09-01 15:51:02 -04004883The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004884the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004885Uses <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,
4886and <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.
4887Uses <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>.
4888Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4889<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004890
4891### Parameters
4892
Cary Clark8cc16c72017-08-25 11:51:49 -04004893<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004894character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004895 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4896number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4897 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004898<a href="#SkPaint_getTextIntercepts_x">x</a>-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004899 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004900<a href="#SkPaint_getTextIntercepts_y">y</a>-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004901 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004902lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004903 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004904returned intersections; may be nullptr</td>
4905 </tr>
4906</table>
4907
4908### Return Value
4909
4910number of intersections; may be zero
4911
4912### Example
4913
Cary Clarkce101242017-09-01 15:51:02 -04004914<div><fiddle-embed name="2a0b80ed20d193c688085b79deb5bdc9"><div>Underline uses intercepts to draw on either side of the glyph Descender.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004915
4916---
4917
Cary Clark493df1f2017-08-25 13:14:33 -04004918<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004919## getPosTextIntercepts
4920
Cary Clarka560c472017-11-27 10:44:06 -05004921<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004922int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4923 const SkScalar bounds[2], SkScalar* intervals) const
4924</pre>
4925
Cary Clark8cc16c72017-08-25 11:51:49 -04004926Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4927<a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getPosTextIntercepts_text">text</a> advance.
Cary Clarkce101242017-09-01 15:51:02 -04004928The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004929the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004930Uses <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,
4931and <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.
4932Uses <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>.
4933Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4934<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004935
4936### Parameters
4937
Cary Clark8cc16c72017-08-25 11:51:49 -04004938<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004939character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004940 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4941number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4942 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004943positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004944 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004945lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004946 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004947returned intersections; may be nullptr</td>
4948 </tr>
4949</table>
4950
4951### Return Value
4952
Cary Clarka523d2d2017-08-30 08:58:10 -04004953number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004954
4955### Example
4956
Cary Clarkce101242017-09-01 15:51:02 -04004957<div><fiddle-embed name="98b2dfc552d0540a7c041fe7a2839bd7"><div><a href="undocumented#Text">Text</a> intercepts draw on either side of, but not inside, <a href="#Glyph">Glyphs</a> in a run.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004958
4959---
4960
Cary Clark493df1f2017-08-25 13:14:33 -04004961<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004962## getPosTextHIntercepts
4963
Cary Clarka560c472017-11-27 10:44:06 -05004964<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4965int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4966 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004967</pre>
4968
Cary Clark8cc16c72017-08-25 11:51:49 -04004969Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4970<a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a> describes a pair of lines parallel to the <a href="#SkPaint_getPosTextHIntercepts_text">text</a> advance.
Cary Clarkce101242017-09-01 15:51:02 -04004971The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004972the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004973Uses <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,
4974and <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.
4975Uses <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>.
4976Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4977<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004978
4979### Parameters
4980
Cary Clark8cc16c72017-08-25 11:51:49 -04004981<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004982character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004983 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4984number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4985 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004986positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004987 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004988position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004989 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004990lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004991 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004992returned intersections; may be nullptr</td>
4993 </tr>
4994</table>
4995
4996### Return Value
4997
4998number of intersections; may be zero
4999
5000### Example
5001
Cary Clark4c06f5e2017-08-04 12:48:24 -04005002<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 -04005003
5004---
5005
Cary Clark493df1f2017-08-25 13:14:33 -04005006<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005007## getTextBlobIntercepts
5008
Cary Clarka560c472017-11-27 10:44:06 -05005009<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5010int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005011</pre>
5012
Cary Clark8cc16c72017-08-25 11:51:49 -04005013Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
5014<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04005015The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05005016the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05005017Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04005018and <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.
Cary Clarkce101242017-09-01 15:51:02 -04005019Uses run array and <a href="#Text_Align">Text Align</a> to position <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a>.
Cary Clark3cd22cc2017-12-01 11:49:58 -05005020<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
5021
Cary Clark8cc16c72017-08-25 11:51:49 -04005022Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
5023<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005024
5025### Parameters
5026
Cary Clark8cc16c72017-08-25 11:51:49 -04005027<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005028<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005029 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005030lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005031 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005032returned intersections; may be nullptr</td>
5033 </tr>
5034</table>
5035
5036### Return Value
5037
5038number of intersections; may be zero
5039
5040### Example
5041
Cary Clark3cd22cc2017-12-01 11:49:58 -05005042<div><fiddle-embed name="71959a66b2290d70003887c0de339266"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005043
5044---
5045
Cary Clark493df1f2017-08-25 13:14:33 -04005046<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005047## nothingToDraw
5048
Cary Clarka560c472017-11-27 10:44:06 -05005049<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005050bool nothingToDraw() const
5051</pre>
5052
Cary Clark8cc16c72017-08-25 11:51:49 -04005053Returns true if <a href="#Paint">Paint</a> prevents all drawing;
5054otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005055
Cary Clarkce101242017-09-01 15:51:02 -04005056Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
5057new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005058
5059### Return Value
5060
Cary Clark8cc16c72017-08-25 11:51:49 -04005061true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005062
5063### Example
5064
5065<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5066
5067#### Example Output
5068
5069~~~~
5070initial nothing to draw: false
5071blend dst nothing to draw: true
5072blend src over nothing to draw: false
5073alpha 0 nothing to draw: true
5074~~~~
5075
5076</fiddle-embed></div>
5077
5078---
5079
5080# <a name="Fast_Bounds"></a> Fast Bounds
Cary Clark8cc16c72017-08-25 11:51:49 -04005081<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5082<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005083
Cary Clark493df1f2017-08-25 13:14:33 -04005084<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005085## canComputeFastBounds
5086
Cary Clarka560c472017-11-27 10:44:06 -05005087<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005088bool canComputeFastBounds() const
5089</pre>
5090
Cary Clark8cc16c72017-08-25 11:51:49 -04005091Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5092to 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 -04005093always returns false.
5094
5095### Return Value
5096
Cary Clark8cc16c72017-08-25 11:51:49 -04005097true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005098
5099---
5100
Cary Clark493df1f2017-08-25 13:14:33 -04005101<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005102## computeFastBounds
5103
Cary Clarka560c472017-11-27 10:44:06 -05005104<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005105const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5106</pre>
5107
Cary Clark8cc16c72017-08-25 11:51:49 -04005108Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005109raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005110effects in the paint (e.g. stroking). If needed, it uses the <a href="#SkPaint_computeFastBounds_storage">storage</a>
Cary Clarkce101242017-09-01 15:51:02 -04005111parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005112for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005113
Cary Clarkbc5697d2017-10-04 14:31:33 -04005114The returned <a href="SkRect_Reference#Rect">Rect</a> will either be <a href="#SkPaint_computeFastBounds_orig">orig</a> or <a href="#SkPaint_computeFastBounds_storage">storage</a>, thus the caller
Cary Clark8cc16c72017-08-25 11:51:49 -04005115should not rely on <a href="#SkPaint_computeFastBounds_storage">storage</a> being set to the result, but should always
Cary Clarkce101242017-09-01 15:51:02 -04005116use the returned value. It is legal for <a href="#SkPaint_computeFastBounds_orig">orig</a> and <a href="#SkPaint_computeFastBounds_storage">storage</a> to be the same
Cary Clarkbc5697d2017-10-04 14:31:33 -04005117<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005118
5119### Parameters
5120
Cary Clark8cc16c72017-08-25 11:51:49 -04005121<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5122geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5123 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005124computed bounds of geometry; may not be nullptr</td>
5125 </tr>
5126</table>
5127
5128### Return Value
5129
5130fast computed bounds
5131
5132---
5133
Cary Clark493df1f2017-08-25 13:14:33 -04005134<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005135## computeFastStrokeBounds
5136
Cary Clarka560c472017-11-27 10:44:06 -05005137<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005138const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5139</pre>
5140
5141### Parameters
5142
Cary Clark8cc16c72017-08-25 11:51:49 -04005143<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5144geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5145 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005146computed bounds of geometry</td>
5147 </tr>
5148</table>
5149
5150### Return Value
5151
5152fast computed bounds
5153
5154---
5155
Cary Clark493df1f2017-08-25 13:14:33 -04005156<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005157## doComputeFastBounds
5158
Cary Clarka560c472017-11-27 10:44:06 -05005159<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5160const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005161</pre>
5162
Cary Clarkce101242017-09-01 15:51:02 -04005163Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5164account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5165altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005166
5167### Parameters
5168
Cary Clark8cc16c72017-08-25 11:51:49 -04005169<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5170geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5171 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005172computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005173 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5174overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005175 </tr>
5176</table>
5177
5178### Return Value
5179
5180fast computed bounds
5181
5182---
5183
Cary Clark493df1f2017-08-25 13:14:33 -04005184<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005185## toString
5186
Cary Clarka560c472017-11-27 10:44:06 -05005187<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005188void toString(SkString* str) const;
5189</pre>
5190
Cary Clarkce101242017-09-01 15:51:02 -04005191Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5192internal debugging tools. The interface and implementation may be
Cary Clark7cfcbca2018-01-04 16:11:51 -05005193suppressed by defining SK_IGNORE_TO_STRING.
Cary Clark12799e12017-07-28 15:18:29 -04005194
5195### Parameters
5196
Cary Clark8cc16c72017-08-25 11:51:49 -04005197<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005198storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005199 </tr>
5200</table>
5201
5202### Example
5203
5204<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5205
5206#### Example Output
5207
5208~~~~
5209text size = 12
5210~~~~
5211
5212</fiddle-embed></div>
5213
Cary Clark2ade9972017-11-02 17:49:34 -04005214### See Also
5215
5216<a href="#SkPathEffect_toString">SkPathEffect::toString</a> <a href="#SkMaskFilter_toString">SkMaskFilter::toString</a> <a href="#SkColorFilter_toString">SkColorFilter::toString</a> <a href="#SkImageFilter_toString">SkImageFilter::toString</a>
5217
Cary Clark12799e12017-07-28 15:18:29 -04005218---
5219