blob: a3c1c70f1152a89e0cdbabb255b40bbbb3d50047 [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">
Cary Clark12799e12017-07-28 15:18:29 -0400622void unflatten(SkReadBuffer& buffer)
623</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
Cary Clark2ade9972017-11-02 17:49:34 -0400638### See Also
639
640<a href="undocumented#SkReadBuffer">SkReadBuffer</a>
641
Cary Clark12799e12017-07-28 15:18:29 -0400642---
643
644# <a name="Hinting"></a> Hinting
645
Cary Clark8cc16c72017-08-25 11:51:49 -0400646## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400647
Cary Clarka560c472017-11-27 10:44:06 -0500648<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400649enum <a href="#Hinting">Hinting</a> {
650<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
651<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
652<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
653<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400654};</pre>
655
Cary Clark8cc16c72017-08-25 11:51:49 -0400656<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
657look 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 -0400658muted effect or no effect at all depending on the platform.
659
Cary Clark7cfcbca2018-01-04 16:11:51 -0500660The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark8cc16c72017-08-25 11:51:49 -0400661as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400662
663### Constants
664
665<table>
666 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400667 <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 -0500668With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
669bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400670outline being loaded should not be fitted to the pixel grid but simply scaled
671to 26.6 fractional pixels.</td>
672 </tr>
673 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400674 <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 -0500675With FreeType, this is equivalent in spirit to the
676FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400677lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400678Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400679 </tr>
680 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400681 <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 -0500682With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
683choosing the default hinting algorithm, which is optimized for standard
Cary Clark12799e12017-07-28 15:18:29 -0400684gray-level rendering.</td>
685 </tr>
686 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500687 <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
688FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
689FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
690horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
691variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400692 </tr>
693</table>
694
Cary Clark7cfcbca2018-01-04 16:11:51 -0500695On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400696
Cary Clark8cc16c72017-08-25 11:51:49 -0400697<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400698Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400699
700
701
Cary Clark493df1f2017-08-25 13:14:33 -0400702<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400703## getHinting
704
Cary Clarka560c472017-11-27 10:44:06 -0500705<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400706Hinting getHinting() const
707</pre>
708
709Returns level of glyph outline adjustment.
710
711### Return Value
712
Cary Clark8cc16c72017-08-25 11:51:49 -0400713one 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 -0400714
715### Example
716
717<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
718
719#### Example Output
720
721~~~~
722SkPaint::kNormal_Hinting == paint.getHinting()
723~~~~
724
725</fiddle-embed></div>
726
727---
728
Cary Clark493df1f2017-08-25 13:14:33 -0400729<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400730## setHinting
731
Cary Clarka560c472017-11-27 10:44:06 -0500732<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400733void setHinting(Hinting hintingLevel)
734</pre>
735
736Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400737Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400738
Cary Clark8cc16c72017-08-25 11:51:49 -0400739| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400740| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400741| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400742| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
743| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
744| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400745
746### Parameters
747
Cary Clark8cc16c72017-08-25 11:51:49 -0400748<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
749one 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 -0400750 </tr>
751</table>
752
753### Example
754
755<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
756
757#### Example Output
758
759~~~~
760paint1 == paint2
761~~~~
762
763</fiddle-embed></div>
764
765---
766
767# <a name="Flags"></a> Flags
768
Cary Clark8cc16c72017-08-25 11:51:49 -0400769## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400770
Cary Clarka560c472017-11-27 10:44:06 -0500771<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400772enum <a href="#Flags">Flags</a> {
773<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
774<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
775<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
776<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
777<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
778<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
779<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
780<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
781<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
782<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
783<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400784
Cary Clark8cc16c72017-08-25 11:51:49 -0400785<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400786};
787</pre>
788
Cary Clark8cc16c72017-08-25 11:51:49 -0400789The bit values stored in <a href="#Flags">Flags</a>.
790The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400791with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400792All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400793multiple settings at once.
794
795### Constants
796
797<table>
798 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500799 <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 -0400800 </tr>
801 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400802 <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 -0400803 </tr>
804 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400805 <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 -0400806 </tr>
807 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400808 <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 -0400809 </tr>
810 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400811 <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 -0400812 </tr>
813 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400814 <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 -0400815 </tr>
816 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400817 <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 -0400818 </tr>
819 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400820 <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 -0400821 </tr>
822 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400823 <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 -0400824 </tr>
825 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400826 <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 -0400827 </tr>
828 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400829 <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 -0400830 </tr>
831 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400832 <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 -0400833 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400834<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400835
836</table>
837
Cary Clark8cc16c72017-08-25 11:51:49 -0400838## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400839
Cary Clarka560c472017-11-27 10:44:06 -0500840<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400841enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
842<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
843<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400844};</pre>
845
846### Constants
847
848<table>
849 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400850 <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 -0400851 </tr>
852 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400853 <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 -0400854 </tr>
855</table>
856
Cary Clark2ade9972017-11-02 17:49:34 -0400857### See Also
858
859<a href="#Flags">Flags</a> <a href="#SkPaint_getFlags">getFlags</a>
860
Cary Clark12799e12017-07-28 15:18:29 -0400861
862
Cary Clark493df1f2017-08-25 13:14:33 -0400863<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400864## getFlags
865
Cary Clarka560c472017-11-27 10:44:06 -0500866<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400867uint32_t getFlags() const
868</pre>
869
Cary Clark8cc16c72017-08-25 11:51:49 -0400870Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
871bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400872
873### Return Value
874
Cary Clark8cc16c72017-08-25 11:51:49 -0400875zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400876
877### Example
878
879<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
880
881#### Example Output
882
883~~~~
884(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
885~~~~
886
887</fiddle-embed></div>
888
889---
890
Cary Clark493df1f2017-08-25 13:14:33 -0400891<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400892## setFlags
893
Cary Clarka560c472017-11-27 10:44:06 -0500894<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400895void setFlags(uint32_t flags)
896</pre>
897
Cary Clark8cc16c72017-08-25 11:51:49 -0400898Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
899All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400900
901### Parameters
902
Cary Clark8cc16c72017-08-25 11:51:49 -0400903<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
904union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400905 </tr>
906</table>
907
908### Example
909
910<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
911
912#### Example Output
913
914~~~~
915paint.isAntiAlias()
916paint.isDither()
917~~~~
918
919</fiddle-embed></div>
920
921---
922
923# <a name="Anti-alias"></a> Anti-alias
Cary Clarka560c472017-11-27 10:44:06 -0500924Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400925If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
926If <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 -0400927
Cary Clark7cfcbca2018-01-04 16:11:51 -0500928The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400929passing through the pixel center may, but is not required to, draw the pixel.
930
Cary Clarkce101242017-09-01 15:51:02 -0400931<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 -0400932active <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 -0400933
Cary Clark7cfcbca2018-01-04 16:11:51 -0500934A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500935<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400936<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400937
Cary Clarka560c472017-11-27 10:44:06 -0500938The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400939
Cary Clarka560c472017-11-27 10:44:06 -0500940Anti-alias is disabled by default.
941Anti-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 -0400942at compile time.
943
944### Example
945
946<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
947A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400948The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clarkce101242017-09-01 15:51:02 -0400949<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400950
Cary Clark493df1f2017-08-25 13:14:33 -0400951<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400952## isAntiAlias
953
Cary Clarka560c472017-11-27 10:44:06 -0500954<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400955bool isAntiAlias() const
956</pre>
957
Cary Clark4c06f5e2017-08-04 12:48:24 -0400958If 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 -0400959
Cary Clark8cc16c72017-08-25 11:51:49 -0400960Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400961
962### Return Value
963
Cary Clark8cc16c72017-08-25 11:51:49 -0400964<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400965
966### Example
967
968<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
969
970#### Example Output
971
972~~~~
973paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
974paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
975~~~~
976
977</fiddle-embed></div>
978
979---
980
Cary Clark493df1f2017-08-25 13:14:33 -0400981<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400982## setAntiAlias
983
Cary Clarka560c472017-11-27 10:44:06 -0500984<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400985void setAntiAlias(bool aa)
986</pre>
987
Cary Clark4c06f5e2017-08-04 12:48:24 -0400988Requests, 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 -0400989partial transparency.
990
Cary Clark8cc16c72017-08-25 11:51:49 -0400991Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
992Clears <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 -0400993
994### Parameters
995
Cary Clark8cc16c72017-08-25 11:51:49 -0400996<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
997setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400998 </tr>
999</table>
1000
1001### Example
1002
1003<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1004
1005#### Example Output
1006
1007~~~~
1008paint1 == paint2
1009~~~~
1010
1011</fiddle-embed></div>
1012
1013---
1014
1015# <a name="Dither"></a> Dither
Cary Clark7cfcbca2018-01-04 16:11:51 -05001016<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001017This can help to smooth color transitions and reducing banding in gradients.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001018Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05001019and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
Cary Clarka560c472017-11-27 10:44:06 -05001020and 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 -04001021
1022Dithering is always enabled for linear gradients drawing into
Cary Clarka560c472017-11-27 10:44:06 -05001023<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>.
1024<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
1025<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001026
Cary Clark8cc16c72017-08-25 11:51:49 -04001027<a href="#Dither">Dither</a> is disabled by default.
1028<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 -04001029at compile time.
1030
Cary Clark8cc16c72017-08-25 11:51:49 -04001031Some 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 -04001032
1033### Example
1034
1035<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1036alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1037
1038### Example
1039
1040<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001041Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001042dither, making it easier to see.</div></fiddle-embed></div>
1043
Cary Clark493df1f2017-08-25 13:14:33 -04001044<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001045## isDither
1046
Cary Clarka560c472017-11-27 10:44:06 -05001047<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001048bool isDither() const
1049</pre>
1050
1051If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001052Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001053
1054### Return Value
1055
Cary Clark8cc16c72017-08-25 11:51:49 -04001056<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001057
1058### Example
1059
1060<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1061
1062#### Example Output
1063
1064~~~~
1065paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1066paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1067~~~~
1068
1069</fiddle-embed></div>
1070
1071---
1072
Cary Clark493df1f2017-08-25 13:14:33 -04001073<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001074## setDither
1075
Cary Clarka560c472017-11-27 10:44:06 -05001076<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001077void setDither(bool dither)
1078</pre>
1079
1080Requests, but does not require, to distribute color error.
1081
Cary Clark8cc16c72017-08-25 11:51:49 -04001082Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1083Clears <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 -04001084
1085### Parameters
1086
Cary Clark8cc16c72017-08-25 11:51:49 -04001087<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1088setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001089 </tr>
1090</table>
1091
1092### Example
1093
1094<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1095
1096#### Example Output
1097
1098~~~~
1099paint1 == paint2
1100~~~~
1101
1102</fiddle-embed></div>
1103
1104### See Also
1105
Cary Clark4c06f5e2017-08-04 12:48:24 -04001106<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001107
1108---
1109
1110### See Also
1111
Cary Clarka560c472017-11-27 10:44:06 -05001112Gradient <a href="#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001113
1114# <a name="Device_Text"></a> Device Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001115<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 -04001116
Cary Clark7cfcbca2018-01-04 16:11:51 -05001117When 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 -04001118create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001119on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001120<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 -04001121the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001122
Cary Clark7cfcbca2018-01-04 16:11:51 -05001123<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 -04001124As the opaqueness
1125of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1126
1127Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001128<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 -05001129<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 -04001130<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 -04001131
1132### Example
1133
Cary Clark4c06f5e2017-08-04 12:48:24 -04001134<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 -04001135When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1136When <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 -04001137
1138## <a name="Linear_Text"></a> Linear Text
1139
Cary Clark4c06f5e2017-08-04 12:48:24 -04001140<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 -04001141If <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 -04001142If <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 -04001143
Cary Clark493df1f2017-08-25 13:14:33 -04001144<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001145## isLinearText
1146
Cary Clarka560c472017-11-27 10:44:06 -05001147<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001148bool isLinearText() const
1149</pre>
1150
Cary Clark4c06f5e2017-08-04 12:48:24 -04001151If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001152
Cary Clark8cc16c72017-08-25 11:51:49 -04001153Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001154
1155### Return Value
1156
Cary Clark8cc16c72017-08-25 11:51:49 -04001157<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001158
1159### Example
1160
1161<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1162
1163### See Also
1164
Cary Clark8cc16c72017-08-25 11:51:49 -04001165<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001166
1167---
1168
Cary Clark493df1f2017-08-25 13:14:33 -04001169<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001170## setLinearText
1171
Cary Clarka560c472017-11-27 10:44:06 -05001172<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001173void setLinearText(bool linearText)
1174</pre>
1175
Cary Clark4c06f5e2017-08-04 12:48:24 -04001176If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001177By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001178
Cary Clark8cc16c72017-08-25 11:51:49 -04001179Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1180Clears <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 -04001181
1182### Parameters
1183
Cary Clark8cc16c72017-08-25 11:51:49 -04001184<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1185setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001186 </tr>
1187</table>
1188
1189### Example
1190
1191<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1192
1193### See Also
1194
Cary Clark8cc16c72017-08-25 11:51:49 -04001195<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001196
1197---
1198
1199## <a name="Subpixel_Text"></a> Subpixel Text
1200
Cary Clark7cfcbca2018-01-04 16:11:51 -05001201<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 -04001202As the opaqueness
1203of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1204
Cary Clark493df1f2017-08-25 13:14:33 -04001205<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001206## isSubpixelText
1207
Cary Clarka560c472017-11-27 10:44:06 -05001208<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001209bool isSubpixelText() const
1210</pre>
1211
Cary Clarkce101242017-09-01 15:51:02 -04001212If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001213
Cary Clark8cc16c72017-08-25 11:51:49 -04001214Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001215
1216### Return Value
1217
Cary Clark8cc16c72017-08-25 11:51:49 -04001218<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001219
1220### Example
1221
1222<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1223
1224#### Example Output
1225
1226~~~~
1227paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1228paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1229~~~~
1230
1231</fiddle-embed></div>
1232
1233---
1234
Cary Clark493df1f2017-08-25 13:14:33 -04001235<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001236## setSubpixelText
1237
Cary Clarka560c472017-11-27 10:44:06 -05001238<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001239void setSubpixelText(bool subpixelText)
1240</pre>
1241
Cary Clarkce101242017-09-01 15:51:02 -04001242Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001243
Cary Clark8cc16c72017-08-25 11:51:49 -04001244Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1245Clears <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 -04001246
1247### Parameters
1248
Cary Clark8cc16c72017-08-25 11:51:49 -04001249<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1250setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001251 </tr>
1252</table>
1253
1254### Example
1255
1256<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1257
1258#### Example Output
1259
1260~~~~
1261paint1 == paint2
1262~~~~
1263
1264</fiddle-embed></div>
1265
1266---
1267
1268## <a name="LCD_Text"></a> LCD Text
1269
Cary Clark7cfcbca2018-01-04 16:11:51 -05001270When 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 -04001271create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001272on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001273<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 -04001274the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001275
Cary Clark493df1f2017-08-25 13:14:33 -04001276<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001277## isLCDRenderText
1278
Cary Clarka560c472017-11-27 10:44:06 -05001279<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001280bool isLCDRenderText() const
1281</pre>
1282
Cary Clark7cfcbca2018-01-04 16:11:51 -05001283If true, <a href="#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001284
Cary Clark8cc16c72017-08-25 11:51:49 -04001285Returns 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 -04001286
1287### Return Value
1288
Cary Clark8cc16c72017-08-25 11:51:49 -04001289<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001290
1291### Example
1292
1293<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1294
1295#### Example Output
1296
1297~~~~
1298paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1299paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1300~~~~
1301
1302</fiddle-embed></div>
1303
1304---
1305
Cary Clark493df1f2017-08-25 13:14:33 -04001306<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001307## setLCDRenderText
1308
Cary Clarka560c472017-11-27 10:44:06 -05001309<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001310void setLCDRenderText(bool lcdText)
1311</pre>
1312
Cary Clark7cfcbca2018-01-04 16:11:51 -05001313Requests, but does not require, that <a href="#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001314
Cary Clark8cc16c72017-08-25 11:51:49 -04001315Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1316Clears <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 -04001317
1318### Parameters
1319
Cary Clark8cc16c72017-08-25 11:51:49 -04001320<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1321setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001322 </tr>
1323</table>
1324
1325### Example
1326
1327<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1328
1329#### Example Output
1330
1331~~~~
1332paint1 == paint2
1333~~~~
1334
1335</fiddle-embed></div>
1336
1337---
1338
1339# <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
Cary Clarkce101242017-09-01 15:51:02 -04001340<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 -04001341<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 -05001342in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001343
Cary Clark7cfcbca2018-01-04 16:11:51 -05001344FreeType 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 -04001345the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001346Windows may select the bitmap glyph but is not required to do so.
1347<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001348
Cary Clark4c06f5e2017-08-04 12:48:24 -04001349<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1350<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 -04001351<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001352
1353### Example
1354
Cary Clarka560c472017-11-27 10:44:06 -05001355<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
1356void draw(SkCanvas* canvas) {<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
1357 includes an embedded bitmap Glyph at odd font sizes. This example works
1358 on platforms that use FreeType as their Font_Engine.
1359 Windows may, but is not required to, return a bitmap glyph if
1360 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1361 bitmap.allocN32Pixels(30, 15);
1362 bitmap.eraseColor(0);
1363 SkCanvas offscreen(bitmap);
1364 SkPaint paint;
1365 paint.setAntiAlias(true);
1366 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001367 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001368 for (bool embedded : { false, true}) {
1369 paint.setEmbeddedBitmapText(embedded);
1370 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1371 }
1372 canvas->drawBitmap(bitmap, 0, 0);
1373 canvas->scale(10, 10);
1374 canvas->drawBitmap(bitmap, -2, 1);
1375}
1376</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001377
Cary Clark493df1f2017-08-25 13:14:33 -04001378<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001379## isEmbeddedBitmapText
1380
Cary Clarka560c472017-11-27 10:44:06 -05001381<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001382bool isEmbeddedBitmapText() const
1383</pre>
1384
Cary Clarkce101242017-09-01 15:51:02 -04001385If 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 -04001386
Cary Clark8cc16c72017-08-25 11:51:49 -04001387Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001388
1389### Return Value
1390
Cary Clark8cc16c72017-08-25 11:51:49 -04001391<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001392
1393### Example
1394
1395<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1396
1397#### Example Output
1398
1399~~~~
1400paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1401paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1402~~~~
1403
1404</fiddle-embed></div>
1405
1406---
1407
Cary Clark493df1f2017-08-25 13:14:33 -04001408<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001409## setEmbeddedBitmapText
1410
Cary Clarka560c472017-11-27 10:44:06 -05001411<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001412void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1413</pre>
1414
1415Requests, but does not require, to use bitmaps in fonts instead of outlines.
1416
Cary Clark8cc16c72017-08-25 11:51:49 -04001417Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1418Clears <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 -04001419
1420### Parameters
1421
Cary Clark8cc16c72017-08-25 11:51:49 -04001422<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1423setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001424 </tr>
1425</table>
1426
1427### Example
1428
1429<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1430
1431#### Example Output
1432
1433~~~~
1434paint1 == paint2
1435~~~~
1436
1437</fiddle-embed></div>
1438
1439---
1440
1441# <a name="Automatic_Hinting"></a> Automatic Hinting
Cary Clark8cc16c72017-08-25 11:51:49 -04001442If <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 -04001443instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001444<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
1445<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001446
Cary Clark7cfcbca2018-01-04 16:11:51 -05001447<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 -04001448
Cary Clark493df1f2017-08-25 13:14:33 -04001449<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001450## isAutohinted
1451
Cary Clarka560c472017-11-27 10:44:06 -05001452<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001453bool isAutohinted() const
1454</pre>
1455
Cary Clark8cc16c72017-08-25 11:51:49 -04001456If 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 -05001457platform 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 -04001458<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001459
Cary Clark8cc16c72017-08-25 11:51:49 -04001460Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001461
1462### Return Value
1463
Cary Clark8cc16c72017-08-25 11:51:49 -04001464<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001465
1466### Example
1467
1468<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1469
1470#### Example Output
1471
1472~~~~
1473paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1474paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1475~~~~
1476
1477</fiddle-embed></div>
1478
1479### See Also
1480
Cary Clark8cc16c72017-08-25 11:51:49 -04001481<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001482
1483---
1484
Cary Clark493df1f2017-08-25 13:14:33 -04001485<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001486## setAutohinted
1487
Cary Clarka560c472017-11-27 10:44:06 -05001488<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001489void setAutohinted(bool useAutohinter)
1490</pre>
1491
Cary Clark8cc16c72017-08-25 11:51:49 -04001492If <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 -04001493instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001494<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
1495<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001496
Cary Clark7cfcbca2018-01-04 16:11:51 -05001497Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001498
Cary Clark8cc16c72017-08-25 11:51:49 -04001499Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1500Clears <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 -04001501
1502### Parameters
1503
Cary Clark8cc16c72017-08-25 11:51:49 -04001504<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1505setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001506 </tr>
1507</table>
1508
1509### Example
1510
1511<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1512
1513### See Also
1514
Cary Clark8cc16c72017-08-25 11:51:49 -04001515<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001516
1517---
1518
1519# <a name="Vertical_Text"></a> Vertical Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001520<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 -04001521using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1522is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1523<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001524
Cary Clark7cfcbca2018-01-04 16:11:51 -05001525Skia can translate text character codes as a series of <a href="#Glyph">Glyphs</a>, but does not implement
1526font substitution,
1527textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1528a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001529into glyph series.
1530
Cary Clark8cc16c72017-08-25 11:51:49 -04001531<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 -04001532
Cary Clark8cc16c72017-08-25 11:51:49 -04001533<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1534<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 -04001535
Cary Clark8cc16c72017-08-25 11:51:49 -04001536<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1537<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1538<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001539
1540### Example
1541
1542<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1543
Cary Clark493df1f2017-08-25 13:14:33 -04001544<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001545## isVerticalText
1546
Cary Clarka560c472017-11-27 10:44:06 -05001547<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001548bool isVerticalText() const
1549</pre>
1550
Cary Clarkce101242017-09-01 15:51:02 -04001551If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001552
Cary Clark8cc16c72017-08-25 11:51:49 -04001553Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001554
1555### Return Value
1556
Cary Clark8cc16c72017-08-25 11:51:49 -04001557<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001558
1559### Example
1560
1561<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1562
1563#### Example Output
1564
1565~~~~
1566paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1567paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1568~~~~
1569
1570</fiddle-embed></div>
1571
1572---
1573
Cary Clark493df1f2017-08-25 13:14:33 -04001574<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001575## setVerticalText
1576
Cary Clarka560c472017-11-27 10:44:06 -05001577<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001578void setVerticalText(bool verticalText)
1579</pre>
1580
1581If true, text advance positions the next glyph below the previous glyph instead of to the
1582right of previous glyph.
1583
Cary Clark8cc16c72017-08-25 11:51:49 -04001584Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1585Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001586
1587### Parameters
1588
Cary Clark8cc16c72017-08-25 11:51:49 -04001589<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1590setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001591 </tr>
1592</table>
1593
1594### Example
1595
1596<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1597
1598#### Example Output
1599
1600~~~~
1601paint1 == paint2
1602~~~~
1603
1604</fiddle-embed></div>
1605
1606---
1607
1608# <a name="Fake_Bold"></a> Fake Bold
Cary Clark8cc16c72017-08-25 11:51:49 -04001609<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 -05001610is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001611bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001612
Cary Clark7cfcbca2018-01-04 16:11:51 -05001613Use <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 -04001614is not available.
1615
Cary Clark7cfcbca2018-01-04 16:11:51 -05001616A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkce101242017-09-01 15:51:02 -04001617the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark7cfcbca2018-01-04 16:11:51 -05001618by 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 -04001619
Cary Clark8cc16c72017-08-25 11:51:49 -04001620<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001621
1622### Example
1623
1624<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1625
Cary Clark493df1f2017-08-25 13:14:33 -04001626<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001627## isFakeBoldText
1628
Cary Clarka560c472017-11-27 10:44:06 -05001629<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001630bool isFakeBoldText() const
1631</pre>
1632
1633If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1634from outlines.
1635
Cary Clark8cc16c72017-08-25 11:51:49 -04001636Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001637
1638### Return Value
1639
Cary Clark8cc16c72017-08-25 11:51:49 -04001640<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001641
1642### Example
1643
1644<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1645
1646#### Example Output
1647
1648~~~~
1649paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1650paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1651~~~~
1652
1653</fiddle-embed></div>
1654
1655---
1656
Cary Clark493df1f2017-08-25 13:14:33 -04001657<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001658## setFakeBoldText
1659
Cary Clarka560c472017-11-27 10:44:06 -05001660<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001661void setFakeBoldText(bool fakeBoldText)
1662</pre>
1663
Cary Clarkce101242017-09-01 15:51:02 -04001664Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001665
Cary Clark8cc16c72017-08-25 11:51:49 -04001666Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1667Clears <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 -04001668
1669### Parameters
1670
Cary Clark8cc16c72017-08-25 11:51:49 -04001671<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1672setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001673 </tr>
1674</table>
1675
1676### Example
1677
1678<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1679
1680#### Example Output
1681
1682~~~~
1683paint1 == paint2
1684~~~~
1685
1686</fiddle-embed></div>
1687
1688---
1689
1690# <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
Cary Clarkce101242017-09-01 15:51:02 -04001691if <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 -05001692spacing 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 -04001693<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 -05001694FreeType as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001695
Cary Clark7cfcbca2018-01-04 16:11:51 -05001696<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text Kerning, where the space between
1697a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001698
Cary Clark493df1f2017-08-25 13:14:33 -04001699<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001700## isDevKernText
1701
Cary Clarka560c472017-11-27 10:44:06 -05001702<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001703bool isDevKernText() const
1704</pre>
1705
1706Returns if character spacing may be adjusted by the hinting difference.
1707
Cary Clark8cc16c72017-08-25 11:51:49 -04001708Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001709
1710### Return Value
1711
Cary Clark8cc16c72017-08-25 11:51:49 -04001712<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001713
1714### Example
1715
1716<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1717
1718---
1719
Cary Clark493df1f2017-08-25 13:14:33 -04001720<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001721## setDevKernText
1722
Cary Clarka560c472017-11-27 10:44:06 -05001723<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001724void setDevKernText(bool devKernText)
1725</pre>
1726
1727Requests, but does not require, to use hinting to adjust glyph spacing.
1728
Cary Clark8cc16c72017-08-25 11:51:49 -04001729Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1730Clears <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 -04001731
1732### Parameters
1733
Cary Clark8cc16c72017-08-25 11:51:49 -04001734<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1735setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001736 </tr>
1737</table>
1738
1739### Example
1740
1741<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1742
1743#### Example Output
1744
1745~~~~
1746paint1 == paint2
1747~~~~
1748
1749</fiddle-embed></div>
1750
1751---
1752
1753# <a name="Filter_Quality_Methods"></a> Filter Quality Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04001754<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1755A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1756A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001757If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1758in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001759
Cary Clark8cc16c72017-08-25 11:51:49 -04001760<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 -04001761
1762<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001763 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1764 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1765 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1766 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001767</table>
1768
Cary Clarka560c472017-11-27 10:44:06 -05001769and 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 -04001770
Cary Clark4c06f5e2017-08-04 12:48:24 -04001771<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 -04001772
1773### Example
1774
1775<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1776
Cary Clark493df1f2017-08-25 13:14:33 -04001777<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001778## getFilterQuality
1779
Cary Clarka560c472017-11-27 10:44:06 -05001780<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001781SkFilterQuality getFilterQuality() const
1782</pre>
1783
Cary Clark4c06f5e2017-08-04 12:48:24 -04001784Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001785draws faster; a higher setting looks better when the image is scaled.
1786
1787### Return Value
1788
Cary Clark7cfcbca2018-01-04 16:11:51 -05001789one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001790<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001791
1792### Example
1793
1794<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1795
1796#### Example Output
1797
1798~~~~
1799kNone_SkFilterQuality == paint.getFilterQuality()
1800~~~~
1801
1802</fiddle-embed></div>
1803
1804---
1805
Cary Clark493df1f2017-08-25 13:14:33 -04001806<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001807## setFilterQuality
1808
Cary Clarka560c472017-11-27 10:44:06 -05001809<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001810void setFilterQuality(SkFilterQuality quality)
1811</pre>
1812
Cary Clark4c06f5e2017-08-04 12:48:24 -04001813Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001814draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001815Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001816
1817### Parameters
1818
Cary Clark8cc16c72017-08-25 11:51:49 -04001819<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05001820one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001821<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001822 </tr>
1823</table>
1824
1825### Example
1826
1827<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1828
1829#### Example Output
1830
1831~~~~
1832kHigh_SkFilterQuality == paint.getFilterQuality()
1833~~~~
1834
1835</fiddle-embed></div>
1836
1837### See Also
1838
Cary Clark4c06f5e2017-08-04 12:48:24 -04001839<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001840
1841---
1842
1843# <a name="Color_Methods"></a> Color Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04001844<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 -04001845or stroked shape in a
184632-bit value. Each component occupies 8-bits, ranging from zero: no contribution;
1847to 255: full intensity. All values in any combination are valid.
1848
Cary Clarkce101242017-09-01 15:51:02 -04001849<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>;
Cary Clark8cc16c72017-08-25 11:51:49 -04001850<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 -04001851
Cary Clark8cc16c72017-08-25 11:51:49 -04001852The 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 -04001853on the output device, which may have more or fewer bits, and may have a different arrangement.
1854
Cary Clark8cc16c72017-08-25 11:51:49 -04001855| 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 -04001856| --- | --- | --- | --- | --- |
1857| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1858
1859### Example
1860
1861<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1862
Cary Clark493df1f2017-08-25 13:14:33 -04001863<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001864## getColor
1865
Cary Clarka560c472017-11-27 10:44:06 -05001866<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001867SkColor getColor() const
1868</pre>
1869
Cary Clarkce101242017-09-01 15:51:02 -04001870Retrieves <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 -04001871Use 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 -04001872a color component.
1873
1874### Return Value
1875
Cary Clarkce101242017-09-01 15:51:02 -04001876<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001877
1878### Example
1879
1880<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1881
1882#### Example Output
1883
1884~~~~
1885Yellow is 100% red, 100% green, and 0% blue.
1886~~~~
1887
1888</fiddle-embed></div>
1889
1890### See Also
1891
Cary Clark4c06f5e2017-08-04 12:48:24 -04001892<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001893
1894---
1895
Cary Clark493df1f2017-08-25 13:14:33 -04001896<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001897## setColor
1898
Cary Clarka560c472017-11-27 10:44:06 -05001899<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001900void setColor(SkColor color)
1901</pre>
1902
Cary Clarkce101242017-09-01 15:51:02 -04001903Sets <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 -05001904<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 -04001905
1906### Parameters
1907
Cary Clark8cc16c72017-08-25 11:51:49 -04001908<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001909<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001910 </tr>
1911</table>
1912
1913### Example
1914
1915<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1916
1917#### Example Output
1918
1919~~~~
1920green1 == green2
1921~~~~
1922
1923</fiddle-embed></div>
1924
1925### See Also
1926
Cary Clark8cc16c72017-08-25 11:51:49 -04001927<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 -04001928
1929---
1930
1931## <a name="Alpha_Methods"></a> Alpha Methods
1932
Cary Clark8cc16c72017-08-25 11:51:49 -04001933<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 -04001934
Cary Clark493df1f2017-08-25 13:14:33 -04001935<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001936## getAlpha
1937
Cary Clarka560c472017-11-27 10:44:06 -05001938<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001939uint8_t getAlpha() const
1940</pre>
1941
Cary Clarkce101242017-09-01 15:51:02 -04001942Retrieves <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 -04001943
1944### Return Value
1945
Cary Clarkce101242017-09-01 15:51:02 -04001946<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001947
1948### Example
1949
1950<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1951
1952#### Example Output
1953
1954~~~~
1955255 == paint.getAlpha()
1956~~~~
1957
1958</fiddle-embed></div>
1959
1960---
1961
Cary Clark493df1f2017-08-25 13:14:33 -04001962<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001963## setAlpha
1964
Cary Clarka560c472017-11-27 10:44:06 -05001965<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001966void setAlpha(U8CPU a)
1967</pre>
1968
Cary Clark7cfcbca2018-01-04 16:11:51 -05001969Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001970unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001971build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1972<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 -04001973fully opaque.
1974
1975### Parameters
1976
Cary Clark8cc16c72017-08-25 11:51:49 -04001977<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001978<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001979 </tr>
1980</table>
1981
1982### Example
1983
1984<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1985
1986#### Example Output
1987
1988~~~~
19890x44112233 == paint.getColor()
1990~~~~
1991
1992</fiddle-embed></div>
1993
1994---
1995
Cary Clark493df1f2017-08-25 13:14:33 -04001996<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001997## setARGB
1998
Cary Clarka560c472017-11-27 10:44:06 -05001999<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002000void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
2001</pre>
2002
Cary Clark4c06f5e2017-08-04 12:48:24 -04002003Sets <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 -04002004The 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 -04002005
2006### Parameters
2007
Cary Clark8cc16c72017-08-25 11:51:49 -04002008<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2009amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2010 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2011amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2012 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2013amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2014 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2015amount 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 -04002016 </tr>
2017</table>
2018
2019### Example
2020
2021<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2022
2023#### Example Output
2024
2025~~~~
2026transRed1 == transRed2
2027~~~~
2028
2029</fiddle-embed></div>
2030
2031### See Also
2032
Cary Clark8cc16c72017-08-25 11:51:49 -04002033<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002034
2035---
2036
2037# <a name="Style"></a> Style
Cary Clark8cc16c72017-08-25 11:51:49 -04002038<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2039Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002040
Cary Clark8cc16c72017-08-25 11:51:49 -04002041Set <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 -04002042The fill covers the area inside the geometry for most shapes.
2043
Cary Clark8cc16c72017-08-25 11:51:49 -04002044Set <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 -04002045
2046## <a name="Fill"></a> Fill
2047
2048### See Also
2049
Cary Clark8cc16c72017-08-25 11:51:49 -04002050<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002051
2052## <a name="Stroke"></a> Stroke
2053
Cary Clarkbc5697d2017-10-04 14:31:33 -04002054The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002055<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>.
2056The 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 -04002057The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002058
Cary Clark8cc16c72017-08-25 11:51:49 -04002059As <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
2060may 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 -04002061
2062## <a name="Hairline"></a> Hairline
2063
Cary Clark8cc16c72017-08-25 11:51:49 -04002064<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 -05002065<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
2066flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002067
Cary Clark8cc16c72017-08-25 11:51:49 -04002068<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
2069two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2070pixel. 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 -05002071GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002072while stroking.
2073
Cary Clark8cc16c72017-08-25 11:51:49 -04002074## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002075
Cary Clarka560c472017-11-27 10:44:06 -05002076<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002077enum <a href="#SkPaint_Style">Style</a> {
2078<a href="#SkPaint_kFill_Style">kFill Style</a>,
2079<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2080<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002081};</pre>
2082
Cary Clark8cc16c72017-08-25 11:51:49 -04002083Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002084The stroke and fill
2085share all paint attributes; for instance, they are drawn with the same color.
2086
Cary Clark8cc16c72017-08-25 11:51:49 -04002087Use <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 -04002088a fill draw.
2089
2090### Constants
2091
2092<table>
2093 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002094 <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 -05002095Applies 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 -05002096<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 -04002097<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2098The <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 -04002099and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002100<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 -04002101 </tr>
2102 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002103 <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 -05002104Applies 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 -04002105<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 -04002106and ignore the set <a href="#SkPaint_Style">Style</a>.
2107The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002108 </tr>
2109 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002110 <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 -04002111Applies 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 -04002112<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2113and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002114 </tr>
2115
2116</table>
2117
Cary Clark8cc16c72017-08-25 11:51:49 -04002118## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002119
Cary Clarka560c472017-11-27 10:44:06 -05002120<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002121enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002122<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002123};</pre>
2124
2125### Constants
2126
2127<table>
2128 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002129 <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.
2130May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002131 </tr>
2132
2133</table>
2134
Cary Clark493df1f2017-08-25 13:14:33 -04002135<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002136## getStyle
2137
Cary Clarka560c472017-11-27 10:44:06 -05002138<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002139Style getStyle() const
2140</pre>
2141
2142Whether the geometry is filled, stroked, or filled and stroked.
2143
2144### Return Value
2145
Cary Clark8cc16c72017-08-25 11:51:49 -04002146one 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 -04002147
2148### Example
2149
2150<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2151
2152#### Example Output
2153
2154~~~~
2155SkPaint::kFill_Style == paint.getStyle()
2156~~~~
2157
2158</fiddle-embed></div>
2159
2160### See Also
2161
Cary Clark8cc16c72017-08-25 11:51:49 -04002162<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002163
2164---
2165
Cary Clark493df1f2017-08-25 13:14:33 -04002166<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002167## setStyle
2168
Cary Clarka560c472017-11-27 10:44:06 -05002169<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002170void setStyle(Style style)
2171</pre>
2172
2173Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002174Has 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 -04002175
2176### Parameters
2177
Cary Clark8cc16c72017-08-25 11:51:49 -04002178<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2179one 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 -04002180 </tr>
2181</table>
2182
2183### Example
2184
2185<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2186
2187### See Also
2188
Cary Clark8cc16c72017-08-25 11:51:49 -04002189<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002190
2191---
2192
2193### See Also
2194
Cary Clark8cc16c72017-08-25 11:51:49 -04002195<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 -04002196
2197# <a name="Stroke_Width"></a> Stroke Width
Cary Clark8cc16c72017-08-25 11:51:49 -04002198<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002199of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002200set 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 -04002201
2202When width is greater than zero, the stroke encompasses as many pixels partially
2203or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002204the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002205
Cary Clarkbc5697d2017-10-04 14:31:33 -04002206The stroke dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002207remains one pixel wide regardless of scaling.
2208
2209The default width for the paint is zero.
2210
2211### Example
2212
Cary Clark7cfcbca2018-01-04 16:11:51 -05002213<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 -04002214line and the platform implementation.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002215
Cary Clark493df1f2017-08-25 13:14:33 -04002216<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002217## getStrokeWidth
2218
Cary Clarka560c472017-11-27 10:44:06 -05002219<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002220SkScalar getStrokeWidth() const
2221</pre>
2222
Cary Clark8cc16c72017-08-25 11:51:49 -04002223Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002224outline the shape.
2225
2226### Return Value
2227
Cary Clark8cc16c72017-08-25 11:51:49 -04002228zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002229
2230### Example
2231
2232<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2233
2234#### Example Output
2235
2236~~~~
22370 == paint.getStrokeWidth()
2238~~~~
2239
2240</fiddle-embed></div>
2241
2242---
2243
Cary Clark493df1f2017-08-25 13:14:33 -04002244<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002245## setStrokeWidth
2246
Cary Clarka560c472017-11-27 10:44:06 -05002247<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002248void setStrokeWidth(SkScalar width)
2249</pre>
2250
2251Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002252outline the shape.
2253Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002254
2255### Parameters
2256
Cary Clark8cc16c72017-08-25 11:51:49 -04002257<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2258zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002259 </tr>
2260</table>
2261
2262### Example
2263
2264<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2265
2266#### Example Output
2267
2268~~~~
22695 == paint.getStrokeWidth()
2270~~~~
2271
2272</fiddle-embed></div>
2273
2274---
2275
2276# <a name="Miter_Limit"></a> Miter Limit
Cary Clark8cc16c72017-08-25 11:51:49 -04002277<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002278relative to the stroke width.
2279
Cary Clark8cc16c72017-08-25 11:51:49 -04002280<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2281is 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>
2282or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002283
Cary Clark8cc16c72017-08-25 11:51:49 -04002284If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2285is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002286
Cary Clark8cc16c72017-08-25 11:51:49 -04002287<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002288
Cary Clark8cc16c72017-08-25 11:51:49 -04002289miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002290The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002291in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002292
2293Here are some miter limits and the angles that triggers them.
2294
2295| miter limit | angle in degrees |
2296| --- | --- |
2297| 10 | 11.48 |
2298| 9 | 12.76 |
2299| 8 | 14.36 |
2300| 7 | 16.43 |
2301| 6 | 19.19 |
2302| 5 | 23.07 |
2303| 4 | 28.96 |
2304| 3 | 38.94 |
2305| 2 | 60 |
2306| 1 | 180 |
2307
2308### Example
2309
2310<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2311When the miter limit is decreased slightly, the miter join is replaced
2312by a bevel join.</div></fiddle-embed></div>
2313
Cary Clark493df1f2017-08-25 13:14:33 -04002314<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002315## getStrokeMiter
2316
Cary Clarka560c472017-11-27 10:44:06 -05002317<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002318SkScalar getStrokeMiter() const
2319</pre>
2320
2321The limit at which a sharp corner is drawn beveled.
2322
2323### Return Value
2324
Cary Clark8cc16c72017-08-25 11:51:49 -04002325zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002326
2327### Example
2328
2329<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2330
2331#### Example Output
2332
2333~~~~
2334default miter limit == 4
2335~~~~
2336
2337</fiddle-embed></div>
2338
2339### See Also
2340
Cary Clark8cc16c72017-08-25 11:51:49 -04002341<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 -04002342
2343---
2344
Cary Clark493df1f2017-08-25 13:14:33 -04002345<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002346## setStrokeMiter
2347
Cary Clarka560c472017-11-27 10:44:06 -05002348<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002349void setStrokeMiter(SkScalar miter)
2350</pre>
2351
2352The limit at which a sharp corner is drawn beveled.
2353Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002354Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002355
2356### Parameters
2357
Cary Clark8cc16c72017-08-25 11:51:49 -04002358<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2359zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002360 </tr>
2361</table>
2362
2363### Example
2364
2365<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2366
2367#### Example Output
2368
2369~~~~
2370default miter limit == 8
2371~~~~
2372
2373</fiddle-embed></div>
2374
2375### See Also
2376
Cary Clark8cc16c72017-08-25 11:51:49 -04002377<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 -04002378
2379---
2380
2381# <a name="Stroke_Cap"></a> Stroke Cap
2382
Cary Clark8cc16c72017-08-25 11:51:49 -04002383## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002384
Cary Clarka560c472017-11-27 10:44:06 -05002385<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002386enum <a href="#SkPaint_Cap">Cap</a> {
2387<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2388<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2389<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002390
Cary Clark8cc16c72017-08-25 11:51:49 -04002391<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2392<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002393};
Cary Clark6fc50412017-09-21 12:31:06 -04002394
Cary Clark8cc16c72017-08-25 11:51:49 -04002395static 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 -04002396
Cary Clark8cc16c72017-08-25 11:51:49 -04002397<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 -04002398
2399### Constants
2400
2401<table>
2402 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002403 <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 -04002404 </tr>
2405 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002406 <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 -04002407and end.</td>
2408 </tr>
2409 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002410 <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 -04002411and end. The square sides are parallel to the initial and final direction
2412of the stroke.</td>
2413 </tr>
2414 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002415 <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 -04002416 </tr>
2417 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002418 <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>.
2419<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 -04002420 </tr>
2421 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002422 <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.
2423May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002424 </tr>
2425
Cary Clark7cfcbca2018-01-04 16:11:51 -05002426Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002427follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002428
Cary Clark8cc16c72017-08-25 11:51:49 -04002429If 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 -04002430visible beginning and end.
2431
Cary Clark8cc16c72017-08-25 11:51:49 -04002432<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 -04002433
Cary Clark8cc16c72017-08-25 11:51:49 -04002434<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 -05002435<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 -04002436at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002437<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
2438<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002439
Cary Clark8cc16c72017-08-25 11:51:49 -04002440<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 -04002441
2442</table>
2443
2444### Example
2445
Cary Clark2ade9972017-11-02 17:49:34 -04002446<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002447
Cary Clark493df1f2017-08-25 13:14:33 -04002448<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002449## getStrokeCap
2450
Cary Clarka560c472017-11-27 10:44:06 -05002451<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002452Cap getStrokeCap() const
2453</pre>
2454
2455The geometry drawn at the beginning and end of strokes.
2456
2457### Return Value
2458
Cary Clark8cc16c72017-08-25 11:51:49 -04002459one 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 -04002460
2461### Example
2462
2463<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2464
2465#### Example Output
2466
2467~~~~
2468kButt_Cap == default stroke cap
2469~~~~
2470
2471</fiddle-embed></div>
2472
2473### See Also
2474
Cary Clark8cc16c72017-08-25 11:51:49 -04002475<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002476
2477---
2478
Cary Clark493df1f2017-08-25 13:14:33 -04002479<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002480## setStrokeCap
2481
Cary Clarka560c472017-11-27 10:44:06 -05002482<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002483void setStrokeCap(Cap cap)
2484</pre>
2485
2486The geometry drawn at the beginning and end of strokes.
2487
2488### Parameters
2489
Cary Clark8cc16c72017-08-25 11:51:49 -04002490<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2491one 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>;
2492has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002493 </tr>
2494</table>
2495
2496### Example
2497
2498<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2499
2500#### Example Output
2501
2502~~~~
2503kRound_Cap == paint.getStrokeCap()
2504~~~~
2505
2506</fiddle-embed></div>
2507
2508### See Also
2509
Cary Clark8cc16c72017-08-25 11:51:49 -04002510<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002511
2512---
2513
2514# <a name="Stroke_Join"></a> Stroke Join
Cary Clark8cc16c72017-08-25 11:51:49 -04002515<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 -04002516
Cary Clark7cfcbca2018-01-04 16:11:51 -05002517Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002518follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002519
2520If the contour direction changes abruptly, because the tangent direction leading
2521to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002522the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002523
2524### Example
2525
Cary Clark2ade9972017-11-02 17:49:34 -04002526<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002527
Cary Clark8cc16c72017-08-25 11:51:49 -04002528## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002529
Cary Clarka560c472017-11-27 10:44:06 -05002530<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002531enum <a href="#SkPaint_Join">Join</a> {
2532<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2533<a href="#SkPaint_kRound_Join">kRound Join</a>,
2534<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002535
Cary Clark8cc16c72017-08-25 11:51:49 -04002536<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2537<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002538};
Cary Clark6fc50412017-09-21 12:31:06 -04002539
Cary Clark8cc16c72017-08-25 11:51:49 -04002540static 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 -04002541
Cary Clark8cc16c72017-08-25 11:51:49 -04002542<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 -04002543affects the four corners of a stroked rectangle, and the connected segments in a
2544stroked path.
2545
2546Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2547radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2548connect the thick strokes.
2549
Cary Clark7cfcbca2018-01-04 16:11:51 -05002550The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002551not contain the actual join. For instance, a fill path constructed with round joins does
2552not necessarily include circles at each connected segment.
2553
2554### Constants
2555
2556<table>
2557 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002558 <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>.
2559If 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 -04002560 </tr>
2561 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002562 <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 -04002563 </tr>
2564 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002565 <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 -04002566 </tr>
2567 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002568 <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 -04002569 </tr>
2570 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002571 <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>.
2572<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 -04002573 </tr>
2574 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002575 <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.
2576May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002577 </tr>
2578</table>
2579
2580### Example
2581
2582<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2583
2584### See Also
2585
Cary Clark8cc16c72017-08-25 11:51:49 -04002586<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 -04002587
2588
2589
Cary Clark493df1f2017-08-25 13:14:33 -04002590<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002591## getStrokeJoin
2592
Cary Clarka560c472017-11-27 10:44:06 -05002593<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002594Join getStrokeJoin() const
2595</pre>
2596
Cary Clark0c5f5462017-12-15 11:21:51 -05002597The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002598
2599### Return Value
2600
Cary Clark8cc16c72017-08-25 11:51:49 -04002601one 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 -04002602
2603### Example
2604
2605<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2606
2607#### Example Output
2608
2609~~~~
2610kMiter_Join == default stroke join
2611~~~~
2612
2613</fiddle-embed></div>
2614
2615### See Also
2616
Cary Clark8cc16c72017-08-25 11:51:49 -04002617<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002618
2619---
2620
Cary Clark493df1f2017-08-25 13:14:33 -04002621<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002622## setStrokeJoin
2623
Cary Clarka560c472017-11-27 10:44:06 -05002624<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002625void setStrokeJoin(Join join)
2626</pre>
2627
Cary Clark0c5f5462017-12-15 11:21:51 -05002628The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002629
2630### Parameters
2631
Cary Clark8cc16c72017-08-25 11:51:49 -04002632<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2633one 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 -04002634otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002635 </tr>
2636</table>
2637
2638### Example
2639
2640<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2641
2642#### Example Output
2643
2644~~~~
2645kMiter_Join == paint.getStrokeJoin()
2646~~~~
2647
2648</fiddle-embed></div>
2649
2650### See Also
2651
Cary Clark8cc16c72017-08-25 11:51:49 -04002652<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002653
2654---
2655
2656### See Also
2657
Cary Clark8cc16c72017-08-25 11:51:49 -04002658<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002659
2660# <a name="Fill_Path"></a> Fill Path
Cary Clark8cc16c72017-08-25 11:51:49 -04002661<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 -04002662
Cary Clark8cc16c72017-08-25 11:51:49 -04002663If <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 -04002664replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2665destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002666
Cary Clark4c06f5e2017-08-04 12:48:24 -04002667Fill <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
2668the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002669
Cary Clark7cfcbca2018-01-04 16:11:51 -05002670If <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 -04002671and <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>,
2672and <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 -04002673
Cary Clark7cfcbca2018-01-04 16:11:51 -05002674Fill <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 -04002675
Cary Clark8cc16c72017-08-25 11:51:49 -04002676If 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>
2677returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002678
Cary Clark493df1f2017-08-25 13:14:33 -04002679<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002680## getFillPath
2681
Cary Clarka560c472017-11-27 10:44:06 -05002682<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2683bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002684</pre>
2685
2686The filled equivalent of the stroked path.
2687
2688### Parameters
2689
Cary Clark8cc16c72017-08-25 11:51:49 -04002690<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002691<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002692 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2693resulting <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>
2694 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002695optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002696 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002697if > 1, increase precision, else if (0 < res < 1) reduce precision
2698to favor speed and size</td>
2699 </tr>
2700</table>
2701
2702### Return Value
2703
Cary Clark8cc16c72017-08-25 11:51:49 -04002704true 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 -04002705
2706### Example
2707
Cary Clarkce101242017-09-01 15:51:02 -04002708<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 -05002709At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002710At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2711
2712---
2713
Cary Clarka560c472017-11-27 10:44:06 -05002714<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002715bool getFillPath(const SkPath& src, SkPath* dst) const
2716</pre>
2717
2718The filled equivalent of the stroked path.
2719
Cary Clark8cc16c72017-08-25 11:51:49 -04002720Replaces <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>.
2721<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 -04002722
2723### Parameters
2724
Cary Clark8cc16c72017-08-25 11:51:49 -04002725<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002726<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002727 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2728resulting <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 -04002729 </tr>
2730</table>
2731
2732### Return Value
2733
Cary Clark8cc16c72017-08-25 11:51:49 -04002734true 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 -04002735
2736### Example
2737
2738<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2739
2740---
2741
2742### See Also
2743
Cary Clark8cc16c72017-08-25 11:51:49 -04002744<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 -04002745
2746# <a name="Shader_Methods"></a> Shader Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002747<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2748<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002749If <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 -04002750
Cary Clark8cc16c72017-08-25 11:51:49 -04002751<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2752If <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 -04002753the fill.
2754
Cary Clark8cc16c72017-08-25 11:51:49 -04002755The 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 -04002756
2757### Example
2758
2759<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2760
Cary Clark8cc16c72017-08-25 11:51:49 -04002761If <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 -04002762
2763### Example
2764
2765<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2766
Cary Clark493df1f2017-08-25 13:14:33 -04002767<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002768## getShader
2769
Cary Clarka560c472017-11-27 10:44:06 -05002770<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002771SkShader* getShader() const
2772</pre>
2773
2774Optional colors used when filling a path, such as a gradient.
2775
Cary Clark4c06f5e2017-08-04 12:48:24 -04002776Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002777
2778### Return Value
2779
Cary Clark4c06f5e2017-08-04 12:48:24 -04002780<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002781
2782### Example
2783
2784<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2785
2786#### Example Output
2787
2788~~~~
2789nullptr == shader
2790nullptr != shader
2791~~~~
2792
2793</fiddle-embed></div>
2794
2795---
2796
Cary Clark493df1f2017-08-25 13:14:33 -04002797<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002798## refShader
2799
Cary Clarka560c472017-11-27 10:44:06 -05002800<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002801sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002802</pre>
2803
2804Optional colors used when filling a path, such as a gradient.
2805
Cary Clark4c06f5e2017-08-04 12:48:24 -04002806Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002807
2808### Return Value
2809
Cary Clark4c06f5e2017-08-04 12:48:24 -04002810<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002811
2812### Example
2813
2814<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2815
2816#### Example Output
2817
2818~~~~
2819shader unique: true
2820shader unique: false
2821~~~~
2822
2823</fiddle-embed></div>
2824
2825---
2826
Cary Clark493df1f2017-08-25 13:14:33 -04002827<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002828## setShader
2829
Cary Clarka560c472017-11-27 10:44:06 -05002830<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002831void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002832</pre>
2833
2834Optional colors used when filling a path, such as a gradient.
2835
Cary Clarkd0530ba2017-09-14 11:25:39 -04002836Sets <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 -04002837Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002838
2839### Parameters
2840
Cary Clark8cc16c72017-08-25 11:51:49 -04002841<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002842how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002843 </tr>
2844</table>
2845
2846### Example
2847
2848<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2849
2850---
2851
2852# <a name="Color_Filter_Methods"></a> Color Filter Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002853<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2854<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 -04002855If <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 -04002856
Cary Clark8cc16c72017-08-25 11:51:49 -04002857The 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 -04002858
2859### Example
2860
2861<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2862
Cary Clark493df1f2017-08-25 13:14:33 -04002863<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002864## getColorFilter
2865
Cary Clarka560c472017-11-27 10:44:06 -05002866<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002867SkColorFilter* getColorFilter() const
2868</pre>
2869
Cary Clark4c06f5e2017-08-04 12:48:24 -04002870Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2871Does 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 -04002872
2873### Return Value
2874
Cary Clark4c06f5e2017-08-04 12:48:24 -04002875<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002876
2877### Example
2878
2879<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2880
2881#### Example Output
2882
2883~~~~
2884nullptr == color filter
2885nullptr != color filter
2886~~~~
2887
2888</fiddle-embed></div>
2889
2890---
2891
Cary Clark493df1f2017-08-25 13:14:33 -04002892<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002893## refColorFilter
2894
Cary Clarka560c472017-11-27 10:44:06 -05002895<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002896sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002897</pre>
2898
Cary Clark4c06f5e2017-08-04 12:48:24 -04002899Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2900Increases <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 -04002901
2902### Return Value
2903
Cary Clark4c06f5e2017-08-04 12:48:24 -04002904<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002905
2906### Example
2907
2908<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2909
2910#### Example Output
2911
2912~~~~
2913color filter unique: true
2914color filter unique: false
2915~~~~
2916
2917</fiddle-embed></div>
2918
2919---
2920
Cary Clark493df1f2017-08-25 13:14:33 -04002921<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002922## setColorFilter
2923
Cary Clarka560c472017-11-27 10:44:06 -05002924<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002925void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002926</pre>
2927
Cary Clark6fc50412017-09-21 12:31:06 -04002928Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2929<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2930
2931Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002932
2933### Parameters
2934
Cary Clark8cc16c72017-08-25 11:51:49 -04002935<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002936<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002937 </tr>
2938</table>
2939
2940### Example
2941
2942<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2943
2944---
2945
2946# <a name="Blend_Mode_Methods"></a> Blend Mode Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002947<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 -04002948The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002949over the destination color.
2950
2951### Example
2952
2953<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2954
2955### See Also
2956
Cary Clark4c06f5e2017-08-04 12:48:24 -04002957<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002958
Cary Clark493df1f2017-08-25 13:14:33 -04002959<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002960## getBlendMode
2961
Cary Clarka560c472017-11-27 10:44:06 -05002962<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002963SkBlendMode getBlendMode() const
2964</pre>
2965
Cary Clark4c06f5e2017-08-04 12:48:24 -04002966Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002967By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002968
2969### Return Value
2970
2971mode used to combine source color with destination color
2972
2973### Example
2974
2975<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2976
2977#### Example Output
2978
2979~~~~
2980kSrcOver == getBlendMode
2981kSrcOver != getBlendMode
2982~~~~
2983
2984</fiddle-embed></div>
2985
2986---
2987
Cary Clark493df1f2017-08-25 13:14:33 -04002988<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002989## isSrcOver
2990
Cary Clarka560c472017-11-27 10:44:06 -05002991<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002992bool isSrcOver() const
2993</pre>
2994
Cary Clark8cc16c72017-08-25 11:51:49 -04002995Returns 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 -04002996
2997### Return Value
2998
Cary Clark8cc16c72017-08-25 11:51:49 -04002999true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003000
3001### Example
3002
3003<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3004
3005#### Example Output
3006
3007~~~~
3008isSrcOver == true
3009isSrcOver != true
3010~~~~
3011
3012</fiddle-embed></div>
3013
3014---
3015
Cary Clark493df1f2017-08-25 13:14:33 -04003016<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003017## setBlendMode
3018
Cary Clarka560c472017-11-27 10:44:06 -05003019<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003020void setBlendMode(SkBlendMode mode)
3021</pre>
3022
Cary Clark7cfcbca2018-01-04 16:11:51 -05003023Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003024Does not check for valid input.
3025
3026### Parameters
3027
Cary Clark8cc16c72017-08-25 11:51:49 -04003028<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003029<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003030 </tr>
3031</table>
3032
3033### Example
3034
3035<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3036
3037#### Example Output
3038
3039~~~~
3040isSrcOver == true
3041isSrcOver != true
3042~~~~
3043
3044</fiddle-embed></div>
3045
3046---
3047
3048# <a name="Path_Effect_Methods"></a> Path Effect Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003049<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3050<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 -04003051If <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 -04003052
3053### Example
3054
3055<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3056
3057### See Also
3058
Cary Clark4c06f5e2017-08-04 12:48:24 -04003059<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003060
Cary Clark493df1f2017-08-25 13:14:33 -04003061<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003062## getPathEffect
3063
Cary Clarka560c472017-11-27 10:44:06 -05003064<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003065SkPathEffect* getPathEffect() const
3066</pre>
3067
Cary Clark4c06f5e2017-08-04 12:48:24 -04003068Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3069Does 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 -04003070
3071### Return Value
3072
Cary Clark4c06f5e2017-08-04 12:48:24 -04003073<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003074
3075### Example
3076
3077<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3078
3079#### Example Output
3080
3081~~~~
3082nullptr == path effect
3083nullptr != path effect
3084~~~~
3085
3086</fiddle-embed></div>
3087
3088---
3089
Cary Clark493df1f2017-08-25 13:14:33 -04003090<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003091## refPathEffect
3092
Cary Clarka560c472017-11-27 10:44:06 -05003093<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003094sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003095</pre>
3096
Cary Clark4c06f5e2017-08-04 12:48:24 -04003097Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3098Increases <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 -04003099
3100### Return Value
3101
Cary Clark4c06f5e2017-08-04 12:48:24 -04003102<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003103
3104### Example
3105
Cary Clarka560c472017-11-27 10:44:06 -05003106<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003107
3108#### Example Output
3109
3110~~~~
3111path effect unique: true
3112path effect unique: false
3113~~~~
3114
3115</fiddle-embed></div>
3116
3117---
3118
Cary Clark493df1f2017-08-25 13:14:33 -04003119<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003120## setPathEffect
3121
Cary Clarka560c472017-11-27 10:44:06 -05003122<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003123void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003124</pre>
3125
Cary Clark6fc50412017-09-21 12:31:06 -04003126Sets <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
3127<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3128
3129Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003130
3131### Parameters
3132
Cary Clark8cc16c72017-08-25 11:51:49 -04003133<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003134replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003135 </tr>
3136</table>
3137
3138### Example
3139
3140<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3141
3142---
3143
3144# <a name="Mask_Filter_Methods"></a> Mask Filter Methods
Cary Clarkce101242017-09-01 15:51:02 -04003145<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 -04003146<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>,
3147and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003148
3149<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3150creating 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
3151modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003152
3153### Example
3154
3155<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3156
Cary Clark493df1f2017-08-25 13:14:33 -04003157<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003158## getMaskFilter
3159
Cary Clarka560c472017-11-27 10:44:06 -05003160<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003161SkMaskFilter* getMaskFilter() const
3162</pre>
3163
Cary Clark4c06f5e2017-08-04 12:48:24 -04003164Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3165Does 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 -04003166
3167### Return Value
3168
Cary Clark4c06f5e2017-08-04 12:48:24 -04003169<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003170
3171### Example
3172
3173<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3174
3175#### Example Output
3176
3177~~~~
3178nullptr == mask filter
3179nullptr != mask filter
3180~~~~
3181
3182</fiddle-embed></div>
3183
3184---
3185
Cary Clark493df1f2017-08-25 13:14:33 -04003186<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003187## refMaskFilter
3188
Cary Clarka560c472017-11-27 10:44:06 -05003189<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003190sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003191</pre>
3192
Cary Clark4c06f5e2017-08-04 12:48:24 -04003193Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003194
Cary Clark4c06f5e2017-08-04 12:48:24 -04003195Increases <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 -04003196
3197### Return Value
3198
Cary Clark4c06f5e2017-08-04 12:48:24 -04003199<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003200
3201### Example
3202
3203<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3204
3205#### Example Output
3206
3207~~~~
3208mask filter unique: true
3209mask filter unique: false
3210~~~~
3211
3212</fiddle-embed></div>
3213
3214---
3215
Cary Clark493df1f2017-08-25 13:14:33 -04003216<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003217## setMaskFilter
3218
Cary Clarka560c472017-11-27 10:44:06 -05003219<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003220void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003221</pre>
3222
Cary Clark6fc50412017-09-21 12:31:06 -04003223Sets <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
3224<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
3225<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3226
Cary Clark4c06f5e2017-08-04 12:48:24 -04003227Does not affect <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003228Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003229
3230### Parameters
3231
Cary Clark8cc16c72017-08-25 11:51:49 -04003232<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003233modifies clipping mask generated from drawn geometry</td>
3234 </tr>
3235</table>
3236
3237### Example
3238
3239<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3240
3241---
3242
3243# <a name="Typeface_Methods"></a> Typeface Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003244<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3245<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3246The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003247implementation.
3248
3249### Example
3250
Ben Wagner700ff172017-11-08 15:37:22 -05003251<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003252
Cary Clark493df1f2017-08-25 13:14:33 -04003253<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003254## getTypeface
3255
Cary Clarka560c472017-11-27 10:44:06 -05003256<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003257SkTypeface* getTypeface() const
3258</pre>
3259
Cary Clark4c06f5e2017-08-04 12:48:24 -04003260Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003261Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003262
3263### Return Value
3264
Cary Clark4c06f5e2017-08-04 12:48:24 -04003265<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003266
3267### Example
3268
Cary Clark71961fb2018-01-05 14:21:59 -05003269<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003270
3271#### Example Output
3272
3273~~~~
3274nullptr == typeface
3275nullptr != typeface
3276~~~~
3277
3278</fiddle-embed></div>
3279
3280---
3281
Cary Clark493df1f2017-08-25 13:14:33 -04003282<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003283## refTypeface
3284
Cary Clarka560c472017-11-27 10:44:06 -05003285<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003286sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003287</pre>
3288
Cary Clark4c06f5e2017-08-04 12:48:24 -04003289Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003290
3291### Return Value
3292
Cary Clark4c06f5e2017-08-04 12:48:24 -04003293<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003294
3295### Example
3296
Cary Clark71961fb2018-01-05 14:21:59 -05003297<div><fiddle-embed name="4bf8ed109c4b46d8a05c8b7763c1982c">
Cary Clark12799e12017-07-28 15:18:29 -04003298
3299#### Example Output
3300
3301~~~~
3302typeface1 != typeface2
3303typeface1 == typeface2
3304~~~~
3305
3306</fiddle-embed></div>
3307
3308---
3309
Cary Clark493df1f2017-08-25 13:14:33 -04003310<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003311## setTypeface
3312
Cary Clarka560c472017-11-27 10:44:06 -05003313<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003314void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003315</pre>
3316
Cary Clark7cfcbca2018-01-04 16:11:51 -05003317Sets <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 -04003318Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3319<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003320
3321### Parameters
3322
Cary Clark8cc16c72017-08-25 11:51:49 -04003323<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003324font and style used to draw text</td>
3325 </tr>
3326</table>
3327
3328### Example
3329
Cary Clark71961fb2018-01-05 14:21:59 -05003330<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003331
3332---
3333
3334# <a name="Rasterizer_Methods"></a> Rasterizer Methods
Cary Clark7cfcbca2018-01-04 16:11:51 -05003335<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 -04003336<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>,
3337and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003338
Cary Clark4c06f5e2017-08-04 12:48:24 -04003339<a href="undocumented#Rasterizer">Rasterizer</a> may change the geometry and transparency of the shape, such as
Cary Clark8cc16c72017-08-25 11:51:49 -04003340creating 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 -04003341creates effects like embossing and outlining.
Cary Clark6fc50412017-09-21 12:31:06 -04003342
Cary Clarkbc5697d2017-10-04 14:31:33 -04003343<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 -04003344<a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003345
3346### Example
3347
3348<div><fiddle-embed name="e63f8a50996699342a14c6e54d684108"></fiddle-embed></div>
3349
Cary Clark493df1f2017-08-25 13:14:33 -04003350<a name="SkPaint_getRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003351## getRasterizer
3352
Cary Clarka560c472017-11-27 10:44:06 -05003353<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003354SkRasterizer* getRasterizer() const
3355</pre>
3356
Cary Clark4c06f5e2017-08-04 12:48:24 -04003357Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3358Does not alter <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003359
3360### Return Value
3361
Cary Clark4c06f5e2017-08-04 12:48:24 -04003362<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003363
3364### Example
3365
3366<div><fiddle-embed name="0707d407c3a14388b107af8ae5873e55">
3367
3368#### Example Output
3369
3370~~~~
3371nullptr == rasterizer
3372nullptr != rasterizer
3373~~~~
3374
3375</fiddle-embed></div>
3376
3377---
3378
Cary Clark493df1f2017-08-25 13:14:33 -04003379<a name="SkPaint_refRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003380## refRasterizer
3381
Cary Clarka560c472017-11-27 10:44:06 -05003382<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003383sk_sp&lt;SkRasterizer&gt; refRasterizer() const
Cary Clark12799e12017-07-28 15:18:29 -04003384</pre>
3385
Cary Clark4c06f5e2017-08-04 12:48:24 -04003386Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3387Increases <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003388
3389### Return Value
3390
Cary Clark4c06f5e2017-08-04 12:48:24 -04003391<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003392
3393### Example
3394
3395<div><fiddle-embed name="c0855ce19a33cb7e5747750ef341b7b3">
3396
3397#### Example Output
3398
3399~~~~
3400rasterizer unique: true
3401rasterizer unique: false
3402~~~~
3403
3404</fiddle-embed></div>
3405
3406---
3407
Cary Clark493df1f2017-08-25 13:14:33 -04003408<a name="SkPaint_setRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003409## setRasterizer
3410
Cary Clarka560c472017-11-27 10:44:06 -05003411<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003412void setRasterizer(sk_sp&lt;SkRasterizer&gt; rasterizer)
Cary Clark12799e12017-07-28 15:18:29 -04003413</pre>
3414
Cary Clark6fc50412017-09-21 12:31:06 -04003415Sets <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
3416<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
3417<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3418
Cary Clark4c06f5e2017-08-04 12:48:24 -04003419Does not affect <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003420Increments <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003421
3422### Parameters
3423
Cary Clark8cc16c72017-08-25 11:51:49 -04003424<table> <tr> <td><a name="SkPaint_setRasterizer_rasterizer"> <code><strong>rasterizer </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003425how geometry is converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003426 </tr>
3427</table>
3428
3429### Example
3430
3431<div><fiddle-embed name="aec8ed9296c1628073086a33039f62b7"></fiddle-embed></div>
3432
3433---
3434
3435# <a name="Image_Filter_Methods"></a> Image Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003436<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3437with <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 -04003438which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003439
Cary Clark4c06f5e2017-08-04 12:48:24 -04003440<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 -04003441can 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 -04003442<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
3443<a href="undocumented#Mask_Filter">Mask Filter</a> and <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003444
3445### Example
3446
Cary Clarka560c472017-11-27 10:44:06 -05003447<div><fiddle-embed name="0b2eec148d6397d6231e1fa0b3d1496d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003448
Cary Clark493df1f2017-08-25 13:14:33 -04003449<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003450## getImageFilter
3451
Cary Clarka560c472017-11-27 10:44:06 -05003452<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003453SkImageFilter* getImageFilter() const
3454</pre>
3455
Cary Clark4c06f5e2017-08-04 12:48:24 -04003456Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3457Does 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 -04003458
3459### Return Value
3460
Cary Clark4c06f5e2017-08-04 12:48:24 -04003461<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003462
3463### Example
3464
Cary Clarka560c472017-11-27 10:44:06 -05003465<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003466
3467#### Example Output
3468
3469~~~~
3470nullptr == image filter
3471nullptr != image filter
3472~~~~
3473
3474</fiddle-embed></div>
3475
3476---
3477
Cary Clark493df1f2017-08-25 13:14:33 -04003478<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003479## refImageFilter
3480
Cary Clarka560c472017-11-27 10:44:06 -05003481<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003482sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003483</pre>
3484
Cary Clark4c06f5e2017-08-04 12:48:24 -04003485Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3486Increases <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 -04003487
3488### Return Value
3489
Cary Clark4c06f5e2017-08-04 12:48:24 -04003490<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003491
3492### Example
3493
3494<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3495
3496#### Example Output
3497
3498~~~~
3499image filter unique: true
3500image filter unique: false
3501~~~~
3502
3503</fiddle-embed></div>
3504
3505---
3506
Cary Clark493df1f2017-08-25 13:14:33 -04003507<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003508## setImageFilter
3509
Cary Clarka560c472017-11-27 10:44:06 -05003510<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003511void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003512</pre>
3513
Cary Clark6fc50412017-09-21 12:31:06 -04003514Sets <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
3515<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 -04003516on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003517
Cary Clark4c06f5e2017-08-04 12:48:24 -04003518Does not affect <a href="undocumented#Rasterizer">Rasterizer</a> or <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003519Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003520
3521### Parameters
3522
Cary Clark8cc16c72017-08-25 11:51:49 -04003523<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003524how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003525 </tr>
3526</table>
3527
3528### Example
3529
3530<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3531
3532---
3533
3534# <a name="Draw_Looper_Methods"></a> Draw Looper Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003535<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 -04003536to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003537
Cary Clark4c06f5e2017-08-04 12:48:24 -04003538<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3539<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 -05003540Set <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 -04003541
3542### Example
3543
3544<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3545
Cary Clark493df1f2017-08-25 13:14:33 -04003546<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003547## getDrawLooper
3548
Cary Clarka560c472017-11-27 10:44:06 -05003549<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003550SkDrawLooper* getDrawLooper() const
3551</pre>
3552
Cary Clark4c06f5e2017-08-04 12:48:24 -04003553Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3554Does 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 -04003555
3556### Return Value
3557
Cary Clark4c06f5e2017-08-04 12:48:24 -04003558<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003559
3560### Example
3561
3562<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3563
3564#### Example Output
3565
3566~~~~
3567nullptr == draw looper
3568nullptr != draw looper
3569~~~~
3570
3571</fiddle-embed></div>
3572
3573---
3574
Cary Clark493df1f2017-08-25 13:14:33 -04003575<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003576## refDrawLooper
3577
Cary Clarka560c472017-11-27 10:44:06 -05003578<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003579sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003580</pre>
3581
Cary Clark4c06f5e2017-08-04 12:48:24 -04003582Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3583Increases <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 -04003584
3585### Return Value
3586
Cary Clark4c06f5e2017-08-04 12:48:24 -04003587<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003588
3589### Example
3590
3591<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3592
3593#### Example Output
3594
3595~~~~
3596draw looper unique: true
3597draw looper unique: false
3598~~~~
3599
3600</fiddle-embed></div>
3601
3602---
3603
Cary Clark493df1f2017-08-25 13:14:33 -04003604<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003605## getLooper
3606
Cary Clarka560c472017-11-27 10:44:06 -05003607<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003608SkDrawLooper* getLooper() const
3609</pre>
3610
3611Deprecated.
3612
3613(see bug.skia.org/6259)
3614
3615### Return Value
3616
Cary Clark4c06f5e2017-08-04 12:48:24 -04003617<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003618
3619---
3620
Cary Clark493df1f2017-08-25 13:14:33 -04003621<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003622## setDrawLooper
3623
Cary Clarka560c472017-11-27 10:44:06 -05003624<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003625void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003626</pre>
3627
Cary Clark6fc50412017-09-21 12:31:06 -04003628Sets <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
3629<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
3630drawing unaltered.
3631
3632Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003633
3634### Parameters
3635
Cary Clark8cc16c72017-08-25 11:51:49 -04003636<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003637iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003638 </tr>
3639</table>
3640
3641### Example
3642
3643<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3644
3645---
3646
Cary Clark493df1f2017-08-25 13:14:33 -04003647<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003648## setLooper
3649
Cary Clarka560c472017-11-27 10:44:06 -05003650<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003651void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003652</pre>
3653
3654Deprecated.
3655
3656(see bug.skia.org/6259)
3657
3658### Parameters
3659
Cary Clark8cc16c72017-08-25 11:51:49 -04003660<table> <tr> <td><a name="SkPaint_setLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3661sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setLooper_drawLooper">drawLooper</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003662 </tr>
3663
3664---
3665
3666</table>
3667
3668# <a name="Text_Align"></a> Text Align
3669
Cary Clark8cc16c72017-08-25 11:51:49 -04003670## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003671
Cary Clarka560c472017-11-27 10:44:06 -05003672<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003673enum <a href="#SkPaint_Align">Align</a> {
3674<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3675<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3676<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003677};</pre>
3678
Cary Clark8cc16c72017-08-25 11:51:49 -04003679<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003680<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 -05003681<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04003682<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 -05003683and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003684as 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 -04003685
3686The text position is set by the font for both horizontal and vertical text.
3687Typically, for horizontal text, the position is to the left side of the glyph on the
3688base line; and for vertical text, the position is the horizontal center of the glyph
3689at the caps height.
3690
Cary Clark7cfcbca2018-01-04 16:11:51 -05003691<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 -04003692using the metrics returned by the font.
3693
Cary Clark8cc16c72017-08-25 11:51:49 -04003694<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003695
3696### Constants
3697
3698<table>
3699 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003700 <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 -04003701 </tr>
3702 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003703 <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
3704half 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 -04003705 </tr>
3706 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003707 <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,
3708and 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 -04003709 </tr>
3710
3711</table>
3712
Cary Clark8cc16c72017-08-25 11:51:49 -04003713## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003714
Cary Clarka560c472017-11-27 10:44:06 -05003715<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003716enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003717<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003718};</pre>
3719
3720### Constants
3721
3722<table>
3723 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003724 <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 -04003725 </tr>
3726
3727</table>
3728
3729### Example
3730
3731<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3732
3733### Example
3734
Cary Clark8cc16c72017-08-25 11:51:49 -04003735<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 -04003736
Cary Clark493df1f2017-08-25 13:14:33 -04003737<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003738## getTextAlign
3739
Cary Clarka560c472017-11-27 10:44:06 -05003740<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003741Align getTextAlign() const
3742</pre>
3743
Cary Clark8cc16c72017-08-25 11:51:49 -04003744Returns <a href="#Text_Align">Text Align</a>.
3745Returns <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 -04003746
3747### Return Value
3748
3749text placement relative to position
3750
3751### Example
3752
3753<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3754
3755#### Example Output
3756
3757~~~~
3758kLeft_Align == default
3759~~~~
3760
3761</fiddle-embed></div>
3762
3763---
3764
Cary Clark493df1f2017-08-25 13:14:33 -04003765<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003766## setTextAlign
3767
Cary Clarka560c472017-11-27 10:44:06 -05003768<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003769void setTextAlign(Align align)
3770</pre>
3771
Cary Clark8cc16c72017-08-25 11:51:49 -04003772Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3773Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003774
3775### Parameters
3776
Cary Clark8cc16c72017-08-25 11:51:49 -04003777<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003778text placement relative to position</td>
3779 </tr>
3780</table>
3781
3782### Example
3783
Cary Clark4c06f5e2017-08-04 12:48:24 -04003784<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 -04003785alignment out of range has no effect.</div></fiddle-embed></div>
3786
3787---
3788
3789# <a name="Text_Size"></a> Text Size
Cary Clark8cc16c72017-08-25 11:51:49 -04003790<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3791<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3792<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003793Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003794
3795### Example
3796
3797<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3798
Cary Clark493df1f2017-08-25 13:14:33 -04003799<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003800## getTextSize
3801
Cary Clarka560c472017-11-27 10:44:06 -05003802<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003803SkScalar getTextSize() const
3804</pre>
3805
Cary Clark8cc16c72017-08-25 11:51:49 -04003806Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003807
3808### Return Value
3809
3810typographic height of text
3811
3812### Example
3813
3814<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3815
3816---
3817
Cary Clark493df1f2017-08-25 13:14:33 -04003818<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003819## setTextSize
3820
Cary Clarka560c472017-11-27 10:44:06 -05003821<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003822void setTextSize(SkScalar textSize)
3823</pre>
3824
Cary Clark8cc16c72017-08-25 11:51:49 -04003825Sets <a href="#Text_Size">Text Size</a> in points.
3826Has 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 -04003827
3828### Parameters
3829
Cary Clark8cc16c72017-08-25 11:51:49 -04003830<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003831typographic height of text</td>
3832 </tr>
3833</table>
3834
3835### Example
3836
3837<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3838
3839---
3840
3841# <a name="Text_Scale_X"></a> Text Scale X
Cary Clark8cc16c72017-08-25 11:51:49 -04003842<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003843<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003844is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003845<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3846<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003847
3848### Example
3849
3850<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3851
Cary Clark493df1f2017-08-25 13:14:33 -04003852<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003853## getTextScaleX
3854
Cary Clarka560c472017-11-27 10:44:06 -05003855<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003856SkScalar getTextScaleX() const
3857</pre>
3858
Cary Clark8cc16c72017-08-25 11:51:49 -04003859Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003860Default value is 1.
3861
3862### Return Value
3863
3864text horizontal scale
3865
3866### Example
3867
3868<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3869
3870---
3871
Cary Clark493df1f2017-08-25 13:14:33 -04003872<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003873## setTextScaleX
3874
Cary Clarka560c472017-11-27 10:44:06 -05003875<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003876void setTextScaleX(SkScalar scaleX)
3877</pre>
3878
Cary Clark8cc16c72017-08-25 11:51:49 -04003879Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003880Default value is 1.
3881
3882### Parameters
3883
Cary Clark8cc16c72017-08-25 11:51:49 -04003884<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003885text horizontal scale</td>
3886 </tr>
3887</table>
3888
3889### Example
3890
3891<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3892
3893---
3894
3895# <a name="Text_Skew_X"></a> Text Skew X
Cary Clark8cc16c72017-08-25 11:51:49 -04003896<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003897<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003898is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003899<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3900<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003901
3902### Example
3903
3904<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3905
Cary Clark493df1f2017-08-25 13:14:33 -04003906<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003907## getTextSkewX
3908
Cary Clarka560c472017-11-27 10:44:06 -05003909<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003910SkScalar getTextSkewX() const
3911</pre>
3912
Cary Clark8cc16c72017-08-25 11:51:49 -04003913Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003914Default value is zero.
3915
3916### Return Value
3917
3918additional shear in x-axis relative to y-axis
3919
3920### Example
3921
3922<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3923
3924---
3925
Cary Clark493df1f2017-08-25 13:14:33 -04003926<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003927## setTextSkewX
3928
Cary Clarka560c472017-11-27 10:44:06 -05003929<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003930void setTextSkewX(SkScalar skewX)
3931</pre>
3932
Cary Clark8cc16c72017-08-25 11:51:49 -04003933Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003934Default value is zero.
3935
3936### Parameters
3937
Cary Clark8cc16c72017-08-25 11:51:49 -04003938<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003939additional shear in x-axis relative to y-axis</td>
3940 </tr>
3941</table>
3942
3943### Example
3944
3945<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3946
3947---
3948
3949# <a name="Text_Encoding"></a> Text Encoding
3950
Cary Clark8cc16c72017-08-25 11:51:49 -04003951## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003952
Cary Clarka560c472017-11-27 10:44:06 -05003953<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003954enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3955<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3956<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3957<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3958<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003959};</pre>
3960
Cary Clark6fc50412017-09-21 12:31:06 -04003961<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003962size, 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 -04003963
Cary Clarka560c472017-11-27 10:44:06 -05003964Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003965All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003966in the total storage required.
3967
Cary Clark7cfcbca2018-01-04 16:11:51 -05003968<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 -04003969
Cary Clark7cfcbca2018-01-04 16:11:51 -05003970<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 -04003971
Cary Clark7cfcbca2018-01-04 16:11:51 -05003972<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 -04003973
Cary Clark7cfcbca2018-01-04 16:11:51 -05003974<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 -04003975A glyph index is a 16-bit word.
3976
Cary Clark8cc16c72017-08-25 11:51:49 -04003977<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 -04003978
3979### Constants
3980
3981<table>
3982 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003983 <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 -04003984 </tr>
3985 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003986 <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 -04003987 </tr>
3988 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003989 <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 -04003990 </tr>
3991 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003992 <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 -04003993 </tr>
3994
3995</table>
3996
3997### Example
3998
Cary Clarka560c472017-11-27 10:44:06 -05003999<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
4000Second line is encoded in UTF-16.
4001Third line is encoded in UTF-32.
Cary Clark12799e12017-07-28 15:18:29 -04004002Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
4003
Cary Clark493df1f2017-08-25 13:14:33 -04004004<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004005## getTextEncoding
4006
Cary Clarka560c472017-11-27 10:44:06 -05004007<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004008TextEncoding getTextEncoding() const
4009</pre>
4010
Cary Clark8cc16c72017-08-25 11:51:49 -04004011Returns <a href="#Text_Encoding">Text Encoding</a>.
4012<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 -04004013
4014### Return Value
4015
Cary Clark7cfcbca2018-01-04 16:11:51 -05004016one 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 -04004017<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004018
4019### Example
4020
4021<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
4022
4023#### Example Output
4024
4025~~~~
4026kUTF8_TextEncoding == text encoding
4027kGlyphID_TextEncoding == text encoding
4028~~~~
4029
4030</fiddle-embed></div>
4031
4032---
4033
Cary Clark493df1f2017-08-25 13:14:33 -04004034<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004035## setTextEncoding
4036
Cary Clarka560c472017-11-27 10:44:06 -05004037<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004038void setTextEncoding(TextEncoding encoding)
4039</pre>
4040
Cary Clark7cfcbca2018-01-04 16:11:51 -05004041Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004042<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
4043Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004044
4045### Parameters
4046
Cary Clark8cc16c72017-08-25 11:51:49 -04004047<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05004048one 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 -04004049<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004050 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004051#
4052
Cary Clark12799e12017-07-28 15:18:29 -04004053</table>
4054
4055### Example
4056
4057<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
4058
4059#### Example Output
4060
4061~~~~
40624 != text encoding
4063~~~~
4064
4065</fiddle-embed></div>
4066
4067---
4068
4069# <a name="Font_Metrics"></a> Font Metrics
Cary Clarkce101242017-09-01 15:51:02 -04004070<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 -05004071The 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 -04004072<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004073
Cary Clark4c06f5e2017-08-04 12:48:24 -04004074<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 -04004075X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4076are positive.
4077Y-axis values above the baseline are negative, and below the baseline are positive.
4078
4079### Example
4080
Ben Wagnere5806492017-11-09 12:08:31 -05004081<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004082
Cary Clark8cc16c72017-08-25 11:51:49 -04004083# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004084
Cary Clarka560c472017-11-27 10:44:06 -05004085<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004086struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4087enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4088<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4089<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4090<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4091<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004092};
4093
Cary Clark8cc16c72017-08-25 11:51:49 -04004094uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4095<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4096<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4097<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4098<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4099<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4100<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4101<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4102<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4103<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4104<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4105<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4106<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4107<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4108<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4109<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004110
Cary Clark8cc16c72017-08-25 11:51:49 -04004111bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4112bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4113bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4114bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004115};</pre>
4116
Cary Clark154beea2017-10-26 07:58:48 -04004117<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
4118computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4119not available.
4120
Ben Wagnere5806492017-11-09 12:08:31 -05004121All vertical values relative to the baseline are given y-down. As such, zero is on the
4122baseline, negative values are above the baseline, and positive values are below the
4123baseline.
4124
Cary Clark154beea2017-10-26 07:58:48 -04004125<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
4126are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004127
Cary Clark154beea2017-10-26 07:58:48 -04004128<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
4129are valid, since their value may be zero.
4130
Cary Clark8cc16c72017-08-25 11:51:49 -04004131## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004132
Cary Clarka560c472017-11-27 10:44:06 -05004133<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004134enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4135<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4136<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4137<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4138<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004139};</pre>
4140
Cary Clark154beea2017-10-26 07:58:48 -04004141<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4142the underline or strikeout metric may be valid and zero.
4143Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4144
Cary Clark12799e12017-07-28 15:18:29 -04004145### Constants
4146
4147<table>
4148 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004149 <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 -04004150 </tr>
4151 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004152 <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 -04004153 </tr>
4154 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004155 <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 -04004156 </tr>
4157 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004158 <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 -04004159 </tr>
4160
4161</table>
4162
Cary Clark8cc16c72017-08-25 11:51:49 -04004163<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004164
Cary Clark8cc16c72017-08-25 11:51:49 -04004165<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004166
Cary Clark8cc16c72017-08-25 11:51:49 -04004167<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004168
Ben Wagnere5806492017-11-09 12:08:31 -05004169Greatest extent above the baseline for any glyph.
4170Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004171
Cary Clark8cc16c72017-08-25 11:51:49 -04004172<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004173
4174Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004175Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004176
Cary Clark8cc16c72017-08-25 11:51:49 -04004177<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004178
4179Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004180Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004181
Cary Clark8cc16c72017-08-25 11:51:49 -04004182<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004183
Ben Wagnere5806492017-11-09 12:08:31 -05004184Greatest extent below the baseline for any glyph.
4185Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004186
Cary Clark8cc16c72017-08-25 11:51:49 -04004187<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004188
4189Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004190Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004191
Cary Clark8cc16c72017-08-25 11:51:49 -04004192<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004193
4194Average character width, if it is available.
4195Zero if no average width is stored in the font.
4196
Cary Clark8cc16c72017-08-25 11:51:49 -04004197<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004198
4199Maximum character width.
4200
Cary Clark8cc16c72017-08-25 11:51:49 -04004201<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004202
Ben Wagnere5806492017-11-09 12:08:31 -05004203Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004204Typically less than zero.
4205
Cary Clark8cc16c72017-08-25 11:51:49 -04004206<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004207
Cary Clarkce101242017-09-01 15:51:02 -04004208Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004209Typically greater than zero.
4210
Cary Clark8cc16c72017-08-25 11:51:49 -04004211<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004212
4213Height of a lower-case 'x'.
4214May be zero if no lower-case height is stored in the font.
4215
Cary Clark8cc16c72017-08-25 11:51:49 -04004216<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004217
4218Height of an upper-case letter.
4219May be zero if no upper-case height is stored in the font.
4220
Cary Clark8cc16c72017-08-25 11:51:49 -04004221<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004222
Ben Wagnere5806492017-11-09 12:08:31 -05004223Underline thickness.
4224
4225If 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 -04004226If <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 -04004227
Cary Clark8cc16c72017-08-25 11:51:49 -04004228<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004229
Ben Wagnere5806492017-11-09 12:08:31 -05004230Position of the top of the underline stroke relative to the baseline.
4231Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004232
Cary Clark8cc16c72017-08-25 11:51:49 -04004233If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4234If <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 -04004235
Cary Clark8cc16c72017-08-25 11:51:49 -04004236<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004237
Ben Wagnere5806492017-11-09 12:08:31 -05004238Strikeout thickness.
4239
4240If 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 -04004241If <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 -04004242
Cary Clark8cc16c72017-08-25 11:51:49 -04004243<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004244
Ben Wagnere5806492017-11-09 12:08:31 -05004245Position of the bottom of the strikeout stroke relative to the baseline.
4246Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004247
Cary Clark8cc16c72017-08-25 11:51:49 -04004248If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4249If <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 -04004250
Cary Clark493df1f2017-08-25 13:14:33 -04004251<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004252## hasUnderlineThickness
4253
Cary Clarka560c472017-11-27 10:44:06 -05004254<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004255bool hasUnderlineThickness(SkScalar* thickness) const
4256</pre>
4257
Ben Wagnere5806492017-11-09 12:08:31 -05004258If <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 -04004259<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,
4260return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004261
4262### Parameters
4263
Cary Clark8cc16c72017-08-25 11:51:49 -04004264<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004265storage for underline width</td>
4266 </tr>
4267</table>
4268
4269### Return Value
4270
4271true if font specifies underline width
4272
4273---
4274
Cary Clark493df1f2017-08-25 13:14:33 -04004275<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004276## hasUnderlinePosition
4277
Cary Clarka560c472017-11-27 10:44:06 -05004278<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004279bool hasUnderlinePosition(SkScalar* position) const
4280</pre>
4281
Ben Wagnere5806492017-11-09 12:08:31 -05004282If <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 -04004283<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,
4284return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004285
4286### Parameters
4287
Cary Clark8cc16c72017-08-25 11:51:49 -04004288<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4289storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004290 </tr>
4291</table>
4292
4293### Return Value
4294
Cary Clark8cc16c72017-08-25 11:51:49 -04004295true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004296
4297---
4298
Cary Clark493df1f2017-08-25 13:14:33 -04004299<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004300## hasStrikeoutThickness
4301
Cary Clarka560c472017-11-27 10:44:06 -05004302<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004303bool hasStrikeoutThickness(SkScalar* thickness) const
4304</pre>
4305
Ben Wagnere5806492017-11-09 12:08:31 -05004306If <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 -04004307<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,
4308return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004309
4310### Parameters
4311
Cary Clark8cc16c72017-08-25 11:51:49 -04004312<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004313storage for strikeout width</td>
4314 </tr>
4315</table>
4316
4317### Return Value
4318
4319true if font specifies strikeout width
4320
4321---
4322
Cary Clark493df1f2017-08-25 13:14:33 -04004323<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004324## hasStrikeoutPosition
4325
Cary Clarka560c472017-11-27 10:44:06 -05004326<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004327bool hasStrikeoutPosition(SkScalar* position) const
4328</pre>
4329
Ben Wagnere5806492017-11-09 12:08:31 -05004330If <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 -04004331<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,
4332return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004333
4334### Parameters
4335
Cary Clark8cc16c72017-08-25 11:51:49 -04004336<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4337storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004338 </tr>
4339</table>
4340
4341### Return Value
4342
Cary Clark8cc16c72017-08-25 11:51:49 -04004343true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004344
4345---
4346
Cary Clark493df1f2017-08-25 13:14:33 -04004347<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004348## getFontMetrics
4349
Cary Clarka560c472017-11-27 10:44:06 -05004350<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004351SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4352</pre>
4353
Cary Clark8cc16c72017-08-25 11:51:49 -04004354Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4355The 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 -04004356descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004357If <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>.
4358Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4359dimensions 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>,
4360<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4361Results 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 -04004362is ignored.
4363
4364### Parameters
4365
Cary Clark8cc16c72017-08-25 11:51:49 -04004366<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4367storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4368 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004369additional multiplier for returned values</td>
4370 </tr>
4371</table>
4372
4373### Return Value
4374
4375recommended spacing between lines
4376
4377### Example
4378
4379<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4380
4381### See Also
4382
Cary Clark8cc16c72017-08-25 11:51:49 -04004383<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 -04004384
4385---
4386
Cary Clark493df1f2017-08-25 13:14:33 -04004387<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004388## getFontSpacing
4389
Cary Clarka560c472017-11-27 10:44:06 -05004390<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004391SkScalar getFontSpacing() const
4392</pre>
4393
4394Returns the recommended spacing between lines: the sum of metrics
4395descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004396Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004397dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004398Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004399
4400### Return Value
4401
4402recommended spacing between lines
4403
4404### Example
4405
4406<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4407
4408#### Example Output
4409
4410~~~~
4411textSize: 12 fontSpacing: 13.9688
4412textSize: 18 fontSpacing: 20.9531
4413textSize: 24 fontSpacing: 27.9375
4414textSize: 32 fontSpacing: 37.25
4415~~~~
4416
4417</fiddle-embed></div>
4418
4419---
4420
Cary Clark493df1f2017-08-25 13:14:33 -04004421<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004422## getFontBounds
4423
Cary Clarka560c472017-11-27 10:44:06 -05004424<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004425SkRect getFontBounds() const
4426</pre>
4427
Cary Clarkce101242017-09-01 15:51:02 -04004428Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004429Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004430ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4431and <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 -04004432
Cary Clark8cc16c72017-08-25 11:51:49 -04004433If <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 -05004434returns 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 -04004435<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 -04004436
4437### Return Value
4438
Cary Clarkce101242017-09-01 15:51:02 -04004439union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004440
4441### Example
4442
4443<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4444
4445#### Example Output
4446
4447~~~~
4448metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4449font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4450~~~~
4451
4452</fiddle-embed></div>
4453
4454---
4455
Cary Clark493df1f2017-08-25 13:14:33 -04004456<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004457## textToGlyphs
4458
Cary Clarka560c472017-11-27 10:44:06 -05004459<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004460int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4461</pre>
4462
Cary Clark8cc16c72017-08-25 11:51:49 -04004463Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4464Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4465<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>.
4466<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004467
Cary Clarkbc5697d2017-10-04 14:31:33 -04004468Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004469
Cary Clark8cc16c72017-08-25 11:51:49 -04004470If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4471If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004472
Cary Clark8cc16c72017-08-25 11:51:49 -04004473If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004474<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004475
4476### Parameters
4477
Cary Clark8cc16c72017-08-25 11:51:49 -04004478<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004479character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004480 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004481length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004482 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004483storage for glyph indices; may be nullptr</td>
4484 </tr>
4485</table>
4486
4487### Return Value
4488
Cary Clark8cc16c72017-08-25 11:51:49 -04004489number 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 -04004490
4491### Example
4492
4493<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4494
4495---
4496
Cary Clark493df1f2017-08-25 13:14:33 -04004497<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004498## countText
4499
Cary Clarka560c472017-11-27 10:44:06 -05004500<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004501int countText(const void* text, size_t byteLength) const
4502</pre>
4503
Cary Clarkce101242017-09-01 15:51:02 -04004504Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4505Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004506Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004507
4508### Parameters
4509
Cary Clark8cc16c72017-08-25 11:51:49 -04004510<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004511character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004512 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004513length of character storage in bytes</td>
4514 </tr>
4515</table>
4516
4517### Return Value
4518
Cary Clarkce101242017-09-01 15:51:02 -04004519number 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 -04004520
4521### Example
4522
4523<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4524
4525#### Example Output
4526
4527~~~~
4528count = 5
4529~~~~
4530
4531</fiddle-embed></div>
4532
4533---
4534
Cary Clark493df1f2017-08-25 13:14:33 -04004535<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004536## containsText
4537
Cary Clarka560c472017-11-27 10:44:06 -05004538<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004539bool containsText(const void* text, size_t byteLength) const
4540</pre>
4541
Cary Clark7cfcbca2018-01-04 16:11:51 -05004542Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004543Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004544<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004545
Cary Clark8cc16c72017-08-25 11:51:49 -04004546If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4547returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4548does 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 -04004549
Cary Clarkce101242017-09-01 15:51:02 -04004550Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004551
4552### Parameters
4553
Cary Clark8cc16c72017-08-25 11:51:49 -04004554<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004555array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004556 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4557number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004558 </tr>
4559</table>
4560
4561### Return Value
4562
Cary Clark8cc16c72017-08-25 11:51:49 -04004563true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004564
4565### Example
4566
Cary Clark8cc16c72017-08-25 11:51:49 -04004567<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 -05004568corresponding to the Unicode surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004569
4570#### Example Output
4571
4572~~~~
45730x00b0 == has char
45740xd800 != has char
4575~~~~
4576
4577</fiddle-embed></div>
4578
4579### Example
4580
Cary Clark8cc16c72017-08-25 11:51:49 -04004581<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 -04004582that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004583
4584#### Example Output
4585
4586~~~~
45870x01ff == has glyph
45880x0000 != has glyph
45890xffff == has glyph
4590~~~~
4591
4592</fiddle-embed></div>
4593
4594### See Also
4595
Cary Clark8cc16c72017-08-25 11:51:49 -04004596<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004597
4598---
4599
Cary Clark493df1f2017-08-25 13:14:33 -04004600<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004601## glyphsToUnichars
4602
Cary Clarka560c472017-11-27 10:44:06 -05004603<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004604void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4605</pre>
4606
Cary Clark7cfcbca2018-01-04 16:11:51 -05004607Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4608<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004609Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004610by <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 -04004611
Cary Clark7cfcbca2018-01-04 16:11:51 -05004612Only supported on platforms that use FreeType as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004613
4614### Parameters
4615
Cary Clark8cc16c72017-08-25 11:51:49 -04004616<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004617array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004618 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004619length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004620 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004621storage for character codes, one per glyph</td>
4622 </tr>
4623</table>
4624
4625### Example
4626
Cary Clark7cfcbca2018-01-04 16:11:51 -05004627<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 -04004628
4629---
4630
4631# <a name="Measure_Text"></a> Measure Text
4632
Cary Clark493df1f2017-08-25 13:14:33 -04004633<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004634## measureText
4635
Cary Clarka560c472017-11-27 10:44:06 -05004636<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004637SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4638</pre>
4639
Cary Clark8cc16c72017-08-25 11:51:49 -04004640Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4641and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4642The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4643Uses <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,
4644and <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
4645<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4646Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4647The 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 -04004648
4649### Parameters
4650
Cary Clark8cc16c72017-08-25 11:51:49 -04004651<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004652character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004653 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4654number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4655 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004656returns bounding box relative to (0, 0) if not nullptr</td>
4657 </tr>
4658</table>
4659
4660### Return Value
4661
4662advance width or height
4663
4664### Example
4665
4666<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4667
4668---
4669
Cary Clarka560c472017-11-27 10:44:06 -05004670<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004671SkScalar measureText(const void* text, size_t length) const
4672</pre>
4673
Cary Clark8cc16c72017-08-25 11:51:49 -04004674Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4675and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4676The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4677Uses <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,
4678and <a href="#Text_Size">Text Size</a> to scale the metrics.
4679Does 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 -04004680
4681### Parameters
4682
Cary Clark8cc16c72017-08-25 11:51:49 -04004683<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004684character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004685 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4686number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004687 </tr>
4688</table>
4689
4690### Return Value
4691
4692advance width or height
4693
4694### Example
4695
4696<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4697
4698#### Example Output
4699
4700~~~~
4701default width = 5
4702double width = 10
4703~~~~
4704
4705</fiddle-embed></div>
4706
4707---
4708
Cary Clark493df1f2017-08-25 13:14:33 -04004709<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004710## breakText
4711
Cary Clarka560c472017-11-27 10:44:06 -05004712<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004713size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004714 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004715</pre>
4716
Cary Clark8cc16c72017-08-25 11:51:49 -04004717Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4718If <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
4719equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4720If <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
4721equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4722Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4723Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4724Uses <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,
4725and <a href="#Text_Size">Text Size</a> to scale the metrics.
4726Does 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 -04004727
4728### Parameters
4729
Cary Clark8cc16c72017-08-25 11:51:49 -04004730<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004731character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004732 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4733number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4734 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4735advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4736 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4737returns 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 -04004738 </tr>
4739</table>
4740
4741### Return Value
4742
Cary Clark8cc16c72017-08-25 11:51:49 -04004743bytes 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 -04004744
4745### Example
4746
Cary Clark4c06f5e2017-08-04 12:48:24 -04004747<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 -04004748<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 -04004749
4750---
4751
Cary Clark493df1f2017-08-25 13:14:33 -04004752<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004753## getTextWidths
4754
Cary Clarka560c472017-11-27 10:44:06 -05004755<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4756int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004757</pre>
4758
Cary Clark8cc16c72017-08-25 11:51:49 -04004759Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4760the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4761Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4762If <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 -05004763if <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 -04004764If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4765If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4766Uses <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,
4767and <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>.
4768Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4769Does 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 -04004770
4771### Parameters
4772
Cary Clark8cc16c72017-08-25 11:51:49 -04004773<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004774character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004775 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4776number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4777 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4778returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4779 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4780returns <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 -04004781 </tr>
4782</table>
4783
4784### Return Value
4785
Cary Clark8cc16c72017-08-25 11:51:49 -04004786glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004787
4788### Example
4789
Cary Clarkce101242017-09-01 15:51:02 -04004790<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 -04004791The 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 -04004792
4793---
4794
4795# <a name="Text_Path"></a> Text Path
Cary Clarkce101242017-09-01 15:51:02 -04004796<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 -04004797
Cary Clark493df1f2017-08-25 13:14:33 -04004798<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004799## getTextPath
4800
Cary Clarka560c472017-11-27 10:44:06 -05004801<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4802void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004803</pre>
4804
Cary Clark8cc16c72017-08-25 11:51:49 -04004805Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4806Uses <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,
4807and <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.
4808All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4809Uses <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 -04004810
4811### Parameters
4812
Cary Clark8cc16c72017-08-25 11:51:49 -04004813<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004814character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004815 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4816number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4817 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004818<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 -04004819 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004820<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 -04004821 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004822geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004823 </tr>
4824</table>
4825
4826### Example
4827
Cary Clark4c06f5e2017-08-04 12:48:24 -04004828<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 -04004829the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4830
4831---
4832
Cary Clark493df1f2017-08-25 13:14:33 -04004833<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004834## getPosTextPath
4835
Cary Clarka560c472017-11-27 10:44:06 -05004836<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4837void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004838</pre>
4839
Cary Clark8cc16c72017-08-25 11:51:49 -04004840Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4841Uses <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,
4842and <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.
4843All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4844Uses <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>.
4845<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004846
4847### Parameters
4848
Cary Clark8cc16c72017-08-25 11:51:49 -04004849<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004850character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004851 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4852number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4853 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004854positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004855 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004856geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004857 </tr>
4858</table>
4859
4860### Example
4861
Cary Clarkce101242017-09-01 15:51:02 -04004862<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 -04004863
4864---
4865
4866# <a name="Text_Intercepts"></a> Text Intercepts
Cary Clarkce101242017-09-01 15:51:02 -04004867<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 -04004868of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004869underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004870
Cary Clark493df1f2017-08-25 13:14:33 -04004871<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004872## getTextIntercepts
4873
Cary Clarka560c472017-11-27 10:44:06 -05004874<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004875int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4876 const SkScalar bounds[2], SkScalar* intervals) const
4877</pre>
4878
Cary Clark8cc16c72017-08-25 11:51:49 -04004879Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4880<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 -04004881The 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 -05004882the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004883Uses <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,
4884and <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.
4885Uses <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>.
4886Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4887<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004888
4889### Parameters
4890
Cary Clark8cc16c72017-08-25 11:51:49 -04004891<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004892character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004893 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4894number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4895 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004896<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 -04004897 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004898<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 -04004899 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004900lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004901 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004902returned intersections; may be nullptr</td>
4903 </tr>
4904</table>
4905
4906### Return Value
4907
4908number of intersections; may be zero
4909
4910### Example
4911
Cary Clarkce101242017-09-01 15:51:02 -04004912<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 -04004913
4914---
4915
Cary Clark493df1f2017-08-25 13:14:33 -04004916<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004917## getPosTextIntercepts
4918
Cary Clarka560c472017-11-27 10:44:06 -05004919<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004920int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4921 const SkScalar bounds[2], SkScalar* intervals) const
4922</pre>
4923
Cary Clark8cc16c72017-08-25 11:51:49 -04004924Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4925<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 -04004926The 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 -05004927the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004928Uses <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,
4929and <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.
4930Uses <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>.
4931Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4932<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004933
4934### Parameters
4935
Cary Clark8cc16c72017-08-25 11:51:49 -04004936<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004937character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004938 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4939number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4940 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004941positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004942 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004943lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004944 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004945returned intersections; may be nullptr</td>
4946 </tr>
4947</table>
4948
4949### Return Value
4950
Cary Clarka523d2d2017-08-30 08:58:10 -04004951number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004952
4953### Example
4954
Cary Clarkce101242017-09-01 15:51:02 -04004955<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 -04004956
4957---
4958
Cary Clark493df1f2017-08-25 13:14:33 -04004959<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004960## getPosTextHIntercepts
4961
Cary Clarka560c472017-11-27 10:44:06 -05004962<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4963int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4964 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004965</pre>
4966
Cary Clark8cc16c72017-08-25 11:51:49 -04004967Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4968<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 -04004969The 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 -05004970the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004971Uses <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,
4972and <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.
4973Uses <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>.
4974Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4975<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004976
4977### Parameters
4978
Cary Clark8cc16c72017-08-25 11:51:49 -04004979<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004980character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004981 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4982number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4983 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004984positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004985 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004986position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004987 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004988lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004989 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004990returned intersections; may be nullptr</td>
4991 </tr>
4992</table>
4993
4994### Return Value
4995
4996number of intersections; may be zero
4997
4998### Example
4999
Cary Clark4c06f5e2017-08-04 12:48:24 -04005000<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 -04005001
5002---
5003
Cary Clark493df1f2017-08-25 13:14:33 -04005004<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005005## getTextBlobIntercepts
5006
Cary Clarka560c472017-11-27 10:44:06 -05005007<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5008int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04005009</pre>
5010
Cary Clark8cc16c72017-08-25 11:51:49 -04005011Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
5012<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04005013The 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 -05005014the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05005015Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04005016and <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 -04005017Uses 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 -05005018<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
5019
Cary Clark8cc16c72017-08-25 11:51:49 -04005020Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
5021<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005022
5023### Parameters
5024
Cary Clark8cc16c72017-08-25 11:51:49 -04005025<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005026<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005027 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005028lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005029 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005030returned intersections; may be nullptr</td>
5031 </tr>
5032</table>
5033
5034### Return Value
5035
5036number of intersections; may be zero
5037
5038### Example
5039
Cary Clark3cd22cc2017-12-01 11:49:58 -05005040<div><fiddle-embed name="71959a66b2290d70003887c0de339266"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04005041
5042---
5043
Cary Clark493df1f2017-08-25 13:14:33 -04005044<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005045## nothingToDraw
5046
Cary Clarka560c472017-11-27 10:44:06 -05005047<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005048bool nothingToDraw() const
5049</pre>
5050
Cary Clark8cc16c72017-08-25 11:51:49 -04005051Returns true if <a href="#Paint">Paint</a> prevents all drawing;
5052otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005053
Cary Clarkce101242017-09-01 15:51:02 -04005054Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
5055new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005056
5057### Return Value
5058
Cary Clark8cc16c72017-08-25 11:51:49 -04005059true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005060
5061### Example
5062
5063<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5064
5065#### Example Output
5066
5067~~~~
5068initial nothing to draw: false
5069blend dst nothing to draw: true
5070blend src over nothing to draw: false
5071alpha 0 nothing to draw: true
5072~~~~
5073
5074</fiddle-embed></div>
5075
5076---
5077
5078# <a name="Fast_Bounds"></a> Fast Bounds
Cary Clark8cc16c72017-08-25 11:51:49 -04005079<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5080<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005081
Cary Clark493df1f2017-08-25 13:14:33 -04005082<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005083## canComputeFastBounds
5084
Cary Clarka560c472017-11-27 10:44:06 -05005085<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005086bool canComputeFastBounds() const
5087</pre>
5088
Cary Clark8cc16c72017-08-25 11:51:49 -04005089Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5090to 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 -04005091always returns false.
5092
5093### Return Value
5094
Cary Clark8cc16c72017-08-25 11:51:49 -04005095true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005096
5097---
5098
Cary Clark493df1f2017-08-25 13:14:33 -04005099<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005100## computeFastBounds
5101
Cary Clarka560c472017-11-27 10:44:06 -05005102<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005103const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5104</pre>
5105
Cary Clark8cc16c72017-08-25 11:51:49 -04005106Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005107raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005108effects 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 -04005109parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005110for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005111
Cary Clarkbc5697d2017-10-04 14:31:33 -04005112The 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 -04005113should 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 -04005114use 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 -04005115<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005116
5117### Parameters
5118
Cary Clark8cc16c72017-08-25 11:51:49 -04005119<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5120geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5121 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005122computed bounds of geometry; may not be nullptr</td>
5123 </tr>
5124</table>
5125
5126### Return Value
5127
5128fast computed bounds
5129
5130---
5131
Cary Clark493df1f2017-08-25 13:14:33 -04005132<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005133## computeFastStrokeBounds
5134
Cary Clarka560c472017-11-27 10:44:06 -05005135<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005136const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5137</pre>
5138
5139### Parameters
5140
Cary Clark8cc16c72017-08-25 11:51:49 -04005141<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5142geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5143 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005144computed bounds of geometry</td>
5145 </tr>
5146</table>
5147
5148### Return Value
5149
5150fast computed bounds
5151
5152---
5153
Cary Clark493df1f2017-08-25 13:14:33 -04005154<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005155## doComputeFastBounds
5156
Cary Clarka560c472017-11-27 10:44:06 -05005157<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5158const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005159</pre>
5160
Cary Clarkce101242017-09-01 15:51:02 -04005161Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5162account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5163altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005164
5165### Parameters
5166
Cary Clark8cc16c72017-08-25 11:51:49 -04005167<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5168geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5169 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005170computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005171 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5172overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005173 </tr>
5174</table>
5175
5176### Return Value
5177
5178fast computed bounds
5179
5180---
5181
Cary Clark493df1f2017-08-25 13:14:33 -04005182<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005183## toString
5184
Cary Clarka560c472017-11-27 10:44:06 -05005185<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005186void toString(SkString* str) const;
5187</pre>
5188
Cary Clarkce101242017-09-01 15:51:02 -04005189Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5190internal debugging tools. The interface and implementation may be
Cary Clark7cfcbca2018-01-04 16:11:51 -05005191suppressed by defining SK_IGNORE_TO_STRING.
Cary Clark12799e12017-07-28 15:18:29 -04005192
5193### Parameters
5194
Cary Clark8cc16c72017-08-25 11:51:49 -04005195<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005196storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005197 </tr>
5198</table>
5199
5200### Example
5201
5202<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5203
5204#### Example Output
5205
5206~~~~
5207text size = 12
5208~~~~
5209
5210</fiddle-embed></div>
5211
Cary Clark2ade9972017-11-02 17:49:34 -04005212### See Also
5213
5214<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>
5215
Cary Clark12799e12017-07-28 15:18:29 -04005216---
5217