blob: 7695f98c4368a86c6b5618b5f6f19e6e73683576 [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>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040066| <a href="#Image_Filter_Methods">Image Filter Methods</a> | Get and set <a href="undocumented#Image_Filter">Image Filter</a>. |
67| <a href="#Draw_Looper_Methods">Draw Looper Methods</a> | Get and set <a href="undocumented#Draw_Looper">Draw Looper</a>. |
68| <a href="#Text_Align">Text Align</a> | <a href="undocumented#Text">Text</a> placement relative to position. |
69| <a href="#Text_Size">Text Size</a> | Overall height in points. |
70| <a href="#Text_Scale_X">Text Scale X</a> | <a href="undocumented#Text">Text</a> horizontal scale. |
71| <a href="#Text_Skew_X">Text Skew X</a> | <a href="undocumented#Text">Text</a> horizontal slant. |
Cary Clarkce101242017-09-01 15:51:02 -040072| <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 -040073| <a href="#Font_Metrics">Font Metrics</a> | Common glyph dimensions. |
74| <a href="#Measure_Text">Measure Text</a> | Width, height, bounds of text. |
Cary Clarkce101242017-09-01 15:51:02 -040075| <a href="#Text_Path">Text Path</a> | Geometry of <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040076| <a href="#Text_Intercepts">Text Intercepts</a> | Advanced underline, strike through. |
Cary Clarkce101242017-09-01 15:51:02 -040077| <a href="#Fast_Bounds">Fast Bounds</a> | Approximate area required by <a href="#Paint">Paint</a>. |
Cary Clark12799e12017-07-28 15:18:29 -040078
79## <a name="Constants"></a> Constants
80
81| constants | description |
82| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040083| <a href="#SkPaint_Align">Align</a> | <a href="undocumented#Glyph">Glyph</a> locations relative to text position. |
84| <a href="#SkPaint_Cap">Cap</a> | Start and end geometry on stroked shapes. |
85| <a href="#SkPaint_Flags">Flags</a> | Values described by bits and masks. |
86| <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetrics::FontMetricsFlags</a> | Valid <a href="#Font_Metrics">Font Metrics</a>. |
87| <a href="#SkPaint_Hinting">Hinting</a> | Level of glyph outline adjustment. |
88| <a href="#SkPaint_Join">Join</a> | Corner geometry on stroked shapes. |
89| <a href="#SkPaint_Style">Style</a> | Stroke, fill, or both. |
Cary Clarkbc5697d2017-10-04 14:31:33 -040090| <a href="#SkPaint_TextEncoding">TextEncoding</a> | Character or glyph encoded size. |
Cary Clark12799e12017-07-28 15:18:29 -040091
92## <a name="Structs"></a> Structs
93
94| struct | description |
95| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040096| <a href="#SkPaint_FontMetrics">FontMetrics</a> | <a href="undocumented#Typeface">Typeface</a> values. |
Cary Clark12799e12017-07-28 15:18:29 -040097
98## <a name="Constructors"></a> Constructors
99
100| | description |
101| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400102| <a href="#SkPaint_empty_constructor">SkPaint()</a> | Constructs with default values. |
Cary Clark73fa9722017-08-29 17:36:51 -0400103| <a href="#SkPaint_copy_const_SkPaint">SkPaint(const SkPaint& paint)</a> | Makes a shallow copy. |
104| <a href="#SkPaint_move_SkPaint">SkPaint(SkPaint&& paint)</a> | Moves paint without copying it. |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400105| | Decreases <a href="undocumented#Reference_Count">Reference Count</a> of owned objects. |
Cary Clark12799e12017-07-28 15:18:29 -0400106
107## <a name="Operators"></a> Operators
108
109| operator | description |
110| --- | --- |
Cary Clarka560c472017-11-27 10:44:06 -0500111| <a href="#SkPaint_copy_operator">operator=(const SkPaint& paint)</a> | Makes a shallow copy. |
112| <a href="#SkPaint_move_operator">operator=(SkPaint&& paint)</a> | Moves paint without copying it. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400113| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | Compares paints for equality. |
Cary Clarka560c472017-11-27 10:44:06 -0500114| <a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | Compares paints for inequality. |
Cary Clark12799e12017-07-28 15:18:29 -0400115
116## <a name="Member_Functions"></a> Member Functions
117
118| function | description |
119| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400120| <a href="#SkPaint_breakText">breakText</a> | Returns text that fits in a width. |
121| <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> | Returns true if settings allow for fast bounds computation. |
122| <a href="#SkPaint_computeFastBounds">computeFastBounds</a> | Returns fill bounds for quick reject tests. |
123| <a href="#SkPaint_computeFastStrokeBounds">computeFastStrokeBounds</a> | Returns stroke bounds for quick reject tests. |
Cary Clarkce101242017-09-01 15:51:02 -0400124| <a href="#SkPaint_containsText">containsText</a> | Returns if all text corresponds to <a href="#Glyph">Glyphs</a>. |
125| <a href="#SkPaint_countText">countText</a> | Returns number of <a href="#Glyph">Glyphs</a> in text. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400126| <a href="#SkPaint_doComputeFastBounds">doComputeFastBounds</a> | Returns bounds for quick reject tests. |
127| <a href="#SkPaint_flatten">flatten</a> | Serializes into a buffer. |
128| <a href="#SkPaint_getAlpha">getAlpha</a> | Returns <a href="#Alpha">Color Alpha</a>, color opacity. |
Cary Clarkce101242017-09-01 15:51:02 -0400129| <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 -0400130| <a href="#SkPaint_getColor">getColor</a> | Returns <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color. |
131| <a href="#SkPaint_getColorFilter">getColorFilter</a> | Returns <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered. |
132| <a href="#SkPaint_getDrawLooper">getDrawLooper</a> | Returns <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
133| <a href="#SkPaint_getFillPath">getFillPath</a> | Returns fill path equivalent to stroke. |
134| <a href="#SkPaint_getFilterQuality">getFilterQuality</a> | Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, image filtering level. |
135| <a href="#SkPaint_getFlags">getFlags</a> | Returns <a href="#SkPaint_Flags">Flags</a> stored in a bit field. |
136| <a href="#SkPaint_getFontBounds">getFontBounds</a> | Returns union all glyph bounds. |
137| <a href="#SkPaint_getFontMetrics">getFontMetrics</a> | Returns <a href="undocumented#Typeface">Typeface</a> metrics scaled by text size. |
138| <a href="#SkPaint_getFontSpacing">getFontSpacing</a> | Returns recommended spacing between lines. |
139| <a href="#SkPaint_getHash">getHash</a> | Returns a shallow hash for equality checks. |
140| <a href="#SkPaint_getHinting">getHinting</a> | Returns <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level. |
141| <a href="#SkPaint_getImageFilter">getImageFilter</a> | Returns <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
142| <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>. |
143| <a href="#SkPaint_getPathEffect">getPathEffect</a> | Returns <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
144| <a href="#SkPaint_getPosTextPath">getPosTextPath</a> | Returns <a href="SkPath_Reference#Path">Path</a> equivalent to positioned text. |
145| <a href="#SkPaint_getPosTextIntercepts">getPosTextIntercepts</a> | Returns where lines intersect positioned text; underlines. |
146| <a href="#SkPaint_getPosTextHIntercepts">getPosTextHIntercepts</a> | Returns where lines intersect horizontally positioned text; underlines. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400147| <a href="#SkPaint_getShader">getShader</a> | Returns <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
148| <a href="#SkPaint_getStrokeCap">getStrokeCap</a> | Returns <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends. |
149| <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a> | Returns <a href="#SkPaint_Join">Join</a>, geometry on path corners. |
150| <a href="#SkPaint_getStrokeMiter">getStrokeMiter</a> | Returns <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners. |
151| <a href="#SkPaint_getStrokeWidth">getStrokeWidth</a> | Returns thickness of the stroke. |
152| <a href="#SkPaint_getStyle">getStyle</a> | Returns <a href="#SkPaint_Style">Style</a>: stroke, fill, or both. |
153| <a href="#SkPaint_getTextAlign">getTextAlign</a> | Returns <a href="#SkPaint_Align">Align</a>: left, center, or right. |
154| <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 -0400155| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | Returns character or glyph encoded size. b |
Cary Clark8cc16c72017-08-25 11:51:49 -0400156| <a href="#SkPaint_getTextIntercepts">getTextIntercepts</a> | Returns where lines intersect text; underlines. |
157| <a href="#SkPaint_getTextPath">getTextPath</a> | Returns <a href="SkPath_Reference#Path">Path</a> equivalent to text. |
158| <a href="#SkPaint_getTextScaleX">getTextScaleX</a> | Returns the text horizontal scale; condensed text. |
159| <a href="#SkPaint_getTextSkewX">getTextSkewX</a> | Returns the text horizontal skew; oblique text. |
160| <a href="#SkPaint_getTextSize">getTextSize</a> | Returns text size in points. |
161| <a href="#SkPaint_getTextWidths">getTextWidths</a> | Returns advance and bounds for each glyph in text. |
162| <a href="#SkPaint_getTypeface">getTypeface</a> | Returns <a href="undocumented#Typeface">Typeface</a>, font description. |
Cary Clarkce101242017-09-01 15:51:02 -0400163| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | Converts <a href="#Glyph">Glyphs</a> into text. |
Cary Clarka560c472017-11-27 10:44:06 -0500164| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | Returns true if Anti-alias is set. |
Cary Clarkce101242017-09-01 15:51:02 -0400165| <a href="#SkPaint_isAutohinted">isAutohinted</a> | Returns true if <a href="#Glyph">Glyphs</a> are always hinted. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400166| <a href="#SkPaint_isDevKernText">isDevKernText</a> | Returns true if <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is set. |
167| <a href="#SkPaint_isDither">isDither</a> | Returns true if <a href="#Dither">Dither</a> is set. |
168| <a href="#SkPaint_isEmbeddedBitmapText">isEmbeddedBitmapText</a> | Returns true if <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is set. |
169| <a href="#SkPaint_isFakeBoldText">isFakeBoldText</a> | Returns true if <a href="#Fake_Bold">Fake Bold</a> is set. |
170| <a href="#SkPaint_isLCDRenderText">isLCDRenderText</a> | Returns true if <a href="SkPaint_Reference#LCD_Text">LCD Text</a> is set. |
171| <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>. |
172| <a href="#SkPaint_isSubpixelText">isSubpixelText</a> | Returns true if <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is set. |
173| <a href="#SkPaint_isVerticalText">isVerticalText</a> | Returns true if <a href="#Vertical_Text">Vertical Text</a> is set. |
174| <a href="#SkPaint_measureText">measureText</a> | Returns advance width and bounds of text. |
175| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | Returns true if <a href="#Paint">Paint</a> prevents all drawing. |
176| <a href="#SkPaint_refColorFilter">refColorFilter</a> | References <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered. |
177| <a href="#SkPaint_refDrawLooper">refDrawLooper</a> | References <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
178| <a href="#SkPaint_refImageFilter">refImageFilter</a> | References <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
179| <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>. |
180| <a href="#SkPaint_refPathEffect">refPathEffect</a> | References <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400181| <a href="#SkPaint_refShader">refShader</a> | References <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
182| <a href="#SkPaint_refTypeface">refTypeface</a> | References <a href="undocumented#Typeface">Typeface</a>, font description. |
183| <a href="#SkPaint_reset">reset</a> | Sets to default values. |
184| <a href="#SkPaint_setAlpha">setAlpha</a> | Sets <a href="#Alpha">Color Alpha</a>, color opacity. |
Cary Clarka560c472017-11-27 10:44:06 -0500185| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | Sets or clears Anti-alias. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400186| <a href="#SkPaint_setARGB">setARGB</a> | Sets color by component. |
Cary Clarkce101242017-09-01 15:51:02 -0400187| <a href="#SkPaint_setAutohinted">setAutohinted</a> | Sets <a href="#Glyph">Glyphs</a> to always be hinted. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400188| <a href="#SkPaint_setBlendMode">setBlendMode</a> | Sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination. |
189| <a href="#SkPaint_setColor">setColor</a> | Sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color. |
190| <a href="#SkPaint_setColorFilter">setColorFilter</a> | Sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color. |
191| <a href="#SkPaint_setDevKernText">setDevKernText</a> | Sets or clears <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a>. |
192| <a href="#SkPaint_setDither">setDither</a> | Sets or clears <a href="#Dither">Dither</a>. |
193| <a href="#SkPaint_setDrawLooper">setDrawLooper</a> | Sets <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
194| <a href="#SkPaint_setEmbeddedBitmapText">setEmbeddedBitmapText</a> | Sets or clears <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a>. |
195| <a href="#SkPaint_setFakeBoldText">setFakeBoldText</a> | Sets or clears <a href="#Fake_Bold">Fake Bold</a>. |
196| <a href="#SkPaint_setFilterQuality">setFilterQuality</a> | Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. |
197| <a href="#SkPaint_setFlags">setFlags</a> | Sets multiple <a href="#SkPaint_Flags">Flags</a> in a bit field. |
198| <a href="#SkPaint_setHinting">setHinting</a> | Sets <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level. |
199| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | Sets or clears <a href="SkPaint_Reference#LCD_Text">LCD Text</a>. |
200| <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>. |
201| <a href="#SkPaint_setPathEffect">setPathEffect</a> | Sets <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400202| <a href="#SkPaint_setImageFilter">setImageFilter</a> | Sets <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
203| <a href="#SkPaint_setShader">setShader</a> | Sets <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
204| <a href="#SkPaint_setStrokeCap">setStrokeCap</a> | Sets <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends. |
205| <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a> | Sets <a href="#SkPaint_Join">Join</a>, geometry on path corners. |
206| <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> | Sets <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners. |
207| <a href="#SkPaint_setStrokeWidth">setStrokeWidth</a> | Sets thickness of the stroke. |
208| <a href="#SkPaint_setStyle">setStyle</a> | Sets <a href="#SkPaint_Style">Style</a>: stroke, fill, or both. |
209| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | Sets or clears <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>. |
210| <a href="#SkPaint_setTextAlign">setTextAlign</a> | Sets <a href="#SkPaint_Align">Align</a>: left, center, or right. |
Cary Clarkbc5697d2017-10-04 14:31:33 -0400211| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | Sets character or glyph encoded size. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400212| <a href="#SkPaint_setTextScaleX">setTextScaleX</a> | Sets the text horizontal scale; condensed text. |
213| <a href="#SkPaint_setTextSkewX">setTextSkewX</a> | Sets the text horizontal skew; oblique text. |
214| <a href="#SkPaint_setTextSize">setTextSize</a> | Sets text size in points. |
215| <a href="#SkPaint_setTypeface">setTypeface</a> | Sets <a href="undocumented#Typeface">Typeface</a>, font description. |
216| <a href="#SkPaint_setVerticalText">setVerticalText</a> | Sets or clears <a href="#Vertical_Text">Vertical Text</a>. |
217| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | Converts text into glyph indices. |
Cary Clarkce101242017-09-01 15:51:02 -0400218| <a href="#SkPaint_toString">toString</a> | Converts <a href="#Paint">Paint</a> to machine readable form. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400219| <a href="#SkPaint_unflatten">unflatten</a> | Populates from a serialized stream. |
Cary Clark12799e12017-07-28 15:18:29 -0400220
221# <a name="Initializers"></a> Initializers
222
Cary Clark493df1f2017-08-25 13:14:33 -0400223<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400224## SkPaint
225
Cary Clarka560c472017-11-27 10:44:06 -0500226<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400227SkPaint()
228</pre>
229
Cary Clark8cc16c72017-08-25 11:51:49 -0400230Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400231
232| attribute | default value |
233| --- | --- |
Cary Clarka560c472017-11-27 10:44:06 -0500234| Anti-alias | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400235| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400236| <a href="undocumented#Color">Color</a> | <a href="undocumented#SK_ColorBLACK">SK ColorBLACK</a> |
Cary Clark8cc16c72017-08-25 11:51:49 -0400237| <a href="#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400238| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400239| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400240| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400241| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400242| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> |
243| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400244| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400245| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400246| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400247| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
248| <a href="SkPaint_Reference#LCD_Text">LCD Text</a> | false |
249| <a href="SkPaint_Reference#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400250| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400251| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
252| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400253| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400254| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
255| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
256| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
257| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
258| <a href="#Text_Size">Text Size</a> | 12 |
259| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400260| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400261| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
262| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
263| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400264| <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400265| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400266
267The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500268paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400269build system.
270
271### Return Value
272
Cary Clark8cc16c72017-08-25 11:51:49 -0400273default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400274
275### Example
276
277<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
278
279---
280
Cary Clark73fa9722017-08-29 17:36:51 -0400281<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400282## SkPaint
283
Cary Clarka560c472017-11-27 10:44:06 -0500284<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400285SkPaint(const SkPaint& paint)
286</pre>
287
Cary Clark8cc16c72017-08-25 11:51:49 -0400288Makes 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>,
Update Docs949cfd42018-01-22 05:50:26 +0000289<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clark73fa9722017-08-29 17:36:51 -0400290between 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 -0400291their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400292
Update Docs949cfd42018-01-22 05:50:26 +0000293The 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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400294<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 -0400295This 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 -0400296
297### Parameters
298
Cary Clark73fa9722017-08-29 17:36:51 -0400299<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 -0400300original to copy</td>
301 </tr>
302</table>
303
304### Return Value
305
Cary Clark73fa9722017-08-29 17:36:51 -0400306shallow copy of <a href="#SkPaint_copy_const_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400307
308### Example
309
310<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
311
312#### Example Output
313
314~~~~
315SK_ColorRED == paint1.getColor()
316SK_ColorBLUE == paint2.getColor()
317~~~~
318
319</fiddle-embed></div>
320
321---
322
Cary Clark73fa9722017-08-29 17:36:51 -0400323<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400324## SkPaint
325
Cary Clarka560c472017-11-27 10:44:06 -0500326<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400327SkPaint(SkPaint&& paint)
328</pre>
329
Cary Clarkd0530ba2017-09-14 11:25:39 -0400330Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400331of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400332
Cary Clark73fa9722017-08-29 17:36:51 -0400333After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400334
335### Parameters
336
Cary Clark73fa9722017-08-29 17:36:51 -0400337<table> <tr> <td><a name="SkPaint_move_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400338original to move</td>
339 </tr>
340</table>
341
342### Return Value
343
Cary Clark73fa9722017-08-29 17:36:51 -0400344content of <a href="#SkPaint_move_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400345
346### Example
347
348<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
349
350#### Example Output
351
352~~~~
353path effect unique: true
354~~~~
355
356</fiddle-embed></div>
357
358---
359
Cary Clark493df1f2017-08-25 13:14:33 -0400360<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400361## reset
362
Cary Clarka560c472017-11-27 10:44:06 -0500363<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400364void reset()
365</pre>
366
Cary Clarkbc5697d2017-10-04 14:31:33 -0400367Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
368<a href="#Paint">Paint</a> with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400369
370### Example
371
372<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
373
374#### Example Output
375
376~~~~
377paint1 == paint2
378~~~~
379
380</fiddle-embed></div>
381
382---
383
384# <a name="Destructor"></a> Destructor
385
Cary Clark493df1f2017-08-25 13:14:33 -0400386<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400387## ~SkPaint
388
Cary Clarka560c472017-11-27 10:44:06 -0500389<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400390~SkPaint()
391</pre>
392
Cary Clark8cc16c72017-08-25 11:51:49 -0400393Decreases <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>,
Update Docs949cfd42018-01-22 05:50:26 +0000394<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a>. If the
Cary Clark4c06f5e2017-08-04 12:48:24 -0400395objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400396
397---
398
399# <a name="Management"></a> Management
400
Cary Clarka560c472017-11-27 10:44:06 -0500401<a name="SkPaint_copy_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400402## operator=
403
Cary Clarka560c472017-11-27 10:44:06 -0500404<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400405SkPaint& operator=(const SkPaint& paint)
406</pre>
407
Cary Clark8cc16c72017-08-25 11:51:49 -0400408Makes 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>,
Update Docs949cfd42018-01-22 05:50:26 +0000409<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clarka560c472017-11-27 10:44:06 -0500410between 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 -0400411prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clarka560c472017-11-27 10:44:06 -0500412resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
413are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400414
415### Parameters
416
Cary Clarka560c472017-11-27 10:44:06 -0500417<table> <tr> <td><a name="SkPaint_copy_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400418original to copy</td>
419 </tr>
420</table>
421
422### Return Value
423
Cary Clarka560c472017-11-27 10:44:06 -0500424content of <a href="#SkPaint_copy_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400425
426### Example
427
428<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
429
430#### Example Output
431
432~~~~
433SK_ColorRED == paint1.getColor()
434SK_ColorRED == paint2.getColor()
435~~~~
436
437</fiddle-embed></div>
438
439---
440
Cary Clarka560c472017-11-27 10:44:06 -0500441<a name="SkPaint_move_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400442## operator=
443
Cary Clarka560c472017-11-27 10:44:06 -0500444<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400445SkPaint& operator=(SkPaint&& paint)
446</pre>
447
Cary Clarka560c472017-11-27 10:44:06 -0500448Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
449of 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 -0400450prior destination are decreased by one; those objects are deleted if the resulting count
451is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400452
Cary Clarka560c472017-11-27 10:44:06 -0500453After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400454
455### Parameters
456
Cary Clarka560c472017-11-27 10:44:06 -0500457<table> <tr> <td><a name="SkPaint_move_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400458original to move</td>
459 </tr>
460</table>
461
462### Return Value
463
Cary Clarka560c472017-11-27 10:44:06 -0500464content of <a href="#SkPaint_move_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400465
466### Example
467
468<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
469
470#### Example Output
471
472~~~~
473SK_ColorRED == paint2.getColor()
474~~~~
475
476</fiddle-embed></div>
477
478---
479
Cary Clark493df1f2017-08-25 13:14:33 -0400480<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400481## operator==
482
Cary Clarka560c472017-11-27 10:44:06 -0500483<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400484bool operator==(const SkPaint& a, const SkPaint& b)
485</pre>
486
Cary Clark8cc16c72017-08-25 11:51:49 -0400487Compares <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
Update Docs949cfd42018-01-22 05:50:26 +0000488if <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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400489<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 -0400490
491### Parameters
492
Cary Clark8cc16c72017-08-25 11:51:49 -0400493<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
494<a href="#Paint">Paint</a> to compare</td>
495 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
496<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400497 </tr>
498</table>
499
500### Return Value
501
Cary Clark8cc16c72017-08-25 11:51:49 -0400502true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400503
504### Example
505
506<div><fiddle-embed name="7481a948e34672720337a631830586dd">
507
508#### Example Output
509
510~~~~
511paint1 == paint2
512paint1 != paint2
513~~~~
514
515</fiddle-embed></div>
516
517---
518
Cary Clarka560c472017-11-27 10:44:06 -0500519<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400520## operator!=
521
Cary Clarka560c472017-11-27 10:44:06 -0500522<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400523bool operator!=(const SkPaint& a, const SkPaint& b)
524</pre>
525
Cary Clarka560c472017-11-27 10:44:06 -0500526Compares <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
Update Docs949cfd42018-01-22 05:50:26 +0000527if <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>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400528<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 -0400529
530### Parameters
531
Cary Clarka560c472017-11-27 10:44:06 -0500532<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400533<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500534 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400535<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400536 </tr>
537</table>
538
539### Return Value
540
Cary Clark8cc16c72017-08-25 11:51:49 -0400541true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400542
543### Example
544
545<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
546
547#### Example Output
548
549~~~~
550paint1 == paint2
551paint1 == paint2
552~~~~
553
554</fiddle-embed></div>
555
556---
557
Cary Clark493df1f2017-08-25 13:14:33 -0400558<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400559## getHash
560
Cary Clarka560c472017-11-27 10:44:06 -0500561<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400562uint32_t getHash() const
563</pre>
564
Cary Clark8cc16c72017-08-25 11:51:49 -0400565Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400566Identical hashes guarantee that the paints are
567equivalent, but differing hashes do not guarantee that the paints have differing
568contents.
569
Cary Clark8cc16c72017-08-25 11:51:49 -0400570If <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 -0400571their hashes are also equal.
572
573The hash returned is platform and implementation specific.
574
575### Return Value
576
577a shallow hash
578
579### Example
580
581<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
582
583#### Example Output
584
585~~~~
586paint1 == paint2
587paint1.getHash() == paint2.getHash()
588~~~~
589
590</fiddle-embed></div>
591
592---
593
Cary Clark493df1f2017-08-25 13:14:33 -0400594<a name="SkPaint_flatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400595## flatten
596
Cary Clarka560c472017-11-27 10:44:06 -0500597<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400598void flatten(SkWriteBuffer& buffer) const
599</pre>
600
Cary Clark8cc16c72017-08-25 11:51:49 -0400601Serializes <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 -0400602can reconstitute the paint at a later time.
603
604### Parameters
605
Cary Clark8cc16c72017-08-25 11:51:49 -0400606<table> <tr> <td><a name="SkPaint_flatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
607<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 -0400608 </tr>
609</table>
610
Cary Clark12799e12017-07-28 15:18:29 -0400611---
612
Cary Clark493df1f2017-08-25 13:14:33 -0400613<a name="SkPaint_unflatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400614## unflatten
615
Cary Clarka560c472017-11-27 10:44:06 -0500616<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Update Docsad2cd562018-01-19 05:52:02 +0000617bool unflatten(SkReadBuffer& buffer)
Cary Clark12799e12017-07-28 15:18:29 -0400618</pre>
619
Cary Clark8cc16c72017-08-25 11:51:49 -0400620Populates <a href="#Paint">Paint</a>, typically from a serialized stream, created by calling
621<a href="#SkPaint_flatten">flatten</a> at an earlier time.
Cary Clark12799e12017-07-28 15:18:29 -0400622
Cary Clark8cc16c72017-08-25 11:51:49 -0400623<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 -0400624by the client.
625
626### Parameters
627
Cary Clark8cc16c72017-08-25 11:51:49 -0400628<table> <tr> <td><a name="SkPaint_unflatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -0400629serialized data describing <a href="#Paint">Paint</a> content</td>
Cary Clark12799e12017-07-28 15:18:29 -0400630 </tr>
631</table>
632
Update Docsad2cd562018-01-19 05:52:02 +0000633### Return Value
634
Cary Clark2ade9972017-11-02 17:49:34 -0400635### See Also
636
637<a href="undocumented#SkReadBuffer">SkReadBuffer</a>
638
Cary Clark12799e12017-07-28 15:18:29 -0400639---
640
641# <a name="Hinting"></a> Hinting
642
Cary Clark8cc16c72017-08-25 11:51:49 -0400643## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400644
Cary Clarka560c472017-11-27 10:44:06 -0500645<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400646enum <a href="#Hinting">Hinting</a> {
647<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
648<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
649<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
650<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400651};</pre>
652
Cary Clark8cc16c72017-08-25 11:51:49 -0400653<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
654look 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 -0400655muted effect or no effect at all depending on the platform.
656
Cary Clark7cfcbca2018-01-04 16:11:51 -0500657The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark8cc16c72017-08-25 11:51:49 -0400658as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400659
660### Constants
661
662<table>
663 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400664 <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 -0500665With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
666bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400667outline being loaded should not be fitted to the pixel grid but simply scaled
668to 26.6 fractional pixels.</td>
669 </tr>
670 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400671 <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 -0500672With FreeType, this is equivalent in spirit to the
673FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400674lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400675Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400676 </tr>
677 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400678 <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 -0500679With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
680choosing the default hinting algorithm, which is optimized for standard
Cary Clark12799e12017-07-28 15:18:29 -0400681gray-level rendering.</td>
682 </tr>
683 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500684 <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
685FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
686FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
687horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
688variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400689 </tr>
690</table>
691
Cary Clark7cfcbca2018-01-04 16:11:51 -0500692On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400693
Cary Clark8cc16c72017-08-25 11:51:49 -0400694<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400695Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400696
697
698
Cary Clark493df1f2017-08-25 13:14:33 -0400699<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400700## getHinting
701
Cary Clarka560c472017-11-27 10:44:06 -0500702<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400703Hinting getHinting() const
704</pre>
705
706Returns level of glyph outline adjustment.
707
708### Return Value
709
Cary Clark8cc16c72017-08-25 11:51:49 -0400710one 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 -0400711
712### Example
713
714<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
715
716#### Example Output
717
718~~~~
719SkPaint::kNormal_Hinting == paint.getHinting()
720~~~~
721
722</fiddle-embed></div>
723
724---
725
Cary Clark493df1f2017-08-25 13:14:33 -0400726<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400727## setHinting
728
Cary Clarka560c472017-11-27 10:44:06 -0500729<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400730void setHinting(Hinting hintingLevel)
731</pre>
732
733Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400734Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400735
Cary Clark8cc16c72017-08-25 11:51:49 -0400736| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400737| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400738| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400739| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
740| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
741| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400742
743### Parameters
744
Cary Clark8cc16c72017-08-25 11:51:49 -0400745<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
746one 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 -0400747 </tr>
748</table>
749
750### Example
751
752<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
753
754#### Example Output
755
756~~~~
757paint1 == paint2
758~~~~
759
760</fiddle-embed></div>
761
762---
763
764# <a name="Flags"></a> Flags
765
Cary Clark8cc16c72017-08-25 11:51:49 -0400766## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400767
Cary Clarka560c472017-11-27 10:44:06 -0500768<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400769enum <a href="#Flags">Flags</a> {
770<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
771<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
772<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
773<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
774<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
775<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
776<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
777<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
778<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
779<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
780<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400781
Cary Clark8cc16c72017-08-25 11:51:49 -0400782<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400783};
784</pre>
785
Cary Clark8cc16c72017-08-25 11:51:49 -0400786The bit values stored in <a href="#Flags">Flags</a>.
787The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400788with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400789All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400790multiple settings at once.
791
792### Constants
793
794<table>
795 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500796 <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 -0400797 </tr>
798 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400799 <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 -0400800 </tr>
801 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400802 <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 -0400803 </tr>
804 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400805 <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 -0400806 </tr>
807 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400808 <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 -0400809 </tr>
810 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400811 <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 -0400812 </tr>
813 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400814 <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 -0400815 </tr>
816 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400817 <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 -0400818 </tr>
819 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400820 <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 -0400821 </tr>
822 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400823 <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 -0400824 </tr>
825 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400826 <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 -0400827 </tr>
828 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400829 <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 -0400830 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400831<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400832
833</table>
834
Cary Clark8cc16c72017-08-25 11:51:49 -0400835## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400836
Cary Clarka560c472017-11-27 10:44:06 -0500837<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400838enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
839<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
840<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400841};</pre>
842
843### Constants
844
845<table>
846 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400847 <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 -0400848 </tr>
849 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400850 <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 -0400851 </tr>
852</table>
853
Cary Clark2ade9972017-11-02 17:49:34 -0400854### See Also
855
856<a href="#Flags">Flags</a> <a href="#SkPaint_getFlags">getFlags</a>
857
Cary Clark12799e12017-07-28 15:18:29 -0400858
859
Cary Clark493df1f2017-08-25 13:14:33 -0400860<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400861## getFlags
862
Cary Clarka560c472017-11-27 10:44:06 -0500863<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400864uint32_t getFlags() const
865</pre>
866
Cary Clark8cc16c72017-08-25 11:51:49 -0400867Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
868bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400869
870### Return Value
871
Cary Clark8cc16c72017-08-25 11:51:49 -0400872zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400873
874### Example
875
876<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
877
878#### Example Output
879
880~~~~
881(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
882~~~~
883
884</fiddle-embed></div>
885
886---
887
Cary Clark493df1f2017-08-25 13:14:33 -0400888<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400889## setFlags
890
Cary Clarka560c472017-11-27 10:44:06 -0500891<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400892void setFlags(uint32_t flags)
893</pre>
894
Cary Clark8cc16c72017-08-25 11:51:49 -0400895Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
896All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400897
898### Parameters
899
Cary Clark8cc16c72017-08-25 11:51:49 -0400900<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
901union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400902 </tr>
903</table>
904
905### Example
906
907<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
908
909#### Example Output
910
911~~~~
912paint.isAntiAlias()
913paint.isDither()
914~~~~
915
916</fiddle-embed></div>
917
918---
919
920# <a name="Anti-alias"></a> Anti-alias
Cary Clarka560c472017-11-27 10:44:06 -0500921Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400922If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
923If <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 -0400924
Cary Clark7cfcbca2018-01-04 16:11:51 -0500925The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400926passing through the pixel center may, but is not required to, draw the pixel.
927
Cary Clarkce101242017-09-01 15:51:02 -0400928<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 -0400929active <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 -0400930
Cary Clark7cfcbca2018-01-04 16:11:51 -0500931A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500932<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400933<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400934
Cary Clarka560c472017-11-27 10:44:06 -0500935The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400936
Cary Clarka560c472017-11-27 10:44:06 -0500937Anti-alias is disabled by default.
938Anti-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 -0400939at compile time.
940
941### Example
942
943<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
944A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400945The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clarkce101242017-09-01 15:51:02 -0400946<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400947
Cary Clark493df1f2017-08-25 13:14:33 -0400948<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400949## isAntiAlias
950
Cary Clarka560c472017-11-27 10:44:06 -0500951<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400952bool isAntiAlias() const
953</pre>
954
Cary Clark4c06f5e2017-08-04 12:48:24 -0400955If 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 -0400956
Cary Clark8cc16c72017-08-25 11:51:49 -0400957Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400958
959### Return Value
960
Cary Clark8cc16c72017-08-25 11:51:49 -0400961<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400962
963### Example
964
965<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
966
967#### Example Output
968
969~~~~
970paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
971paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
972~~~~
973
974</fiddle-embed></div>
975
976---
977
Cary Clark493df1f2017-08-25 13:14:33 -0400978<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400979## setAntiAlias
980
Cary Clarka560c472017-11-27 10:44:06 -0500981<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400982void setAntiAlias(bool aa)
983</pre>
984
Cary Clark4c06f5e2017-08-04 12:48:24 -0400985Requests, 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 -0400986partial transparency.
987
Cary Clark8cc16c72017-08-25 11:51:49 -0400988Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
989Clears <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 -0400990
991### Parameters
992
Cary Clark8cc16c72017-08-25 11:51:49 -0400993<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
994setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400995 </tr>
996</table>
997
998### Example
999
1000<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1001
1002#### Example Output
1003
1004~~~~
1005paint1 == paint2
1006~~~~
1007
1008</fiddle-embed></div>
1009
1010---
1011
1012# <a name="Dither"></a> Dither
Cary Clark7cfcbca2018-01-04 16:11:51 -05001013<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001014This can help to smooth color transitions and reducing banding in gradients.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001015Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05001016and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
Cary Clarka560c472017-11-27 10:44:06 -05001017and 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 -04001018
1019Dithering is always enabled for linear gradients drawing into
Cary Clarka560c472017-11-27 10:44:06 -05001020<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>.
1021<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
1022<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001023
Cary Clark8cc16c72017-08-25 11:51:49 -04001024<a href="#Dither">Dither</a> is disabled by default.
1025<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 -04001026at compile time.
1027
Cary Clark8cc16c72017-08-25 11:51:49 -04001028Some 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 -04001029
1030### Example
1031
1032<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1033alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1034
1035### Example
1036
1037<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001038Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001039dither, making it easier to see.</div></fiddle-embed></div>
1040
Cary Clark493df1f2017-08-25 13:14:33 -04001041<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001042## isDither
1043
Cary Clarka560c472017-11-27 10:44:06 -05001044<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001045bool isDither() const
1046</pre>
1047
1048If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001049Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001050
1051### Return Value
1052
Cary Clark8cc16c72017-08-25 11:51:49 -04001053<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001054
1055### Example
1056
1057<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1058
1059#### Example Output
1060
1061~~~~
1062paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1063paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1064~~~~
1065
1066</fiddle-embed></div>
1067
1068---
1069
Cary Clark493df1f2017-08-25 13:14:33 -04001070<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001071## setDither
1072
Cary Clarka560c472017-11-27 10:44:06 -05001073<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001074void setDither(bool dither)
1075</pre>
1076
1077Requests, but does not require, to distribute color error.
1078
Cary Clark8cc16c72017-08-25 11:51:49 -04001079Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1080Clears <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 -04001081
1082### Parameters
1083
Cary Clark8cc16c72017-08-25 11:51:49 -04001084<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1085setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001086 </tr>
1087</table>
1088
1089### Example
1090
1091<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1092
1093#### Example Output
1094
1095~~~~
1096paint1 == paint2
1097~~~~
1098
1099</fiddle-embed></div>
1100
1101### See Also
1102
Cary Clark4c06f5e2017-08-04 12:48:24 -04001103<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001104
1105---
1106
1107### See Also
1108
Cary Clarka560c472017-11-27 10:44:06 -05001109Gradient <a href="#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001110
1111# <a name="Device_Text"></a> Device Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001112<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 -04001113
Cary Clark7cfcbca2018-01-04 16:11:51 -05001114When 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 -04001115create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001116on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001117<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 -04001118the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001119
Cary Clark7cfcbca2018-01-04 16:11:51 -05001120<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 -04001121As the opaqueness
1122of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1123
1124Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001125<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 -05001126<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 -04001127<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 -04001128
1129### Example
1130
Cary Clark4c06f5e2017-08-04 12:48:24 -04001131<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 -04001132When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1133When <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 -04001134
1135## <a name="Linear_Text"></a> Linear Text
1136
Cary Clark4c06f5e2017-08-04 12:48:24 -04001137<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 -04001138If <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 -04001139If <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 -04001140
Cary Clark493df1f2017-08-25 13:14:33 -04001141<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001142## isLinearText
1143
Cary Clarka560c472017-11-27 10:44:06 -05001144<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001145bool isLinearText() const
1146</pre>
1147
Cary Clark4c06f5e2017-08-04 12:48:24 -04001148If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001149
Cary Clark8cc16c72017-08-25 11:51:49 -04001150Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001151
1152### Return Value
1153
Cary Clark8cc16c72017-08-25 11:51:49 -04001154<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001155
1156### Example
1157
1158<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1159
1160### See Also
1161
Cary Clark8cc16c72017-08-25 11:51:49 -04001162<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001163
1164---
1165
Cary Clark493df1f2017-08-25 13:14:33 -04001166<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001167## setLinearText
1168
Cary Clarka560c472017-11-27 10:44:06 -05001169<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001170void setLinearText(bool linearText)
1171</pre>
1172
Cary Clark4c06f5e2017-08-04 12:48:24 -04001173If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001174By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001175
Cary Clark8cc16c72017-08-25 11:51:49 -04001176Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1177Clears <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 -04001178
1179### Parameters
1180
Cary Clark8cc16c72017-08-25 11:51:49 -04001181<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1182setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001183 </tr>
1184</table>
1185
1186### Example
1187
1188<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1189
1190### See Also
1191
Cary Clark8cc16c72017-08-25 11:51:49 -04001192<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001193
1194---
1195
1196## <a name="Subpixel_Text"></a> Subpixel Text
1197
Cary Clark7cfcbca2018-01-04 16:11:51 -05001198<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 -04001199As the opaqueness
1200of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1201
Cary Clark493df1f2017-08-25 13:14:33 -04001202<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001203## isSubpixelText
1204
Cary Clarka560c472017-11-27 10:44:06 -05001205<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001206bool isSubpixelText() const
1207</pre>
1208
Cary Clarkce101242017-09-01 15:51:02 -04001209If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001210
Cary Clark8cc16c72017-08-25 11:51:49 -04001211Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001212
1213### Return Value
1214
Cary Clark8cc16c72017-08-25 11:51:49 -04001215<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001216
1217### Example
1218
1219<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1220
1221#### Example Output
1222
1223~~~~
1224paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1225paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1226~~~~
1227
1228</fiddle-embed></div>
1229
1230---
1231
Cary Clark493df1f2017-08-25 13:14:33 -04001232<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001233## setSubpixelText
1234
Cary Clarka560c472017-11-27 10:44:06 -05001235<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001236void setSubpixelText(bool subpixelText)
1237</pre>
1238
Cary Clarkce101242017-09-01 15:51:02 -04001239Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001240
Cary Clark8cc16c72017-08-25 11:51:49 -04001241Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1242Clears <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 -04001243
1244### Parameters
1245
Cary Clark8cc16c72017-08-25 11:51:49 -04001246<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1247setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001248 </tr>
1249</table>
1250
1251### Example
1252
1253<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1254
1255#### Example Output
1256
1257~~~~
1258paint1 == paint2
1259~~~~
1260
1261</fiddle-embed></div>
1262
1263---
1264
1265## <a name="LCD_Text"></a> LCD Text
1266
Cary Clark7cfcbca2018-01-04 16:11:51 -05001267When 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 -04001268create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001269on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001270<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 -04001271the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001272
Cary Clark493df1f2017-08-25 13:14:33 -04001273<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001274## isLCDRenderText
1275
Cary Clarka560c472017-11-27 10:44:06 -05001276<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001277bool isLCDRenderText() const
1278</pre>
1279
Cary Clark7cfcbca2018-01-04 16:11:51 -05001280If true, <a href="#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001281
Cary Clark8cc16c72017-08-25 11:51:49 -04001282Returns 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 -04001283
1284### Return Value
1285
Cary Clark8cc16c72017-08-25 11:51:49 -04001286<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001287
1288### Example
1289
1290<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1291
1292#### Example Output
1293
1294~~~~
1295paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1296paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1297~~~~
1298
1299</fiddle-embed></div>
1300
1301---
1302
Cary Clark493df1f2017-08-25 13:14:33 -04001303<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001304## setLCDRenderText
1305
Cary Clarka560c472017-11-27 10:44:06 -05001306<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001307void setLCDRenderText(bool lcdText)
1308</pre>
1309
Cary Clark7cfcbca2018-01-04 16:11:51 -05001310Requests, but does not require, that <a href="#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001311
Cary Clark8cc16c72017-08-25 11:51:49 -04001312Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1313Clears <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 -04001314
1315### Parameters
1316
Cary Clark8cc16c72017-08-25 11:51:49 -04001317<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1318setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001319 </tr>
1320</table>
1321
1322### Example
1323
1324<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1325
1326#### Example Output
1327
1328~~~~
1329paint1 == paint2
1330~~~~
1331
1332</fiddle-embed></div>
1333
1334---
1335
1336# <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
Cary Clarkce101242017-09-01 15:51:02 -04001337<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 -04001338<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 -05001339in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001340
Cary Clark7cfcbca2018-01-04 16:11:51 -05001341FreeType 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 -04001342the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001343Windows may select the bitmap glyph but is not required to do so.
1344<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001345
Cary Clark4c06f5e2017-08-04 12:48:24 -04001346<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1347<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 -04001348<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001349
1350### Example
1351
Cary Clarka560c472017-11-27 10:44:06 -05001352<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
1353void draw(SkCanvas* canvas) {<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
1354 includes an embedded bitmap Glyph at odd font sizes. This example works
1355 on platforms that use FreeType as their Font_Engine.
1356 Windows may, but is not required to, return a bitmap glyph if
1357 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1358 bitmap.allocN32Pixels(30, 15);
1359 bitmap.eraseColor(0);
1360 SkCanvas offscreen(bitmap);
1361 SkPaint paint;
1362 paint.setAntiAlias(true);
1363 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001364 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001365 for (bool embedded : { false, true}) {
1366 paint.setEmbeddedBitmapText(embedded);
1367 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1368 }
1369 canvas->drawBitmap(bitmap, 0, 0);
1370 canvas->scale(10, 10);
1371 canvas->drawBitmap(bitmap, -2, 1);
1372}
1373</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001374
Cary Clark493df1f2017-08-25 13:14:33 -04001375<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001376## isEmbeddedBitmapText
1377
Cary Clarka560c472017-11-27 10:44:06 -05001378<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001379bool isEmbeddedBitmapText() const
1380</pre>
1381
Cary Clarkce101242017-09-01 15:51:02 -04001382If 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 -04001383
Cary Clark8cc16c72017-08-25 11:51:49 -04001384Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001385
1386### Return Value
1387
Cary Clark8cc16c72017-08-25 11:51:49 -04001388<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001389
1390### Example
1391
1392<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1393
1394#### Example Output
1395
1396~~~~
1397paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1398paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1399~~~~
1400
1401</fiddle-embed></div>
1402
1403---
1404
Cary Clark493df1f2017-08-25 13:14:33 -04001405<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001406## setEmbeddedBitmapText
1407
Cary Clarka560c472017-11-27 10:44:06 -05001408<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001409void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1410</pre>
1411
1412Requests, but does not require, to use bitmaps in fonts instead of outlines.
1413
Cary Clark8cc16c72017-08-25 11:51:49 -04001414Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1415Clears <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 -04001416
1417### Parameters
1418
Cary Clark8cc16c72017-08-25 11:51:49 -04001419<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1420setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001421 </tr>
1422</table>
1423
1424### Example
1425
1426<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1427
1428#### Example Output
1429
1430~~~~
1431paint1 == paint2
1432~~~~
1433
1434</fiddle-embed></div>
1435
1436---
1437
1438# <a name="Automatic_Hinting"></a> Automatic Hinting
Cary Clark8cc16c72017-08-25 11:51:49 -04001439If <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 -04001440instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001441<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
1442<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001443
Cary Clark7cfcbca2018-01-04 16:11:51 -05001444<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 -04001445
Cary Clark493df1f2017-08-25 13:14:33 -04001446<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001447## isAutohinted
1448
Cary Clarka560c472017-11-27 10:44:06 -05001449<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001450bool isAutohinted() const
1451</pre>
1452
Cary Clark8cc16c72017-08-25 11:51:49 -04001453If 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 -05001454platform 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 -04001455<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001456
Cary Clark8cc16c72017-08-25 11:51:49 -04001457Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001458
1459### Return Value
1460
Cary Clark8cc16c72017-08-25 11:51:49 -04001461<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001462
1463### Example
1464
1465<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1466
1467#### Example Output
1468
1469~~~~
1470paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1471paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1472~~~~
1473
1474</fiddle-embed></div>
1475
1476### See Also
1477
Cary Clark8cc16c72017-08-25 11:51:49 -04001478<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001479
1480---
1481
Cary Clark493df1f2017-08-25 13:14:33 -04001482<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001483## setAutohinted
1484
Cary Clarka560c472017-11-27 10:44:06 -05001485<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001486void setAutohinted(bool useAutohinter)
1487</pre>
1488
Cary Clark8cc16c72017-08-25 11:51:49 -04001489If <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 -04001490instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001491<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
1492<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001493
Cary Clark7cfcbca2018-01-04 16:11:51 -05001494Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001495
Cary Clark8cc16c72017-08-25 11:51:49 -04001496Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1497Clears <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 -04001498
1499### Parameters
1500
Cary Clark8cc16c72017-08-25 11:51:49 -04001501<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1502setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001503 </tr>
1504</table>
1505
1506### Example
1507
1508<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1509
1510### See Also
1511
Cary Clark8cc16c72017-08-25 11:51:49 -04001512<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001513
1514---
1515
1516# <a name="Vertical_Text"></a> Vertical Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001517<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 -04001518using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1519is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1520<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001521
Cary Clark7cfcbca2018-01-04 16:11:51 -05001522Skia can translate text character codes as a series of <a href="#Glyph">Glyphs</a>, but does not implement
1523font substitution,
1524textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1525a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001526into glyph series.
1527
Cary Clark8cc16c72017-08-25 11:51:49 -04001528<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 -04001529
Cary Clark8cc16c72017-08-25 11:51:49 -04001530<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1531<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 -04001532
Cary Clark8cc16c72017-08-25 11:51:49 -04001533<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1534<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1535<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001536
1537### Example
1538
1539<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1540
Cary Clark493df1f2017-08-25 13:14:33 -04001541<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001542## isVerticalText
1543
Cary Clarka560c472017-11-27 10:44:06 -05001544<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001545bool isVerticalText() const
1546</pre>
1547
Cary Clarkce101242017-09-01 15:51:02 -04001548If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001549
Cary Clark8cc16c72017-08-25 11:51:49 -04001550Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001551
1552### Return Value
1553
Cary Clark8cc16c72017-08-25 11:51:49 -04001554<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001555
1556### Example
1557
1558<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1559
1560#### Example Output
1561
1562~~~~
1563paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1564paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1565~~~~
1566
1567</fiddle-embed></div>
1568
1569---
1570
Cary Clark493df1f2017-08-25 13:14:33 -04001571<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001572## setVerticalText
1573
Cary Clarka560c472017-11-27 10:44:06 -05001574<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001575void setVerticalText(bool verticalText)
1576</pre>
1577
1578If true, text advance positions the next glyph below the previous glyph instead of to the
1579right of previous glyph.
1580
Cary Clark8cc16c72017-08-25 11:51:49 -04001581Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1582Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001583
1584### Parameters
1585
Cary Clark8cc16c72017-08-25 11:51:49 -04001586<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1587setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001588 </tr>
1589</table>
1590
1591### Example
1592
1593<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1594
1595#### Example Output
1596
1597~~~~
1598paint1 == paint2
1599~~~~
1600
1601</fiddle-embed></div>
1602
1603---
1604
1605# <a name="Fake_Bold"></a> Fake Bold
Cary Clark8cc16c72017-08-25 11:51:49 -04001606<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 -05001607is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001608bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001609
Cary Clark7cfcbca2018-01-04 16:11:51 -05001610Use <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 -04001611is not available.
1612
Cary Clark7cfcbca2018-01-04 16:11:51 -05001613A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkce101242017-09-01 15:51:02 -04001614the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark7cfcbca2018-01-04 16:11:51 -05001615by 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 -04001616
Cary Clark8cc16c72017-08-25 11:51:49 -04001617<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001618
1619### Example
1620
1621<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1622
Cary Clark493df1f2017-08-25 13:14:33 -04001623<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001624## isFakeBoldText
1625
Cary Clarka560c472017-11-27 10:44:06 -05001626<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001627bool isFakeBoldText() const
1628</pre>
1629
1630If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1631from outlines.
1632
Cary Clark8cc16c72017-08-25 11:51:49 -04001633Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001634
1635### Return Value
1636
Cary Clark8cc16c72017-08-25 11:51:49 -04001637<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001638
1639### Example
1640
1641<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1642
1643#### Example Output
1644
1645~~~~
1646paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1647paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1648~~~~
1649
1650</fiddle-embed></div>
1651
1652---
1653
Cary Clark493df1f2017-08-25 13:14:33 -04001654<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001655## setFakeBoldText
1656
Cary Clarka560c472017-11-27 10:44:06 -05001657<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001658void setFakeBoldText(bool fakeBoldText)
1659</pre>
1660
Cary Clarkce101242017-09-01 15:51:02 -04001661Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001662
Cary Clark8cc16c72017-08-25 11:51:49 -04001663Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1664Clears <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 -04001665
1666### Parameters
1667
Cary Clark8cc16c72017-08-25 11:51:49 -04001668<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1669setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001670 </tr>
1671</table>
1672
1673### Example
1674
1675<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1676
1677#### Example Output
1678
1679~~~~
1680paint1 == paint2
1681~~~~
1682
1683</fiddle-embed></div>
1684
1685---
1686
1687# <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
Cary Clarkce101242017-09-01 15:51:02 -04001688if <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 -05001689spacing 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 -04001690<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 -05001691FreeType as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001692
Cary Clark7cfcbca2018-01-04 16:11:51 -05001693<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text Kerning, where the space between
1694a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001695
Cary Clark493df1f2017-08-25 13:14:33 -04001696<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001697## isDevKernText
1698
Cary Clarka560c472017-11-27 10:44:06 -05001699<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001700bool isDevKernText() const
1701</pre>
1702
1703Returns if character spacing may be adjusted by the hinting difference.
1704
Cary Clark8cc16c72017-08-25 11:51:49 -04001705Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001706
1707### Return Value
1708
Cary Clark8cc16c72017-08-25 11:51:49 -04001709<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001710
1711### Example
1712
1713<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1714
1715---
1716
Cary Clark493df1f2017-08-25 13:14:33 -04001717<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001718## setDevKernText
1719
Cary Clarka560c472017-11-27 10:44:06 -05001720<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001721void setDevKernText(bool devKernText)
1722</pre>
1723
1724Requests, but does not require, to use hinting to adjust glyph spacing.
1725
Cary Clark8cc16c72017-08-25 11:51:49 -04001726Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1727Clears <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 -04001728
1729### Parameters
1730
Cary Clark8cc16c72017-08-25 11:51:49 -04001731<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1732setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001733 </tr>
1734</table>
1735
1736### Example
1737
1738<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1739
1740#### Example Output
1741
1742~~~~
1743paint1 == paint2
1744~~~~
1745
1746</fiddle-embed></div>
1747
1748---
1749
1750# <a name="Filter_Quality_Methods"></a> Filter Quality Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04001751<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1752A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1753A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001754If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1755in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001756
Cary Clark8cc16c72017-08-25 11:51:49 -04001757<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 -04001758
1759<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001760 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1761 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1762 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1763 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001764</table>
1765
Cary Clarka560c472017-11-27 10:44:06 -05001766and 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 -04001767
Cary Clark4c06f5e2017-08-04 12:48:24 -04001768<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 -04001769
1770### Example
1771
1772<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1773
Cary Clark493df1f2017-08-25 13:14:33 -04001774<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001775## getFilterQuality
1776
Cary Clarka560c472017-11-27 10:44:06 -05001777<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001778SkFilterQuality getFilterQuality() const
1779</pre>
1780
Cary Clark4c06f5e2017-08-04 12:48:24 -04001781Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001782draws faster; a higher setting looks better when the image is scaled.
1783
1784### Return Value
1785
Cary Clark7cfcbca2018-01-04 16:11:51 -05001786one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001787<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001788
1789### Example
1790
1791<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1792
1793#### Example Output
1794
1795~~~~
1796kNone_SkFilterQuality == paint.getFilterQuality()
1797~~~~
1798
1799</fiddle-embed></div>
1800
1801---
1802
Cary Clark493df1f2017-08-25 13:14:33 -04001803<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001804## setFilterQuality
1805
Cary Clarka560c472017-11-27 10:44:06 -05001806<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001807void setFilterQuality(SkFilterQuality quality)
1808</pre>
1809
Cary Clark4c06f5e2017-08-04 12:48:24 -04001810Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001811draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001812Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001813
1814### Parameters
1815
Cary Clark8cc16c72017-08-25 11:51:49 -04001816<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05001817one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001818<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001819 </tr>
1820</table>
1821
1822### Example
1823
1824<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1825
1826#### Example Output
1827
1828~~~~
1829kHigh_SkFilterQuality == paint.getFilterQuality()
1830~~~~
1831
1832</fiddle-embed></div>
1833
1834### See Also
1835
Cary Clark4c06f5e2017-08-04 12:48:24 -04001836<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001837
1838---
1839
1840# <a name="Color_Methods"></a> Color Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04001841<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 -04001842or stroked shape in a
184332-bit value. Each component occupies 8-bits, ranging from zero: no contribution;
1844to 255: full intensity. All values in any combination are valid.
1845
Cary Clarkce101242017-09-01 15:51:02 -04001846<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>;
Cary Clark8cc16c72017-08-25 11:51:49 -04001847<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 -04001848
Cary Clark8cc16c72017-08-25 11:51:49 -04001849The 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 -04001850on the output device, which may have more or fewer bits, and may have a different arrangement.
1851
Cary Clark8cc16c72017-08-25 11:51:49 -04001852| 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 -04001853| --- | --- | --- | --- | --- |
1854| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1855
1856### Example
1857
1858<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1859
Cary Clark493df1f2017-08-25 13:14:33 -04001860<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001861## getColor
1862
Cary Clarka560c472017-11-27 10:44:06 -05001863<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001864SkColor getColor() const
1865</pre>
1866
Cary Clarkce101242017-09-01 15:51:02 -04001867Retrieves <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 -04001868Use 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 -04001869a color component.
1870
1871### Return Value
1872
Cary Clarkce101242017-09-01 15:51:02 -04001873<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001874
1875### Example
1876
1877<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1878
1879#### Example Output
1880
1881~~~~
1882Yellow is 100% red, 100% green, and 0% blue.
1883~~~~
1884
1885</fiddle-embed></div>
1886
1887### See Also
1888
Cary Clark4c06f5e2017-08-04 12:48:24 -04001889<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001890
1891---
1892
Cary Clark493df1f2017-08-25 13:14:33 -04001893<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001894## setColor
1895
Cary Clarka560c472017-11-27 10:44:06 -05001896<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001897void setColor(SkColor color)
1898</pre>
1899
Cary Clarkce101242017-09-01 15:51:02 -04001900Sets <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 -05001901<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 -04001902
1903### Parameters
1904
Cary Clark8cc16c72017-08-25 11:51:49 -04001905<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001906<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001907 </tr>
1908</table>
1909
1910### Example
1911
1912<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1913
1914#### Example Output
1915
1916~~~~
1917green1 == green2
1918~~~~
1919
1920</fiddle-embed></div>
1921
1922### See Also
1923
Cary Clark8cc16c72017-08-25 11:51:49 -04001924<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 -04001925
1926---
1927
1928## <a name="Alpha_Methods"></a> Alpha Methods
1929
Cary Clark8cc16c72017-08-25 11:51:49 -04001930<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 -04001931
Cary Clark493df1f2017-08-25 13:14:33 -04001932<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001933## getAlpha
1934
Cary Clarka560c472017-11-27 10:44:06 -05001935<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001936uint8_t getAlpha() const
1937</pre>
1938
Cary Clarkce101242017-09-01 15:51:02 -04001939Retrieves <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 -04001940
1941### Return Value
1942
Cary Clarkce101242017-09-01 15:51:02 -04001943<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001944
1945### Example
1946
1947<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1948
1949#### Example Output
1950
1951~~~~
1952255 == paint.getAlpha()
1953~~~~
1954
1955</fiddle-embed></div>
1956
1957---
1958
Cary Clark493df1f2017-08-25 13:14:33 -04001959<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001960## setAlpha
1961
Cary Clarka560c472017-11-27 10:44:06 -05001962<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001963void setAlpha(U8CPU a)
1964</pre>
1965
Cary Clark7cfcbca2018-01-04 16:11:51 -05001966Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001967unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001968build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1969<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 -04001970fully opaque.
1971
1972### Parameters
1973
Cary Clark8cc16c72017-08-25 11:51:49 -04001974<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001975<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001976 </tr>
1977</table>
1978
1979### Example
1980
1981<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1982
1983#### Example Output
1984
1985~~~~
19860x44112233 == paint.getColor()
1987~~~~
1988
1989</fiddle-embed></div>
1990
1991---
1992
Cary Clark493df1f2017-08-25 13:14:33 -04001993<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001994## setARGB
1995
Cary Clarka560c472017-11-27 10:44:06 -05001996<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001997void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
1998</pre>
1999
Cary Clark4c06f5e2017-08-04 12:48:24 -04002000Sets <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 -04002001The 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 -04002002
2003### Parameters
2004
Cary Clark8cc16c72017-08-25 11:51:49 -04002005<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2006amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2007 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2008amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2009 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2010amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2011 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2012amount 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 -04002013 </tr>
2014</table>
2015
2016### Example
2017
2018<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2019
2020#### Example Output
2021
2022~~~~
2023transRed1 == transRed2
2024~~~~
2025
2026</fiddle-embed></div>
2027
2028### See Also
2029
Cary Clark8cc16c72017-08-25 11:51:49 -04002030<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002031
2032---
2033
2034# <a name="Style"></a> Style
Cary Clark8cc16c72017-08-25 11:51:49 -04002035<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2036Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002037
Cary Clark8cc16c72017-08-25 11:51:49 -04002038Set <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 -04002039The fill covers the area inside the geometry for most shapes.
2040
Cary Clark8cc16c72017-08-25 11:51:49 -04002041Set <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 -04002042
2043## <a name="Fill"></a> Fill
2044
2045### See Also
2046
Cary Clark8cc16c72017-08-25 11:51:49 -04002047<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002048
2049## <a name="Stroke"></a> Stroke
2050
Cary Clarkbc5697d2017-10-04 14:31:33 -04002051The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002052<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>.
2053The 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 -04002054The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002055
Cary Clark8cc16c72017-08-25 11:51:49 -04002056As <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
2057may 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 -04002058
2059## <a name="Hairline"></a> Hairline
2060
Cary Clark8cc16c72017-08-25 11:51:49 -04002061<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 -05002062<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
2063flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002064
Cary Clark8cc16c72017-08-25 11:51:49 -04002065<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
2066two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2067pixel. 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 -05002068GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002069while stroking.
2070
Cary Clark8cc16c72017-08-25 11:51:49 -04002071## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002072
Cary Clarka560c472017-11-27 10:44:06 -05002073<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002074enum <a href="#SkPaint_Style">Style</a> {
2075<a href="#SkPaint_kFill_Style">kFill Style</a>,
2076<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2077<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002078};</pre>
2079
Cary Clark8cc16c72017-08-25 11:51:49 -04002080Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002081The stroke and fill
2082share all paint attributes; for instance, they are drawn with the same color.
2083
Cary Clark8cc16c72017-08-25 11:51:49 -04002084Use <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 -04002085a fill draw.
2086
2087### Constants
2088
2089<table>
2090 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002091 <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 -05002092Applies 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 -05002093<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 -04002094<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2095The <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 -04002096and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002097<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 -04002098 </tr>
2099 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002100 <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 -05002101Applies 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 -04002102<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 -04002103and ignore the set <a href="#SkPaint_Style">Style</a>.
2104The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002105 </tr>
2106 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002107 <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 -04002108Applies 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 -04002109<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2110and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002111 </tr>
2112
2113</table>
2114
Cary Clark8cc16c72017-08-25 11:51:49 -04002115## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002116
Cary Clarka560c472017-11-27 10:44:06 -05002117<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002118enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002119<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002120};</pre>
2121
2122### Constants
2123
2124<table>
2125 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002126 <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.
2127May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002128 </tr>
2129
2130</table>
2131
Cary Clark493df1f2017-08-25 13:14:33 -04002132<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002133## getStyle
2134
Cary Clarka560c472017-11-27 10:44:06 -05002135<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002136Style getStyle() const
2137</pre>
2138
2139Whether the geometry is filled, stroked, or filled and stroked.
2140
2141### Return Value
2142
Cary Clark8cc16c72017-08-25 11:51:49 -04002143one 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 -04002144
2145### Example
2146
2147<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2148
2149#### Example Output
2150
2151~~~~
2152SkPaint::kFill_Style == paint.getStyle()
2153~~~~
2154
2155</fiddle-embed></div>
2156
2157### See Also
2158
Cary Clark8cc16c72017-08-25 11:51:49 -04002159<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002160
2161---
2162
Cary Clark493df1f2017-08-25 13:14:33 -04002163<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002164## setStyle
2165
Cary Clarka560c472017-11-27 10:44:06 -05002166<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002167void setStyle(Style style)
2168</pre>
2169
2170Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002171Has 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 -04002172
2173### Parameters
2174
Cary Clark8cc16c72017-08-25 11:51:49 -04002175<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2176one 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 -04002177 </tr>
2178</table>
2179
2180### Example
2181
2182<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2183
2184### See Also
2185
Cary Clark8cc16c72017-08-25 11:51:49 -04002186<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002187
2188---
2189
2190### See Also
2191
Cary Clark8cc16c72017-08-25 11:51:49 -04002192<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 -04002193
2194# <a name="Stroke_Width"></a> Stroke Width
Cary Clark8cc16c72017-08-25 11:51:49 -04002195<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002196of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002197set 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 -04002198
2199When width is greater than zero, the stroke encompasses as many pixels partially
2200or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002201the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002202
Cary Clarkbc5697d2017-10-04 14:31:33 -04002203The stroke dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002204remains one pixel wide regardless of scaling.
2205
2206The default width for the paint is zero.
2207
2208### Example
2209
Cary Clark7cfcbca2018-01-04 16:11:51 -05002210<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 -04002211line and the platform implementation.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002212
Cary Clark493df1f2017-08-25 13:14:33 -04002213<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002214## getStrokeWidth
2215
Cary Clarka560c472017-11-27 10:44:06 -05002216<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002217SkScalar getStrokeWidth() const
2218</pre>
2219
Cary Clark8cc16c72017-08-25 11:51:49 -04002220Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002221outline the shape.
2222
2223### Return Value
2224
Cary Clark8cc16c72017-08-25 11:51:49 -04002225zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002226
2227### Example
2228
2229<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2230
2231#### Example Output
2232
2233~~~~
22340 == paint.getStrokeWidth()
2235~~~~
2236
2237</fiddle-embed></div>
2238
2239---
2240
Cary Clark493df1f2017-08-25 13:14:33 -04002241<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002242## setStrokeWidth
2243
Cary Clarka560c472017-11-27 10:44:06 -05002244<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002245void setStrokeWidth(SkScalar width)
2246</pre>
2247
2248Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002249outline the shape.
2250Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002251
2252### Parameters
2253
Cary Clark8cc16c72017-08-25 11:51:49 -04002254<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2255zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002256 </tr>
2257</table>
2258
2259### Example
2260
2261<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2262
2263#### Example Output
2264
2265~~~~
22665 == paint.getStrokeWidth()
2267~~~~
2268
2269</fiddle-embed></div>
2270
2271---
2272
2273# <a name="Miter_Limit"></a> Miter Limit
Cary Clark8cc16c72017-08-25 11:51:49 -04002274<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002275relative to the stroke width.
2276
Cary Clark8cc16c72017-08-25 11:51:49 -04002277<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2278is 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>
2279or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002280
Cary Clark8cc16c72017-08-25 11:51:49 -04002281If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2282is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002283
Cary Clark8cc16c72017-08-25 11:51:49 -04002284<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002285
Cary Clark8cc16c72017-08-25 11:51:49 -04002286miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002287The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002288in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002289
2290Here are some miter limits and the angles that triggers them.
2291
2292| miter limit | angle in degrees |
2293| --- | --- |
2294| 10 | 11.48 |
2295| 9 | 12.76 |
2296| 8 | 14.36 |
2297| 7 | 16.43 |
2298| 6 | 19.19 |
2299| 5 | 23.07 |
2300| 4 | 28.96 |
2301| 3 | 38.94 |
2302| 2 | 60 |
2303| 1 | 180 |
2304
2305### Example
2306
2307<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2308When the miter limit is decreased slightly, the miter join is replaced
2309by a bevel join.</div></fiddle-embed></div>
2310
Cary Clark493df1f2017-08-25 13:14:33 -04002311<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002312## getStrokeMiter
2313
Cary Clarka560c472017-11-27 10:44:06 -05002314<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002315SkScalar getStrokeMiter() const
2316</pre>
2317
2318The limit at which a sharp corner is drawn beveled.
2319
2320### Return Value
2321
Cary Clark8cc16c72017-08-25 11:51:49 -04002322zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002323
2324### Example
2325
2326<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2327
2328#### Example Output
2329
2330~~~~
2331default miter limit == 4
2332~~~~
2333
2334</fiddle-embed></div>
2335
2336### See Also
2337
Cary Clark8cc16c72017-08-25 11:51:49 -04002338<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 -04002339
2340---
2341
Cary Clark493df1f2017-08-25 13:14:33 -04002342<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002343## setStrokeMiter
2344
Cary Clarka560c472017-11-27 10:44:06 -05002345<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002346void setStrokeMiter(SkScalar miter)
2347</pre>
2348
2349The limit at which a sharp corner is drawn beveled.
2350Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002351Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002352
2353### Parameters
2354
Cary Clark8cc16c72017-08-25 11:51:49 -04002355<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2356zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002357 </tr>
2358</table>
2359
2360### Example
2361
2362<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2363
2364#### Example Output
2365
2366~~~~
2367default miter limit == 8
2368~~~~
2369
2370</fiddle-embed></div>
2371
2372### See Also
2373
Cary Clark8cc16c72017-08-25 11:51:49 -04002374<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 -04002375
2376---
2377
2378# <a name="Stroke_Cap"></a> Stroke Cap
2379
Cary Clark8cc16c72017-08-25 11:51:49 -04002380## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002381
Cary Clarka560c472017-11-27 10:44:06 -05002382<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002383enum <a href="#SkPaint_Cap">Cap</a> {
2384<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2385<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2386<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002387
Cary Clark8cc16c72017-08-25 11:51:49 -04002388<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2389<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002390};
Cary Clark6fc50412017-09-21 12:31:06 -04002391
Cary Clark8cc16c72017-08-25 11:51:49 -04002392static 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 -04002393
Cary Clark8cc16c72017-08-25 11:51:49 -04002394<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 -04002395
2396### Constants
2397
2398<table>
2399 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002400 <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 -04002401 </tr>
2402 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002403 <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 -04002404and end.</td>
2405 </tr>
2406 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002407 <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 -04002408and end. The square sides are parallel to the initial and final direction
2409of the stroke.</td>
2410 </tr>
2411 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002412 <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 -04002413 </tr>
2414 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002415 <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>.
2416<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 -04002417 </tr>
2418 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002419 <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.
2420May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002421 </tr>
2422
Cary Clark7cfcbca2018-01-04 16:11:51 -05002423Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002424follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002425
Cary Clark8cc16c72017-08-25 11:51:49 -04002426If 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 -04002427visible beginning and end.
2428
Cary Clark8cc16c72017-08-25 11:51:49 -04002429<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 -04002430
Cary Clark8cc16c72017-08-25 11:51:49 -04002431<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 -05002432<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 -04002433at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002434<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
2435<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002436
Cary Clark8cc16c72017-08-25 11:51:49 -04002437<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 -04002438
2439</table>
2440
2441### Example
2442
Cary Clark2ade9972017-11-02 17:49:34 -04002443<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002444
Cary Clark493df1f2017-08-25 13:14:33 -04002445<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002446## getStrokeCap
2447
Cary Clarka560c472017-11-27 10:44:06 -05002448<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002449Cap getStrokeCap() const
2450</pre>
2451
2452The geometry drawn at the beginning and end of strokes.
2453
2454### Return Value
2455
Cary Clark8cc16c72017-08-25 11:51:49 -04002456one 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 -04002457
2458### Example
2459
2460<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2461
2462#### Example Output
2463
2464~~~~
2465kButt_Cap == default stroke cap
2466~~~~
2467
2468</fiddle-embed></div>
2469
2470### See Also
2471
Cary Clark8cc16c72017-08-25 11:51:49 -04002472<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002473
2474---
2475
Cary Clark493df1f2017-08-25 13:14:33 -04002476<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002477## setStrokeCap
2478
Cary Clarka560c472017-11-27 10:44:06 -05002479<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002480void setStrokeCap(Cap cap)
2481</pre>
2482
2483The geometry drawn at the beginning and end of strokes.
2484
2485### Parameters
2486
Cary Clark8cc16c72017-08-25 11:51:49 -04002487<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2488one 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>;
2489has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002490 </tr>
2491</table>
2492
2493### Example
2494
2495<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2496
2497#### Example Output
2498
2499~~~~
2500kRound_Cap == paint.getStrokeCap()
2501~~~~
2502
2503</fiddle-embed></div>
2504
2505### See Also
2506
Cary Clark8cc16c72017-08-25 11:51:49 -04002507<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002508
2509---
2510
2511# <a name="Stroke_Join"></a> Stroke Join
Cary Clark8cc16c72017-08-25 11:51:49 -04002512<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 -04002513
Cary Clark7cfcbca2018-01-04 16:11:51 -05002514Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002515follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002516
2517If the contour direction changes abruptly, because the tangent direction leading
2518to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002519the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002520
2521### Example
2522
Cary Clark2ade9972017-11-02 17:49:34 -04002523<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002524
Cary Clark8cc16c72017-08-25 11:51:49 -04002525## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002526
Cary Clarka560c472017-11-27 10:44:06 -05002527<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002528enum <a href="#SkPaint_Join">Join</a> {
2529<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2530<a href="#SkPaint_kRound_Join">kRound Join</a>,
2531<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002532
Cary Clark8cc16c72017-08-25 11:51:49 -04002533<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2534<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002535};
Cary Clark6fc50412017-09-21 12:31:06 -04002536
Cary Clark8cc16c72017-08-25 11:51:49 -04002537static 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 -04002538
Cary Clark8cc16c72017-08-25 11:51:49 -04002539<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 -04002540affects the four corners of a stroked rectangle, and the connected segments in a
2541stroked path.
2542
2543Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2544radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2545connect the thick strokes.
2546
Cary Clark7cfcbca2018-01-04 16:11:51 -05002547The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002548not contain the actual join. For instance, a fill path constructed with round joins does
2549not necessarily include circles at each connected segment.
2550
2551### Constants
2552
2553<table>
2554 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002555 <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>.
2556If 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 -04002557 </tr>
2558 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002559 <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 -04002560 </tr>
2561 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002562 <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 -04002563 </tr>
2564 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002565 <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 -04002566 </tr>
2567 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002568 <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>.
2569<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 -04002570 </tr>
2571 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002572 <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.
2573May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002574 </tr>
2575</table>
2576
2577### Example
2578
2579<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2580
2581### See Also
2582
Cary Clark8cc16c72017-08-25 11:51:49 -04002583<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 -04002584
2585
2586
Cary Clark493df1f2017-08-25 13:14:33 -04002587<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002588## getStrokeJoin
2589
Cary Clarka560c472017-11-27 10:44:06 -05002590<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002591Join getStrokeJoin() const
2592</pre>
2593
Cary Clark0c5f5462017-12-15 11:21:51 -05002594The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002595
2596### Return Value
2597
Cary Clark8cc16c72017-08-25 11:51:49 -04002598one 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 -04002599
2600### Example
2601
2602<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2603
2604#### Example Output
2605
2606~~~~
2607kMiter_Join == default stroke join
2608~~~~
2609
2610</fiddle-embed></div>
2611
2612### See Also
2613
Cary Clark8cc16c72017-08-25 11:51:49 -04002614<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002615
2616---
2617
Cary Clark493df1f2017-08-25 13:14:33 -04002618<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002619## setStrokeJoin
2620
Cary Clarka560c472017-11-27 10:44:06 -05002621<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002622void setStrokeJoin(Join join)
2623</pre>
2624
Cary Clark0c5f5462017-12-15 11:21:51 -05002625The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002626
2627### Parameters
2628
Cary Clark8cc16c72017-08-25 11:51:49 -04002629<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2630one 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 -04002631otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002632 </tr>
2633</table>
2634
2635### Example
2636
2637<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2638
2639#### Example Output
2640
2641~~~~
2642kMiter_Join == paint.getStrokeJoin()
2643~~~~
2644
2645</fiddle-embed></div>
2646
2647### See Also
2648
Cary Clark8cc16c72017-08-25 11:51:49 -04002649<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002650
2651---
2652
2653### See Also
2654
Cary Clark8cc16c72017-08-25 11:51:49 -04002655<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002656
2657# <a name="Fill_Path"></a> Fill Path
Cary Clark8cc16c72017-08-25 11:51:49 -04002658<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 -04002659
Cary Clark8cc16c72017-08-25 11:51:49 -04002660If <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 -04002661replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2662destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002663
Cary Clark4c06f5e2017-08-04 12:48:24 -04002664Fill <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
2665the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002666
Cary Clark7cfcbca2018-01-04 16:11:51 -05002667If <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 -04002668and <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>,
2669and <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 -04002670
Cary Clark7cfcbca2018-01-04 16:11:51 -05002671Fill <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 -04002672
Cary Clark8cc16c72017-08-25 11:51:49 -04002673If 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>
2674returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002675
Cary Clark493df1f2017-08-25 13:14:33 -04002676<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002677## getFillPath
2678
Cary Clarka560c472017-11-27 10:44:06 -05002679<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2680bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002681</pre>
2682
2683The filled equivalent of the stroked path.
2684
2685### Parameters
2686
Cary Clark8cc16c72017-08-25 11:51:49 -04002687<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002688<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002689 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2690resulting <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>
2691 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002692optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002693 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002694if > 1, increase precision, else if (0 < res < 1) reduce precision
2695to favor speed and size</td>
2696 </tr>
2697</table>
2698
2699### Return Value
2700
Cary Clark8cc16c72017-08-25 11:51:49 -04002701true 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 -04002702
2703### Example
2704
Cary Clarkce101242017-09-01 15:51:02 -04002705<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 -05002706At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002707At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2708
2709---
2710
Cary Clarka560c472017-11-27 10:44:06 -05002711<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002712bool getFillPath(const SkPath& src, SkPath* dst) const
2713</pre>
2714
2715The filled equivalent of the stroked path.
2716
Cary Clark8cc16c72017-08-25 11:51:49 -04002717Replaces <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>.
2718<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 -04002719
2720### Parameters
2721
Cary Clark8cc16c72017-08-25 11:51:49 -04002722<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002723<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002724 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2725resulting <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 -04002726 </tr>
2727</table>
2728
2729### Return Value
2730
Cary Clark8cc16c72017-08-25 11:51:49 -04002731true 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 -04002732
2733### Example
2734
2735<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2736
2737---
2738
2739### See Also
2740
Cary Clark8cc16c72017-08-25 11:51:49 -04002741<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 -04002742
2743# <a name="Shader_Methods"></a> Shader Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002744<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2745<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002746If <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 -04002747
Cary Clark8cc16c72017-08-25 11:51:49 -04002748<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2749If <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 -04002750the fill.
2751
Cary Clark8cc16c72017-08-25 11:51:49 -04002752The 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 -04002753
2754### Example
2755
2756<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2757
Cary Clark8cc16c72017-08-25 11:51:49 -04002758If <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 -04002759
2760### Example
2761
2762<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2763
Cary Clark493df1f2017-08-25 13:14:33 -04002764<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002765## getShader
2766
Cary Clarka560c472017-11-27 10:44:06 -05002767<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002768SkShader* getShader() const
2769</pre>
2770
2771Optional colors used when filling a path, such as a gradient.
2772
Cary Clark4c06f5e2017-08-04 12:48:24 -04002773Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002774
2775### Return Value
2776
Cary Clark4c06f5e2017-08-04 12:48:24 -04002777<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002778
2779### Example
2780
2781<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2782
2783#### Example Output
2784
2785~~~~
2786nullptr == shader
2787nullptr != shader
2788~~~~
2789
2790</fiddle-embed></div>
2791
2792---
2793
Cary Clark493df1f2017-08-25 13:14:33 -04002794<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002795## refShader
2796
Cary Clarka560c472017-11-27 10:44:06 -05002797<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002798sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002799</pre>
2800
2801Optional colors used when filling a path, such as a gradient.
2802
Cary Clark4c06f5e2017-08-04 12:48:24 -04002803Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002804
2805### Return Value
2806
Cary Clark4c06f5e2017-08-04 12:48:24 -04002807<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002808
2809### Example
2810
2811<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2812
2813#### Example Output
2814
2815~~~~
2816shader unique: true
2817shader unique: false
2818~~~~
2819
2820</fiddle-embed></div>
2821
2822---
2823
Cary Clark493df1f2017-08-25 13:14:33 -04002824<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002825## setShader
2826
Cary Clarka560c472017-11-27 10:44:06 -05002827<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002828void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002829</pre>
2830
2831Optional colors used when filling a path, such as a gradient.
2832
Cary Clarkd0530ba2017-09-14 11:25:39 -04002833Sets <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 -04002834Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002835
2836### Parameters
2837
Cary Clark8cc16c72017-08-25 11:51:49 -04002838<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002839how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002840 </tr>
2841</table>
2842
2843### Example
2844
2845<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2846
2847---
2848
2849# <a name="Color_Filter_Methods"></a> Color Filter Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002850<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2851<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 -04002852If <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 -04002853
Cary Clark8cc16c72017-08-25 11:51:49 -04002854The 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 -04002855
2856### Example
2857
2858<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2859
Cary Clark493df1f2017-08-25 13:14:33 -04002860<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002861## getColorFilter
2862
Cary Clarka560c472017-11-27 10:44:06 -05002863<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002864SkColorFilter* getColorFilter() const
2865</pre>
2866
Cary Clark4c06f5e2017-08-04 12:48:24 -04002867Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2868Does 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 -04002869
2870### Return Value
2871
Cary Clark4c06f5e2017-08-04 12:48:24 -04002872<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002873
2874### Example
2875
2876<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2877
2878#### Example Output
2879
2880~~~~
2881nullptr == color filter
2882nullptr != color filter
2883~~~~
2884
2885</fiddle-embed></div>
2886
2887---
2888
Cary Clark493df1f2017-08-25 13:14:33 -04002889<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002890## refColorFilter
2891
Cary Clarka560c472017-11-27 10:44:06 -05002892<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002893sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002894</pre>
2895
Cary Clark4c06f5e2017-08-04 12:48:24 -04002896Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2897Increases <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 -04002898
2899### Return Value
2900
Cary Clark4c06f5e2017-08-04 12:48:24 -04002901<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002902
2903### Example
2904
2905<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2906
2907#### Example Output
2908
2909~~~~
2910color filter unique: true
2911color filter unique: false
2912~~~~
2913
2914</fiddle-embed></div>
2915
2916---
2917
Cary Clark493df1f2017-08-25 13:14:33 -04002918<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002919## setColorFilter
2920
Cary Clarka560c472017-11-27 10:44:06 -05002921<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002922void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002923</pre>
2924
Cary Clark6fc50412017-09-21 12:31:06 -04002925Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2926<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2927
2928Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002929
2930### Parameters
2931
Cary Clark8cc16c72017-08-25 11:51:49 -04002932<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002933<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002934 </tr>
2935</table>
2936
2937### Example
2938
2939<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2940
2941---
2942
2943# <a name="Blend_Mode_Methods"></a> Blend Mode Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002944<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 -04002945The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002946over the destination color.
2947
2948### Example
2949
2950<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2951
2952### See Also
2953
Cary Clark4c06f5e2017-08-04 12:48:24 -04002954<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002955
Cary Clark493df1f2017-08-25 13:14:33 -04002956<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002957## getBlendMode
2958
Cary Clarka560c472017-11-27 10:44:06 -05002959<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002960SkBlendMode getBlendMode() const
2961</pre>
2962
Cary Clark4c06f5e2017-08-04 12:48:24 -04002963Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002964By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002965
2966### Return Value
2967
2968mode used to combine source color with destination color
2969
2970### Example
2971
2972<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2973
2974#### Example Output
2975
2976~~~~
2977kSrcOver == getBlendMode
2978kSrcOver != getBlendMode
2979~~~~
2980
2981</fiddle-embed></div>
2982
2983---
2984
Cary Clark493df1f2017-08-25 13:14:33 -04002985<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002986## isSrcOver
2987
Cary Clarka560c472017-11-27 10:44:06 -05002988<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002989bool isSrcOver() const
2990</pre>
2991
Cary Clark8cc16c72017-08-25 11:51:49 -04002992Returns 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 -04002993
2994### Return Value
2995
Cary Clark8cc16c72017-08-25 11:51:49 -04002996true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04002997
2998### Example
2999
3000<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3001
3002#### Example Output
3003
3004~~~~
3005isSrcOver == true
3006isSrcOver != true
3007~~~~
3008
3009</fiddle-embed></div>
3010
3011---
3012
Cary Clark493df1f2017-08-25 13:14:33 -04003013<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003014## setBlendMode
3015
Cary Clarka560c472017-11-27 10:44:06 -05003016<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003017void setBlendMode(SkBlendMode mode)
3018</pre>
3019
Cary Clark7cfcbca2018-01-04 16:11:51 -05003020Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003021Does not check for valid input.
3022
3023### Parameters
3024
Cary Clark8cc16c72017-08-25 11:51:49 -04003025<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003026<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003027 </tr>
3028</table>
3029
3030### Example
3031
3032<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3033
3034#### Example Output
3035
3036~~~~
3037isSrcOver == true
3038isSrcOver != true
3039~~~~
3040
3041</fiddle-embed></div>
3042
3043---
3044
3045# <a name="Path_Effect_Methods"></a> Path Effect Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003046<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3047<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 -04003048If <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 -04003049
3050### Example
3051
3052<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3053
3054### See Also
3055
Cary Clark4c06f5e2017-08-04 12:48:24 -04003056<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003057
Cary Clark493df1f2017-08-25 13:14:33 -04003058<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003059## getPathEffect
3060
Cary Clarka560c472017-11-27 10:44:06 -05003061<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003062SkPathEffect* getPathEffect() const
3063</pre>
3064
Cary Clark4c06f5e2017-08-04 12:48:24 -04003065Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3066Does 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 -04003067
3068### Return Value
3069
Cary Clark4c06f5e2017-08-04 12:48:24 -04003070<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003071
3072### Example
3073
3074<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3075
3076#### Example Output
3077
3078~~~~
3079nullptr == path effect
3080nullptr != path effect
3081~~~~
3082
3083</fiddle-embed></div>
3084
3085---
3086
Cary Clark493df1f2017-08-25 13:14:33 -04003087<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003088## refPathEffect
3089
Cary Clarka560c472017-11-27 10:44:06 -05003090<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003091sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003092</pre>
3093
Cary Clark4c06f5e2017-08-04 12:48:24 -04003094Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3095Increases <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 -04003096
3097### Return Value
3098
Cary Clark4c06f5e2017-08-04 12:48:24 -04003099<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003100
3101### Example
3102
Cary Clarka560c472017-11-27 10:44:06 -05003103<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003104
3105#### Example Output
3106
3107~~~~
3108path effect unique: true
3109path effect unique: false
3110~~~~
3111
3112</fiddle-embed></div>
3113
3114---
3115
Cary Clark493df1f2017-08-25 13:14:33 -04003116<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003117## setPathEffect
3118
Cary Clarka560c472017-11-27 10:44:06 -05003119<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003120void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003121</pre>
3122
Cary Clark6fc50412017-09-21 12:31:06 -04003123Sets <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
3124<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3125
3126Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003127
3128### Parameters
3129
Cary Clark8cc16c72017-08-25 11:51:49 -04003130<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003131replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003132 </tr>
3133</table>
3134
3135### Example
3136
3137<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3138
3139---
3140
3141# <a name="Mask_Filter_Methods"></a> Mask Filter Methods
Cary Clarkce101242017-09-01 15:51:02 -04003142<a href="undocumented#Mask_Filter">Mask Filter</a> uses coverage of the shape drawn to create <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Update Docs949cfd42018-01-22 05:50:26 +00003143<a href="undocumented#Mask_Filter">Mask Filter</a> takes a <a href="undocumented#Mask">Mask</a>, and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003144
3145<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3146creating 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
3147modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003148
3149### Example
3150
3151<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3152
Cary Clark493df1f2017-08-25 13:14:33 -04003153<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003154## getMaskFilter
3155
Cary Clarka560c472017-11-27 10:44:06 -05003156<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003157SkMaskFilter* getMaskFilter() const
3158</pre>
3159
Cary Clark4c06f5e2017-08-04 12:48:24 -04003160Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3161Does 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 -04003162
3163### Return Value
3164
Cary Clark4c06f5e2017-08-04 12:48:24 -04003165<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003166
3167### Example
3168
3169<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3170
3171#### Example Output
3172
3173~~~~
3174nullptr == mask filter
3175nullptr != mask filter
3176~~~~
3177
3178</fiddle-embed></div>
3179
3180---
3181
Cary Clark493df1f2017-08-25 13:14:33 -04003182<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003183## refMaskFilter
3184
Cary Clarka560c472017-11-27 10:44:06 -05003185<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003186sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003187</pre>
3188
Cary Clark4c06f5e2017-08-04 12:48:24 -04003189Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003190
Cary Clark4c06f5e2017-08-04 12:48:24 -04003191Increases <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 -04003192
3193### Return Value
3194
Cary Clark4c06f5e2017-08-04 12:48:24 -04003195<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003196
3197### Example
3198
3199<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3200
3201#### Example Output
3202
3203~~~~
3204mask filter unique: true
3205mask filter unique: false
3206~~~~
3207
3208</fiddle-embed></div>
3209
3210---
3211
Cary Clark493df1f2017-08-25 13:14:33 -04003212<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003213## setMaskFilter
3214
Cary Clarka560c472017-11-27 10:44:06 -05003215<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003216void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003217</pre>
3218
Cary Clark6fc50412017-09-21 12:31:06 -04003219Sets <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
3220<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
3221<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3222
Cary Clark6fc50412017-09-21 12:31:06 -04003223Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003224
3225### Parameters
3226
Cary Clark8cc16c72017-08-25 11:51:49 -04003227<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003228modifies clipping mask generated from drawn geometry</td>
3229 </tr>
3230</table>
3231
3232### Example
3233
3234<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3235
3236---
3237
3238# <a name="Typeface_Methods"></a> Typeface Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003239<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3240<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3241The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003242implementation.
3243
3244### Example
3245
Ben Wagner700ff172017-11-08 15:37:22 -05003246<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003247
Cary Clark493df1f2017-08-25 13:14:33 -04003248<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003249## getTypeface
3250
Cary Clarka560c472017-11-27 10:44:06 -05003251<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003252SkTypeface* getTypeface() const
3253</pre>
3254
Cary Clark4c06f5e2017-08-04 12:48:24 -04003255Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003256Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003257
3258### Return Value
3259
Cary Clark4c06f5e2017-08-04 12:48:24 -04003260<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003261
3262### Example
3263
Cary Clark71961fb2018-01-05 14:21:59 -05003264<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003265
3266#### Example Output
3267
3268~~~~
3269nullptr == typeface
3270nullptr != typeface
3271~~~~
3272
3273</fiddle-embed></div>
3274
3275---
3276
Cary Clark493df1f2017-08-25 13:14:33 -04003277<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003278## refTypeface
3279
Cary Clarka560c472017-11-27 10:44:06 -05003280<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003281sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003282</pre>
3283
Cary Clark4c06f5e2017-08-04 12:48:24 -04003284Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003285
3286### Return Value
3287
Cary Clark4c06f5e2017-08-04 12:48:24 -04003288<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003289
3290### Example
3291
Cary Clark71961fb2018-01-05 14:21:59 -05003292<div><fiddle-embed name="4bf8ed109c4b46d8a05c8b7763c1982c">
Cary Clark12799e12017-07-28 15:18:29 -04003293
3294#### Example Output
3295
3296~~~~
3297typeface1 != typeface2
3298typeface1 == typeface2
3299~~~~
3300
3301</fiddle-embed></div>
3302
3303---
3304
Cary Clark493df1f2017-08-25 13:14:33 -04003305<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003306## setTypeface
3307
Cary Clarka560c472017-11-27 10:44:06 -05003308<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003309void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003310</pre>
3311
Cary Clark7cfcbca2018-01-04 16:11:51 -05003312Sets <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 -04003313Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3314<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003315
3316### Parameters
3317
Cary Clark8cc16c72017-08-25 11:51:49 -04003318<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003319font and style used to draw text</td>
3320 </tr>
3321</table>
3322
3323### Example
3324
Cary Clark71961fb2018-01-05 14:21:59 -05003325<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003326
3327---
3328
Cary Clark12799e12017-07-28 15:18:29 -04003329# <a name="Image_Filter_Methods"></a> Image Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003330<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3331with <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 -04003332which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003333
Cary Clark4c06f5e2017-08-04 12:48:24 -04003334<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 -04003335can 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 -04003336<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
Update Docs949cfd42018-01-22 05:50:26 +00003337<a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003338
3339### Example
3340
Cary Clarka560c472017-11-27 10:44:06 -05003341<div><fiddle-embed name="0b2eec148d6397d6231e1fa0b3d1496d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003342
Cary Clark493df1f2017-08-25 13:14:33 -04003343<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003344## getImageFilter
3345
Cary Clarka560c472017-11-27 10:44:06 -05003346<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003347SkImageFilter* getImageFilter() const
3348</pre>
3349
Cary Clark4c06f5e2017-08-04 12:48:24 -04003350Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3351Does 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 -04003352
3353### Return Value
3354
Cary Clark4c06f5e2017-08-04 12:48:24 -04003355<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003356
3357### Example
3358
Cary Clarka560c472017-11-27 10:44:06 -05003359<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003360
3361#### Example Output
3362
3363~~~~
3364nullptr == image filter
3365nullptr != image filter
3366~~~~
3367
3368</fiddle-embed></div>
3369
3370---
3371
Cary Clark493df1f2017-08-25 13:14:33 -04003372<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003373## refImageFilter
3374
Cary Clarka560c472017-11-27 10:44:06 -05003375<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003376sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003377</pre>
3378
Cary Clark4c06f5e2017-08-04 12:48:24 -04003379Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3380Increases <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 -04003381
3382### Return Value
3383
Cary Clark4c06f5e2017-08-04 12:48:24 -04003384<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003385
3386### Example
3387
3388<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3389
3390#### Example Output
3391
3392~~~~
3393image filter unique: true
3394image filter unique: false
3395~~~~
3396
3397</fiddle-embed></div>
3398
3399---
3400
Cary Clark493df1f2017-08-25 13:14:33 -04003401<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003402## setImageFilter
3403
Cary Clarka560c472017-11-27 10:44:06 -05003404<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003405void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003406</pre>
3407
Cary Clark6fc50412017-09-21 12:31:06 -04003408Sets <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
3409<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 -04003410on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003411
Cary Clark6fc50412017-09-21 12:31:06 -04003412Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003413
3414### Parameters
3415
Cary Clark8cc16c72017-08-25 11:51:49 -04003416<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003417how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003418 </tr>
3419</table>
3420
3421### Example
3422
3423<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3424
3425---
3426
3427# <a name="Draw_Looper_Methods"></a> Draw Looper Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003428<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 -04003429to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003430
Cary Clark4c06f5e2017-08-04 12:48:24 -04003431<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3432<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 -05003433Set <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 -04003434
3435### Example
3436
3437<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3438
Cary Clark493df1f2017-08-25 13:14:33 -04003439<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003440## getDrawLooper
3441
Cary Clarka560c472017-11-27 10:44:06 -05003442<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003443SkDrawLooper* getDrawLooper() const
3444</pre>
3445
Cary Clark4c06f5e2017-08-04 12:48:24 -04003446Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3447Does 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 -04003448
3449### Return Value
3450
Cary Clark4c06f5e2017-08-04 12:48:24 -04003451<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003452
3453### Example
3454
3455<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3456
3457#### Example Output
3458
3459~~~~
3460nullptr == draw looper
3461nullptr != draw looper
3462~~~~
3463
3464</fiddle-embed></div>
3465
3466---
3467
Cary Clark493df1f2017-08-25 13:14:33 -04003468<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003469## refDrawLooper
3470
Cary Clarka560c472017-11-27 10:44:06 -05003471<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003472sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003473</pre>
3474
Cary Clark4c06f5e2017-08-04 12:48:24 -04003475Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3476Increases <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 -04003477
3478### Return Value
3479
Cary Clark4c06f5e2017-08-04 12:48:24 -04003480<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003481
3482### Example
3483
3484<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3485
3486#### Example Output
3487
3488~~~~
3489draw looper unique: true
3490draw looper unique: false
3491~~~~
3492
3493</fiddle-embed></div>
3494
3495---
3496
Cary Clark493df1f2017-08-25 13:14:33 -04003497<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003498## getLooper
3499
Cary Clarka560c472017-11-27 10:44:06 -05003500<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003501SkDrawLooper* getLooper() const
3502</pre>
3503
3504Deprecated.
3505
3506(see bug.skia.org/6259)
3507
3508### Return Value
3509
Cary Clark4c06f5e2017-08-04 12:48:24 -04003510<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003511
3512---
3513
Cary Clark493df1f2017-08-25 13:14:33 -04003514<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003515## setDrawLooper
3516
Cary Clarka560c472017-11-27 10:44:06 -05003517<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003518void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003519</pre>
3520
Cary Clark6fc50412017-09-21 12:31:06 -04003521Sets <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
3522<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
3523drawing unaltered.
3524
3525Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003526
3527### Parameters
3528
Cary Clark8cc16c72017-08-25 11:51:49 -04003529<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003530iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003531 </tr>
3532</table>
3533
3534### Example
3535
3536<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3537
3538---
3539
Cary Clark493df1f2017-08-25 13:14:33 -04003540<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003541## setLooper
3542
Cary Clarka560c472017-11-27 10:44:06 -05003543<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003544void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003545</pre>
3546
3547Deprecated.
3548
3549(see bug.skia.org/6259)
3550
3551### Parameters
3552
Cary Clark8cc16c72017-08-25 11:51:49 -04003553<table> <tr> <td><a name="SkPaint_setLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3554sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setLooper_drawLooper">drawLooper</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003555 </tr>
3556
3557---
3558
3559</table>
3560
3561# <a name="Text_Align"></a> Text Align
3562
Cary Clark8cc16c72017-08-25 11:51:49 -04003563## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003564
Cary Clarka560c472017-11-27 10:44:06 -05003565<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003566enum <a href="#SkPaint_Align">Align</a> {
3567<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3568<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3569<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003570};</pre>
3571
Cary Clark8cc16c72017-08-25 11:51:49 -04003572<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003573<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 -05003574<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04003575<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 -05003576and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003577as 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 -04003578
3579The text position is set by the font for both horizontal and vertical text.
3580Typically, for horizontal text, the position is to the left side of the glyph on the
3581base line; and for vertical text, the position is the horizontal center of the glyph
3582at the caps height.
3583
Cary Clark7cfcbca2018-01-04 16:11:51 -05003584<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 -04003585using the metrics returned by the font.
3586
Cary Clark8cc16c72017-08-25 11:51:49 -04003587<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003588
3589### Constants
3590
3591<table>
3592 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003593 <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 -04003594 </tr>
3595 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003596 <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
3597half 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 -04003598 </tr>
3599 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003600 <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,
3601and 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 -04003602 </tr>
3603
3604</table>
3605
Cary Clark8cc16c72017-08-25 11:51:49 -04003606## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003607
Cary Clarka560c472017-11-27 10:44:06 -05003608<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003609enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003610<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003611};</pre>
3612
3613### Constants
3614
3615<table>
3616 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003617 <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 -04003618 </tr>
3619
3620</table>
3621
3622### Example
3623
3624<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3625
3626### Example
3627
Cary Clark8cc16c72017-08-25 11:51:49 -04003628<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 -04003629
Cary Clark493df1f2017-08-25 13:14:33 -04003630<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003631## getTextAlign
3632
Cary Clarka560c472017-11-27 10:44:06 -05003633<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003634Align getTextAlign() const
3635</pre>
3636
Cary Clark8cc16c72017-08-25 11:51:49 -04003637Returns <a href="#Text_Align">Text Align</a>.
3638Returns <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 -04003639
3640### Return Value
3641
3642text placement relative to position
3643
3644### Example
3645
3646<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3647
3648#### Example Output
3649
3650~~~~
3651kLeft_Align == default
3652~~~~
3653
3654</fiddle-embed></div>
3655
3656---
3657
Cary Clark493df1f2017-08-25 13:14:33 -04003658<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003659## setTextAlign
3660
Cary Clarka560c472017-11-27 10:44:06 -05003661<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003662void setTextAlign(Align align)
3663</pre>
3664
Cary Clark8cc16c72017-08-25 11:51:49 -04003665Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3666Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003667
3668### Parameters
3669
Cary Clark8cc16c72017-08-25 11:51:49 -04003670<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003671text placement relative to position</td>
3672 </tr>
3673</table>
3674
3675### Example
3676
Cary Clark4c06f5e2017-08-04 12:48:24 -04003677<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 -04003678alignment out of range has no effect.</div></fiddle-embed></div>
3679
3680---
3681
3682# <a name="Text_Size"></a> Text Size
Cary Clark8cc16c72017-08-25 11:51:49 -04003683<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3684<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3685<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003686Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003687
3688### Example
3689
3690<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3691
Cary Clark493df1f2017-08-25 13:14:33 -04003692<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003693## getTextSize
3694
Cary Clarka560c472017-11-27 10:44:06 -05003695<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003696SkScalar getTextSize() const
3697</pre>
3698
Cary Clark8cc16c72017-08-25 11:51:49 -04003699Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003700
3701### Return Value
3702
3703typographic height of text
3704
3705### Example
3706
3707<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3708
3709---
3710
Cary Clark493df1f2017-08-25 13:14:33 -04003711<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003712## setTextSize
3713
Cary Clarka560c472017-11-27 10:44:06 -05003714<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003715void setTextSize(SkScalar textSize)
3716</pre>
3717
Cary Clark8cc16c72017-08-25 11:51:49 -04003718Sets <a href="#Text_Size">Text Size</a> in points.
3719Has 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 -04003720
3721### Parameters
3722
Cary Clark8cc16c72017-08-25 11:51:49 -04003723<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003724typographic height of text</td>
3725 </tr>
3726</table>
3727
3728### Example
3729
3730<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3731
3732---
3733
3734# <a name="Text_Scale_X"></a> Text Scale X
Cary Clark8cc16c72017-08-25 11:51:49 -04003735<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003736<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003737is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003738<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3739<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003740
3741### Example
3742
3743<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3744
Cary Clark493df1f2017-08-25 13:14:33 -04003745<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003746## getTextScaleX
3747
Cary Clarka560c472017-11-27 10:44:06 -05003748<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003749SkScalar getTextScaleX() const
3750</pre>
3751
Cary Clark8cc16c72017-08-25 11:51:49 -04003752Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003753Default value is 1.
3754
3755### Return Value
3756
3757text horizontal scale
3758
3759### Example
3760
3761<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3762
3763---
3764
Cary Clark493df1f2017-08-25 13:14:33 -04003765<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003766## setTextScaleX
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 setTextScaleX(SkScalar scaleX)
3770</pre>
3771
Cary Clark8cc16c72017-08-25 11:51:49 -04003772Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003773Default value is 1.
3774
3775### Parameters
3776
Cary Clark8cc16c72017-08-25 11:51:49 -04003777<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003778text horizontal scale</td>
3779 </tr>
3780</table>
3781
3782### Example
3783
3784<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3785
3786---
3787
3788# <a name="Text_Skew_X"></a> Text Skew X
Cary Clark8cc16c72017-08-25 11:51:49 -04003789<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003790<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003791is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003792<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3793<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003794
3795### Example
3796
3797<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3798
Cary Clark493df1f2017-08-25 13:14:33 -04003799<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003800## getTextSkewX
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 getTextSkewX() const
3804</pre>
3805
Cary Clark8cc16c72017-08-25 11:51:49 -04003806Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003807Default value is zero.
3808
3809### Return Value
3810
3811additional shear in x-axis relative to y-axis
3812
3813### Example
3814
3815<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3816
3817---
3818
Cary Clark493df1f2017-08-25 13:14:33 -04003819<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003820## setTextSkewX
3821
Cary Clarka560c472017-11-27 10:44:06 -05003822<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003823void setTextSkewX(SkScalar skewX)
3824</pre>
3825
Cary Clark8cc16c72017-08-25 11:51:49 -04003826Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003827Default value is zero.
3828
3829### Parameters
3830
Cary Clark8cc16c72017-08-25 11:51:49 -04003831<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003832additional shear in x-axis relative to y-axis</td>
3833 </tr>
3834</table>
3835
3836### Example
3837
3838<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3839
3840---
3841
3842# <a name="Text_Encoding"></a> Text Encoding
3843
Cary Clark8cc16c72017-08-25 11:51:49 -04003844## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003845
Cary Clarka560c472017-11-27 10:44:06 -05003846<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003847enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3848<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3849<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3850<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3851<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003852};</pre>
3853
Cary Clark6fc50412017-09-21 12:31:06 -04003854<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003855size, 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 -04003856
Cary Clarka560c472017-11-27 10:44:06 -05003857Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003858All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003859in the total storage required.
3860
Cary Clark7cfcbca2018-01-04 16:11:51 -05003861<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 -04003862
Cary Clark7cfcbca2018-01-04 16:11:51 -05003863<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 -04003864
Cary Clark7cfcbca2018-01-04 16:11:51 -05003865<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 -04003866
Cary Clark7cfcbca2018-01-04 16:11:51 -05003867<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 -04003868A glyph index is a 16-bit word.
3869
Cary Clark8cc16c72017-08-25 11:51:49 -04003870<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 -04003871
3872### Constants
3873
3874<table>
3875 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003876 <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 -04003877 </tr>
3878 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003879 <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 -04003880 </tr>
3881 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003882 <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 -04003883 </tr>
3884 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003885 <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 -04003886 </tr>
3887
3888</table>
3889
3890### Example
3891
Cary Clarka560c472017-11-27 10:44:06 -05003892<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3893Second line is encoded in UTF-16.
3894Third line is encoded in UTF-32.
Cary Clark12799e12017-07-28 15:18:29 -04003895Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
3896
Cary Clark493df1f2017-08-25 13:14:33 -04003897<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003898## getTextEncoding
3899
Cary Clarka560c472017-11-27 10:44:06 -05003900<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003901TextEncoding getTextEncoding() const
3902</pre>
3903
Cary Clark8cc16c72017-08-25 11:51:49 -04003904Returns <a href="#Text_Encoding">Text Encoding</a>.
3905<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 -04003906
3907### Return Value
3908
Cary Clark7cfcbca2018-01-04 16:11:51 -05003909one 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 -04003910<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003911
3912### Example
3913
3914<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
3915
3916#### Example Output
3917
3918~~~~
3919kUTF8_TextEncoding == text encoding
3920kGlyphID_TextEncoding == text encoding
3921~~~~
3922
3923</fiddle-embed></div>
3924
3925---
3926
Cary Clark493df1f2017-08-25 13:14:33 -04003927<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003928## setTextEncoding
3929
Cary Clarka560c472017-11-27 10:44:06 -05003930<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003931void setTextEncoding(TextEncoding encoding)
3932</pre>
3933
Cary Clark7cfcbca2018-01-04 16:11:51 -05003934Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003935<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
3936Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003937
3938### Parameters
3939
Cary Clark8cc16c72017-08-25 11:51:49 -04003940<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003941one 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 -04003942<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003943 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04003944#
3945
Cary Clark12799e12017-07-28 15:18:29 -04003946</table>
3947
3948### Example
3949
3950<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
3951
3952#### Example Output
3953
3954~~~~
39554 != text encoding
3956~~~~
3957
3958</fiddle-embed></div>
3959
3960---
3961
3962# <a name="Font_Metrics"></a> Font Metrics
Cary Clarkce101242017-09-01 15:51:02 -04003963<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 -05003964The 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 -04003965<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04003966
Cary Clark4c06f5e2017-08-04 12:48:24 -04003967<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 -04003968X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
3969are positive.
3970Y-axis values above the baseline are negative, and below the baseline are positive.
3971
3972### Example
3973
Ben Wagnere5806492017-11-09 12:08:31 -05003974<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003975
Cary Clark8cc16c72017-08-25 11:51:49 -04003976# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04003977
Cary Clarka560c472017-11-27 10:44:06 -05003978<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003979struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
3980enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
3981<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
3982<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
3983<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
3984<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04003985};
3986
Cary Clark8cc16c72017-08-25 11:51:49 -04003987uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
3988<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
3989<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
3990<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
3991<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
3992<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
3993<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
3994<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
3995<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
3996<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
3997<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
3998<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
3999<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4000<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4001<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4002<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004003
Cary Clark8cc16c72017-08-25 11:51:49 -04004004bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4005bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4006bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4007bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004008};</pre>
4009
Cary Clark154beea2017-10-26 07:58:48 -04004010<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
4011computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4012not available.
4013
Ben Wagnere5806492017-11-09 12:08:31 -05004014All vertical values relative to the baseline are given y-down. As such, zero is on the
4015baseline, negative values are above the baseline, and positive values are below the
4016baseline.
4017
Cary Clark154beea2017-10-26 07:58:48 -04004018<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
4019are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004020
Cary Clark154beea2017-10-26 07:58:48 -04004021<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
4022are valid, since their value may be zero.
4023
Cary Clark8cc16c72017-08-25 11:51:49 -04004024## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004025
Cary Clarka560c472017-11-27 10:44:06 -05004026<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004027enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4028<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4029<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4030<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4031<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004032};</pre>
4033
Cary Clark154beea2017-10-26 07:58:48 -04004034<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4035the underline or strikeout metric may be valid and zero.
4036Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4037
Cary Clark12799e12017-07-28 15:18:29 -04004038### Constants
4039
4040<table>
4041 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004042 <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 -04004043 </tr>
4044 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004045 <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 -04004046 </tr>
4047 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004048 <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 -04004049 </tr>
4050 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004051 <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 -04004052 </tr>
4053
4054</table>
4055
Cary Clark8cc16c72017-08-25 11:51:49 -04004056<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004057
Cary Clark8cc16c72017-08-25 11:51:49 -04004058<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004059
Cary Clark8cc16c72017-08-25 11:51:49 -04004060<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004061
Ben Wagnere5806492017-11-09 12:08:31 -05004062Greatest extent above the baseline for any glyph.
4063Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004064
Cary Clark8cc16c72017-08-25 11:51:49 -04004065<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004066
4067Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004068Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004069
Cary Clark8cc16c72017-08-25 11:51:49 -04004070<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004071
4072Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004073Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004074
Cary Clark8cc16c72017-08-25 11:51:49 -04004075<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004076
Ben Wagnere5806492017-11-09 12:08:31 -05004077Greatest extent below the baseline for any glyph.
4078Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004079
Cary Clark8cc16c72017-08-25 11:51:49 -04004080<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004081
4082Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004083Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004084
Cary Clark8cc16c72017-08-25 11:51:49 -04004085<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004086
4087Average character width, if it is available.
4088Zero if no average width is stored in the font.
4089
Cary Clark8cc16c72017-08-25 11:51:49 -04004090<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004091
4092Maximum character width.
4093
Cary Clark8cc16c72017-08-25 11:51:49 -04004094<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004095
Ben Wagnere5806492017-11-09 12:08:31 -05004096Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004097Typically less than zero.
4098
Cary Clark8cc16c72017-08-25 11:51:49 -04004099<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004100
Cary Clarkce101242017-09-01 15:51:02 -04004101Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004102Typically greater than zero.
4103
Cary Clark8cc16c72017-08-25 11:51:49 -04004104<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004105
4106Height of a lower-case 'x'.
4107May be zero if no lower-case height is stored in the font.
4108
Cary Clark8cc16c72017-08-25 11:51:49 -04004109<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004110
4111Height of an upper-case letter.
4112May be zero if no upper-case height is stored in the font.
4113
Cary Clark8cc16c72017-08-25 11:51:49 -04004114<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004115
Ben Wagnere5806492017-11-09 12:08:31 -05004116Underline thickness.
4117
4118If 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 -04004119If <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 -04004120
Cary Clark8cc16c72017-08-25 11:51:49 -04004121<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004122
Ben Wagnere5806492017-11-09 12:08:31 -05004123Position of the top of the underline stroke relative to the baseline.
4124Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004125
Cary Clark8cc16c72017-08-25 11:51:49 -04004126If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4127If <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 -04004128
Cary Clark8cc16c72017-08-25 11:51:49 -04004129<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004130
Ben Wagnere5806492017-11-09 12:08:31 -05004131Strikeout thickness.
4132
4133If 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 -04004134If <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 -04004135
Cary Clark8cc16c72017-08-25 11:51:49 -04004136<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004137
Ben Wagnere5806492017-11-09 12:08:31 -05004138Position of the bottom of the strikeout stroke relative to the baseline.
4139Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004140
Cary Clark8cc16c72017-08-25 11:51:49 -04004141If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4142If <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 -04004143
Cary Clark493df1f2017-08-25 13:14:33 -04004144<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004145## hasUnderlineThickness
4146
Cary Clarka560c472017-11-27 10:44:06 -05004147<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004148bool hasUnderlineThickness(SkScalar* thickness) const
4149</pre>
4150
Ben Wagnere5806492017-11-09 12:08:31 -05004151If <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 -04004152<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,
4153return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004154
4155### Parameters
4156
Cary Clark8cc16c72017-08-25 11:51:49 -04004157<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004158storage for underline width</td>
4159 </tr>
4160</table>
4161
4162### Return Value
4163
4164true if font specifies underline width
4165
4166---
4167
Cary Clark493df1f2017-08-25 13:14:33 -04004168<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004169## hasUnderlinePosition
4170
Cary Clarka560c472017-11-27 10:44:06 -05004171<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004172bool hasUnderlinePosition(SkScalar* position) const
4173</pre>
4174
Ben Wagnere5806492017-11-09 12:08:31 -05004175If <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 -04004176<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,
4177return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004178
4179### Parameters
4180
Cary Clark8cc16c72017-08-25 11:51:49 -04004181<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4182storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004183 </tr>
4184</table>
4185
4186### Return Value
4187
Cary Clark8cc16c72017-08-25 11:51:49 -04004188true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004189
4190---
4191
Cary Clark493df1f2017-08-25 13:14:33 -04004192<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004193## hasStrikeoutThickness
4194
Cary Clarka560c472017-11-27 10:44:06 -05004195<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004196bool hasStrikeoutThickness(SkScalar* thickness) const
4197</pre>
4198
Ben Wagnere5806492017-11-09 12:08:31 -05004199If <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 -04004200<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,
4201return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004202
4203### Parameters
4204
Cary Clark8cc16c72017-08-25 11:51:49 -04004205<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004206storage for strikeout width</td>
4207 </tr>
4208</table>
4209
4210### Return Value
4211
4212true if font specifies strikeout width
4213
4214---
4215
Cary Clark493df1f2017-08-25 13:14:33 -04004216<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004217## hasStrikeoutPosition
4218
Cary Clarka560c472017-11-27 10:44:06 -05004219<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004220bool hasStrikeoutPosition(SkScalar* position) const
4221</pre>
4222
Ben Wagnere5806492017-11-09 12:08:31 -05004223If <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 -04004224<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,
4225return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004226
4227### Parameters
4228
Cary Clark8cc16c72017-08-25 11:51:49 -04004229<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4230storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004231 </tr>
4232</table>
4233
4234### Return Value
4235
Cary Clark8cc16c72017-08-25 11:51:49 -04004236true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004237
4238---
4239
Cary Clark493df1f2017-08-25 13:14:33 -04004240<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004241## getFontMetrics
4242
Cary Clarka560c472017-11-27 10:44:06 -05004243<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004244SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4245</pre>
4246
Cary Clark8cc16c72017-08-25 11:51:49 -04004247Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4248The 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 -04004249descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004250If <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>.
4251Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4252dimensions 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>,
4253<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4254Results 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 -04004255is ignored.
4256
4257### Parameters
4258
Cary Clark8cc16c72017-08-25 11:51:49 -04004259<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4260storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4261 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004262additional multiplier for returned values</td>
4263 </tr>
4264</table>
4265
4266### Return Value
4267
4268recommended spacing between lines
4269
4270### Example
4271
4272<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4273
4274### See Also
4275
Cary Clark8cc16c72017-08-25 11:51:49 -04004276<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 -04004277
4278---
4279
Cary Clark493df1f2017-08-25 13:14:33 -04004280<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004281## getFontSpacing
4282
Cary Clarka560c472017-11-27 10:44:06 -05004283<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004284SkScalar getFontSpacing() const
4285</pre>
4286
4287Returns the recommended spacing between lines: the sum of metrics
4288descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004289Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004290dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004291Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004292
4293### Return Value
4294
4295recommended spacing between lines
4296
4297### Example
4298
4299<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4300
4301#### Example Output
4302
4303~~~~
4304textSize: 12 fontSpacing: 13.9688
4305textSize: 18 fontSpacing: 20.9531
4306textSize: 24 fontSpacing: 27.9375
4307textSize: 32 fontSpacing: 37.25
4308~~~~
4309
4310</fiddle-embed></div>
4311
4312---
4313
Cary Clark493df1f2017-08-25 13:14:33 -04004314<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004315## getFontBounds
4316
Cary Clarka560c472017-11-27 10:44:06 -05004317<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004318SkRect getFontBounds() const
4319</pre>
4320
Cary Clarkce101242017-09-01 15:51:02 -04004321Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004322Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004323ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4324and <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 -04004325
Cary Clark8cc16c72017-08-25 11:51:49 -04004326If <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 -05004327returns 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 -04004328<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 -04004329
4330### Return Value
4331
Cary Clarkce101242017-09-01 15:51:02 -04004332union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004333
4334### Example
4335
4336<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4337
4338#### Example Output
4339
4340~~~~
4341metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4342font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4343~~~~
4344
4345</fiddle-embed></div>
4346
4347---
4348
Cary Clark493df1f2017-08-25 13:14:33 -04004349<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004350## textToGlyphs
4351
Cary Clarka560c472017-11-27 10:44:06 -05004352<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004353int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4354</pre>
4355
Cary Clark8cc16c72017-08-25 11:51:49 -04004356Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4357Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4358<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>.
4359<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004360
Cary Clarkbc5697d2017-10-04 14:31:33 -04004361Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004362
Cary Clark8cc16c72017-08-25 11:51:49 -04004363If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4364If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004365
Cary Clark8cc16c72017-08-25 11:51:49 -04004366If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004367<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004368
4369### Parameters
4370
Cary Clark8cc16c72017-08-25 11:51:49 -04004371<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004372character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004373 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004374length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004375 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004376storage for glyph indices; may be nullptr</td>
4377 </tr>
4378</table>
4379
4380### Return Value
4381
Cary Clark8cc16c72017-08-25 11:51:49 -04004382number 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 -04004383
4384### Example
4385
4386<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4387
4388---
4389
Cary Clark493df1f2017-08-25 13:14:33 -04004390<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004391## countText
4392
Cary Clarka560c472017-11-27 10:44:06 -05004393<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004394int countText(const void* text, size_t byteLength) const
4395</pre>
4396
Cary Clarkce101242017-09-01 15:51:02 -04004397Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4398Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004399Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004400
4401### Parameters
4402
Cary Clark8cc16c72017-08-25 11:51:49 -04004403<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004404character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004405 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004406length of character storage in bytes</td>
4407 </tr>
4408</table>
4409
4410### Return Value
4411
Cary Clarkce101242017-09-01 15:51:02 -04004412number 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 -04004413
4414### Example
4415
4416<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4417
4418#### Example Output
4419
4420~~~~
4421count = 5
4422~~~~
4423
4424</fiddle-embed></div>
4425
4426---
4427
Cary Clark493df1f2017-08-25 13:14:33 -04004428<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004429## containsText
4430
Cary Clarka560c472017-11-27 10:44:06 -05004431<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004432bool containsText(const void* text, size_t byteLength) const
4433</pre>
4434
Cary Clark7cfcbca2018-01-04 16:11:51 -05004435Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004436Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004437<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004438
Cary Clark8cc16c72017-08-25 11:51:49 -04004439If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4440returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4441does 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 -04004442
Cary Clarkce101242017-09-01 15:51:02 -04004443Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004444
4445### Parameters
4446
Cary Clark8cc16c72017-08-25 11:51:49 -04004447<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004448array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004449 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4450number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004451 </tr>
4452</table>
4453
4454### Return Value
4455
Cary Clark8cc16c72017-08-25 11:51:49 -04004456true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004457
4458### Example
4459
Cary Clark8cc16c72017-08-25 11:51:49 -04004460<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 -05004461corresponding to the Unicode surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004462
4463#### Example Output
4464
4465~~~~
44660x00b0 == has char
44670xd800 != has char
4468~~~~
4469
4470</fiddle-embed></div>
4471
4472### Example
4473
Cary Clark8cc16c72017-08-25 11:51:49 -04004474<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 -04004475that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004476
4477#### Example Output
4478
4479~~~~
44800x01ff == has glyph
44810x0000 != has glyph
44820xffff == has glyph
4483~~~~
4484
4485</fiddle-embed></div>
4486
4487### See Also
4488
Cary Clark8cc16c72017-08-25 11:51:49 -04004489<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004490
4491---
4492
Cary Clark493df1f2017-08-25 13:14:33 -04004493<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004494## glyphsToUnichars
4495
Cary Clarka560c472017-11-27 10:44:06 -05004496<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004497void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4498</pre>
4499
Cary Clark7cfcbca2018-01-04 16:11:51 -05004500Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4501<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004502Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004503by <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 -04004504
Cary Clark7cfcbca2018-01-04 16:11:51 -05004505Only supported on platforms that use FreeType as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004506
4507### Parameters
4508
Cary Clark8cc16c72017-08-25 11:51:49 -04004509<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004510array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004511 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004512length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004513 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004514storage for character codes, one per glyph</td>
4515 </tr>
4516</table>
4517
4518### Example
4519
Cary Clark7cfcbca2018-01-04 16:11:51 -05004520<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 -04004521
4522---
4523
4524# <a name="Measure_Text"></a> Measure Text
4525
Cary Clark493df1f2017-08-25 13:14:33 -04004526<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004527## measureText
4528
Cary Clarka560c472017-11-27 10:44:06 -05004529<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004530SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4531</pre>
4532
Cary Clark8cc16c72017-08-25 11:51:49 -04004533Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4534and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4535The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4536Uses <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,
4537and <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
4538<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4539Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4540The 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 -04004541
4542### Parameters
4543
Cary Clark8cc16c72017-08-25 11:51:49 -04004544<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004545character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004546 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4547number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4548 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004549returns bounding box relative to (0, 0) if not nullptr</td>
4550 </tr>
4551</table>
4552
4553### Return Value
4554
4555advance width or height
4556
4557### Example
4558
4559<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4560
4561---
4562
Cary Clarka560c472017-11-27 10:44:06 -05004563<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004564SkScalar measureText(const void* text, size_t length) const
4565</pre>
4566
Cary Clark8cc16c72017-08-25 11:51:49 -04004567Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4568and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4569The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4570Uses <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,
4571and <a href="#Text_Size">Text Size</a> to scale the metrics.
4572Does 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 -04004573
4574### Parameters
4575
Cary Clark8cc16c72017-08-25 11:51:49 -04004576<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004577character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004578 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4579number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004580 </tr>
4581</table>
4582
4583### Return Value
4584
4585advance width or height
4586
4587### Example
4588
4589<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4590
4591#### Example Output
4592
4593~~~~
4594default width = 5
4595double width = 10
4596~~~~
4597
4598</fiddle-embed></div>
4599
4600---
4601
Cary Clark493df1f2017-08-25 13:14:33 -04004602<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004603## breakText
4604
Cary Clarka560c472017-11-27 10:44:06 -05004605<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004606size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004607 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004608</pre>
4609
Cary Clark8cc16c72017-08-25 11:51:49 -04004610Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4611If <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
4612equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4613If <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
4614equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4615Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4616Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4617Uses <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,
4618and <a href="#Text_Size">Text Size</a> to scale the metrics.
4619Does 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 -04004620
4621### Parameters
4622
Cary Clark8cc16c72017-08-25 11:51:49 -04004623<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004624character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004625 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4626number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4627 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4628advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4629 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4630returns 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 -04004631 </tr>
4632</table>
4633
4634### Return Value
4635
Cary Clark8cc16c72017-08-25 11:51:49 -04004636bytes 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 -04004637
4638### Example
4639
Cary Clark4c06f5e2017-08-04 12:48:24 -04004640<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 -04004641<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 -04004642
4643---
4644
Cary Clark493df1f2017-08-25 13:14:33 -04004645<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004646## getTextWidths
4647
Cary Clarka560c472017-11-27 10:44:06 -05004648<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4649int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004650</pre>
4651
Cary Clark8cc16c72017-08-25 11:51:49 -04004652Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4653the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4654Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4655If <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 -05004656if <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 -04004657If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4658If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4659Uses <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,
4660and <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>.
4661Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4662Does 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 -04004663
4664### Parameters
4665
Cary Clark8cc16c72017-08-25 11:51:49 -04004666<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004667character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004668 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4669number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4670 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4671returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4672 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4673returns <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 -04004674 </tr>
4675</table>
4676
4677### Return Value
4678
Cary Clark8cc16c72017-08-25 11:51:49 -04004679glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004680
4681### Example
4682
Cary Clarkce101242017-09-01 15:51:02 -04004683<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 -04004684The 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 -04004685
4686---
4687
4688# <a name="Text_Path"></a> Text Path
Cary Clarkce101242017-09-01 15:51:02 -04004689<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 -04004690
Cary Clark493df1f2017-08-25 13:14:33 -04004691<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004692## getTextPath
4693
Cary Clarka560c472017-11-27 10:44:06 -05004694<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4695void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004696</pre>
4697
Cary Clark8cc16c72017-08-25 11:51:49 -04004698Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4699Uses <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,
4700and <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.
4701All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4702Uses <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 -04004703
4704### Parameters
4705
Cary Clark8cc16c72017-08-25 11:51:49 -04004706<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004707character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004708 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4709number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4710 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004711<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 -04004712 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004713<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 -04004714 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004715geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004716 </tr>
4717</table>
4718
4719### Example
4720
Cary Clark4c06f5e2017-08-04 12:48:24 -04004721<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 -04004722the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4723
4724---
4725
Cary Clark493df1f2017-08-25 13:14:33 -04004726<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004727## getPosTextPath
4728
Cary Clarka560c472017-11-27 10:44:06 -05004729<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4730void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004731</pre>
4732
Cary Clark8cc16c72017-08-25 11:51:49 -04004733Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4734Uses <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,
4735and <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.
4736All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4737Uses <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>.
4738<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004739
4740### Parameters
4741
Cary Clark8cc16c72017-08-25 11:51:49 -04004742<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004743character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004744 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4745number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4746 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004747positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004748 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004749geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004750 </tr>
4751</table>
4752
4753### Example
4754
Cary Clarkce101242017-09-01 15:51:02 -04004755<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 -04004756
4757---
4758
4759# <a name="Text_Intercepts"></a> Text Intercepts
Cary Clarkce101242017-09-01 15:51:02 -04004760<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 -04004761of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004762underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004763
Cary Clark493df1f2017-08-25 13:14:33 -04004764<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004765## getTextIntercepts
4766
Cary Clarka560c472017-11-27 10:44:06 -05004767<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004768int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4769 const SkScalar bounds[2], SkScalar* intervals) const
4770</pre>
4771
Cary Clark8cc16c72017-08-25 11:51:49 -04004772Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4773<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 -04004774The 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 -05004775the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004776Uses <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,
4777and <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.
4778Uses <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>.
4779Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4780<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004781
4782### Parameters
4783
Cary Clark8cc16c72017-08-25 11:51:49 -04004784<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004785character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004786 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4787number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4788 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004789<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 -04004790 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004791<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 -04004792 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004793lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004794 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004795returned intersections; may be nullptr</td>
4796 </tr>
4797</table>
4798
4799### Return Value
4800
4801number of intersections; may be zero
4802
4803### Example
4804
Cary Clarkce101242017-09-01 15:51:02 -04004805<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 -04004806
4807---
4808
Cary Clark493df1f2017-08-25 13:14:33 -04004809<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004810## getPosTextIntercepts
4811
Cary Clarka560c472017-11-27 10:44:06 -05004812<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004813int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4814 const SkScalar bounds[2], SkScalar* intervals) const
4815</pre>
4816
Cary Clark8cc16c72017-08-25 11:51:49 -04004817Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4818<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 -04004819The 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 -05004820the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004821Uses <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,
4822and <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.
4823Uses <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>.
4824Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4825<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004826
4827### Parameters
4828
Cary Clark8cc16c72017-08-25 11:51:49 -04004829<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004830character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004831 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4832number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4833 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004834positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004835 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004836lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004837 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004838returned intersections; may be nullptr</td>
4839 </tr>
4840</table>
4841
4842### Return Value
4843
Cary Clarka523d2d2017-08-30 08:58:10 -04004844number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004845
4846### Example
4847
Cary Clarkce101242017-09-01 15:51:02 -04004848<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 -04004849
4850---
4851
Cary Clark493df1f2017-08-25 13:14:33 -04004852<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004853## getPosTextHIntercepts
4854
Cary Clarka560c472017-11-27 10:44:06 -05004855<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4856int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4857 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004858</pre>
4859
Cary Clark8cc16c72017-08-25 11:51:49 -04004860Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4861<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 -04004862The 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 -05004863the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004864Uses <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,
4865and <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.
4866Uses <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>.
4867Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4868<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004869
4870### Parameters
4871
Cary Clark8cc16c72017-08-25 11:51:49 -04004872<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004873character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004874 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4875number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4876 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004877positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004878 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004879position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004880 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004881lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004882 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004883returned intersections; may be nullptr</td>
4884 </tr>
4885</table>
4886
4887### Return Value
4888
4889number of intersections; may be zero
4890
4891### Example
4892
Cary Clark4c06f5e2017-08-04 12:48:24 -04004893<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 -04004894
4895---
4896
Cary Clark493df1f2017-08-25 13:14:33 -04004897<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004898## getTextBlobIntercepts
4899
Cary Clarka560c472017-11-27 10:44:06 -05004900<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4901int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004902</pre>
4903
Cary Clark8cc16c72017-08-25 11:51:49 -04004904Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4905<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04004906The 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 -05004907the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004908Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04004909and <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 -04004910Uses 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 -05004911<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
4912
Cary Clark8cc16c72017-08-25 11:51:49 -04004913Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
4914<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004915
4916### Parameters
4917
Cary Clark8cc16c72017-08-25 11:51:49 -04004918<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004919<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004920 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004921lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004922 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004923returned intersections; may be nullptr</td>
4924 </tr>
4925</table>
4926
4927### Return Value
4928
4929number of intersections; may be zero
4930
4931### Example
4932
Cary Clark3cd22cc2017-12-01 11:49:58 -05004933<div><fiddle-embed name="71959a66b2290d70003887c0de339266"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004934
4935---
4936
Cary Clark493df1f2017-08-25 13:14:33 -04004937<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004938## nothingToDraw
4939
Cary Clarka560c472017-11-27 10:44:06 -05004940<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004941bool nothingToDraw() const
4942</pre>
4943
Cary Clark8cc16c72017-08-25 11:51:49 -04004944Returns true if <a href="#Paint">Paint</a> prevents all drawing;
4945otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004946
Cary Clarkce101242017-09-01 15:51:02 -04004947Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
4948new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004949
4950### Return Value
4951
Cary Clark8cc16c72017-08-25 11:51:49 -04004952true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004953
4954### Example
4955
4956<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
4957
4958#### Example Output
4959
4960~~~~
4961initial nothing to draw: false
4962blend dst nothing to draw: true
4963blend src over nothing to draw: false
4964alpha 0 nothing to draw: true
4965~~~~
4966
4967</fiddle-embed></div>
4968
4969---
4970
4971# <a name="Fast_Bounds"></a> Fast Bounds
Cary Clark8cc16c72017-08-25 11:51:49 -04004972<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
4973<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04004974
Cary Clark493df1f2017-08-25 13:14:33 -04004975<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004976## canComputeFastBounds
4977
Cary Clarka560c472017-11-27 10:44:06 -05004978<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004979bool canComputeFastBounds() const
4980</pre>
4981
Cary Clark8cc16c72017-08-25 11:51:49 -04004982Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
4983to 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 -04004984always returns false.
4985
4986### Return Value
4987
Cary Clark8cc16c72017-08-25 11:51:49 -04004988true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04004989
4990---
4991
Cary Clark493df1f2017-08-25 13:14:33 -04004992<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004993## computeFastBounds
4994
Cary Clarka560c472017-11-27 10:44:06 -05004995<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004996const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
4997</pre>
4998
Cary Clark8cc16c72017-08-25 11:51:49 -04004999Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005000raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005001effects 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 -04005002parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005003for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005004
Cary Clarkbc5697d2017-10-04 14:31:33 -04005005The 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 -04005006should 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 -04005007use 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 -04005008<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005009
5010### Parameters
5011
Cary Clark8cc16c72017-08-25 11:51:49 -04005012<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5013geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5014 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005015computed bounds of geometry; may not be nullptr</td>
5016 </tr>
5017</table>
5018
5019### Return Value
5020
5021fast computed bounds
5022
5023---
5024
Cary Clark493df1f2017-08-25 13:14:33 -04005025<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005026## computeFastStrokeBounds
5027
Cary Clarka560c472017-11-27 10:44:06 -05005028<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005029const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5030</pre>
5031
5032### Parameters
5033
Cary Clark8cc16c72017-08-25 11:51:49 -04005034<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5035geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5036 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005037computed bounds of geometry</td>
5038 </tr>
5039</table>
5040
5041### Return Value
5042
5043fast computed bounds
5044
5045---
5046
Cary Clark493df1f2017-08-25 13:14:33 -04005047<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005048## doComputeFastBounds
5049
Cary Clarka560c472017-11-27 10:44:06 -05005050<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5051const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005052</pre>
5053
Cary Clarkce101242017-09-01 15:51:02 -04005054Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5055account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5056altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005057
5058### Parameters
5059
Cary Clark8cc16c72017-08-25 11:51:49 -04005060<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5061geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5062 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005063computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005064 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5065overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005066 </tr>
5067</table>
5068
5069### Return Value
5070
5071fast computed bounds
5072
5073---
5074
Cary Clark493df1f2017-08-25 13:14:33 -04005075<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005076## toString
5077
Cary Clarka560c472017-11-27 10:44:06 -05005078<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005079void toString(SkString* str) const;
5080</pre>
5081
Cary Clarkce101242017-09-01 15:51:02 -04005082Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5083internal debugging tools. The interface and implementation may be
Cary Clark7cfcbca2018-01-04 16:11:51 -05005084suppressed by defining SK_IGNORE_TO_STRING.
Cary Clark12799e12017-07-28 15:18:29 -04005085
5086### Parameters
5087
Cary Clark8cc16c72017-08-25 11:51:49 -04005088<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005089storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005090 </tr>
5091</table>
5092
5093### Example
5094
5095<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5096
5097#### Example Output
5098
5099~~~~
5100text size = 12
5101~~~~
5102
5103</fiddle-embed></div>
5104
Cary Clark2ade9972017-11-02 17:49:34 -04005105### See Also
5106
5107<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>
5108
Cary Clark12799e12017-07-28 15:18:29 -04005109---
5110