blob: c3c4063298cd43284f2c3673aec635747e68b2c0 [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
10Various options apply to text, strokes and fills, and images.
11
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 Clark8cc16c72017-08-25 11:51:49 -040019<a href="#Paint">Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040020algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark8cc16c72017-08-25 11:51:49 -040021<a href="#Paint">Paint</a> does not directly implement dashing or blur, but contains the objects that do so.
Cary Clark12799e12017-07-28 15:18:29 -040022
Cary 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 Clark8cc16c72017-08-25 11:51:49 -040025<a href="#Paint">Paint</a>, or ignore them altogether. For instance, some <a href="undocumented#GPU">GPU</a> implementations draw all
Cary Clarkce101242017-09-01 15:51:02 -040026<a href="SkPath_Reference#Path">Path</a> geometries with <a href="undocumented#Anti_alias">Anti-aliasing</a>, 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 Clarkce101242017-09-01 15:51:02 -040040| <a href="undocumented#Destructor">Destructor</a> | <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 Clark4c06f5e2017-08-04 12:48:24 -040044| <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> | Approximating coverage with transparency. |
Cary Clark8cc16c72017-08-25 11:51:49 -040045| <a href="#Dither">Dither</a> | Distributing color error. |
46| <a href="#Device_Text">Device Text</a> | Increase precision of glyph position. |
Cary Clarkce101242017-09-01 15:51:02 -040047| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | Custom sized bitmap <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040048| <a href="#Automatic_Hinting">Automatic Hinting</a> | Always adjust glyph paths. |
49| <a href="#Vertical_Text">Vertical Text</a> | Orient text from top to bottom. |
50| <a href="#Fake_Bold">Fake Bold</a> | Approximate font styles. |
Cary Clark4c06f5e2017-08-04 12:48:24 -040051| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | <a href="undocumented#Glyph">Glyph</a> spacing affected by hinting. |
Cary Clark8cc16c72017-08-25 11:51:49 -040052| <a href="#Filter_Quality_Methods">Filter Quality Methods</a> | Get and set <a href="undocumented#Filter_Quality">Filter Quality</a>. |
53| <a href="#Color_Methods">Color Methods</a> | Get and set <a href="undocumented#Color">Color</a>. |
54| <a href="#SkPaint_Style">Style</a> | Geometry filling, stroking. |
55| <a href="#Stroke_Width">Stroke Width</a> | Thickness perpendicular to geometry. |
56| <a href="#Miter_Limit">Miter Limit</a> | Maximum length of stroked corners. |
57| <a href="#Stroke_Cap">Stroke Cap</a> | Decorations at ends of open strokes. |
58| <a href="#Stroke_Join">Stroke Join</a> | Decoration at corners of strokes. |
59| <a href="#Fill_Path">Fill Path</a> | Make <a href="SkPath_Reference#Path">Path</a> from <a href="undocumented#Path_Effect">Path Effect</a>, stroking. |
60| <a href="#Shader_Methods">Shader Methods</a> | Get and set <a href="undocumented#Shader">Shader</a>. |
61| <a href="#Color_Filter_Methods">Color Filter Methods</a> | Get and set <a href="undocumented#Color_Filter">Color Filter</a>. |
62| <a href="#Blend_Mode_Methods">Blend Mode Methods</a> | Get and set <a href="undocumented#Blend_Mode">Blend Mode</a>. |
63| <a href="#Path_Effect_Methods">Path Effect Methods</a> | Get and set <a href="undocumented#Path_Effect">Path Effect</a>. |
64| <a href="#Mask_Filter_Methods">Mask Filter Methods</a> | Get and set <a href="undocumented#Mask_Filter">Mask Filter</a>. |
65| <a href="#Typeface_Methods">Typeface Methods</a> | Get and set <a href="undocumented#Typeface">Typeface</a>. |
66| <a href="#Rasterizer_Methods">Rasterizer Methods</a> | Get and set <a href="undocumented#Rasterizer">Rasterizer</a>. |
67| <a href="#Image_Filter_Methods">Image Filter Methods</a> | Get and set <a href="undocumented#Image_Filter">Image Filter</a>. |
68| <a href="#Draw_Looper_Methods">Draw Looper Methods</a> | Get and set <a href="undocumented#Draw_Looper">Draw Looper</a>. |
69| <a href="#Text_Align">Text Align</a> | <a href="undocumented#Text">Text</a> placement relative to position. |
70| <a href="#Text_Size">Text Size</a> | Overall height in points. |
71| <a href="#Text_Scale_X">Text Scale X</a> | <a href="undocumented#Text">Text</a> horizontal scale. |
72| <a href="#Text_Skew_X">Text Skew X</a> | <a href="undocumented#Text">Text</a> horizontal slant. |
Cary Clarkce101242017-09-01 15:51:02 -040073| <a href="#Text_Encoding">Text Encoding</a> | <a href="undocumented#Text">Text</a> encoded as characters or <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040074| <a href="#Font_Metrics">Font Metrics</a> | Common glyph dimensions. |
75| <a href="#Measure_Text">Measure Text</a> | Width, height, bounds of text. |
Cary Clarkce101242017-09-01 15:51:02 -040076| <a href="#Text_Path">Text Path</a> | Geometry of <a href="#Glyph">Glyphs</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -040077| <a href="#Text_Intercepts">Text Intercepts</a> | Advanced underline, strike through. |
Cary Clarkce101242017-09-01 15:51:02 -040078| <a href="#Fast_Bounds">Fast Bounds</a> | Approximate area required by <a href="#Paint">Paint</a>. |
Cary Clark12799e12017-07-28 15:18:29 -040079
80## <a name="Constants"></a> Constants
81
82| constants | description |
83| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040084| <a href="#SkPaint_Align">Align</a> | <a href="undocumented#Glyph">Glyph</a> locations relative to text position. |
85| <a href="#SkPaint_Cap">Cap</a> | Start and end geometry on stroked shapes. |
86| <a href="#SkPaint_Flags">Flags</a> | Values described by bits and masks. |
87| <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetrics::FontMetricsFlags</a> | Valid <a href="#Font_Metrics">Font Metrics</a>. |
88| <a href="#SkPaint_Hinting">Hinting</a> | Level of glyph outline adjustment. |
89| <a href="#SkPaint_Join">Join</a> | Corner geometry on stroked shapes. |
90| <a href="#SkPaint_Style">Style</a> | Stroke, fill, or both. |
Cary Clarkbc5697d2017-10-04 14:31:33 -040091| <a href="#SkPaint_TextEncoding">TextEncoding</a> | Character or glyph encoded size. |
Cary Clark12799e12017-07-28 15:18:29 -040092
93## <a name="Structs"></a> Structs
94
95| struct | description |
96| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -040097| <a href="#SkPaint_FontMetrics">FontMetrics</a> | <a href="undocumented#Typeface">Typeface</a> values. |
Cary Clark12799e12017-07-28 15:18:29 -040098
99## <a name="Constructors"></a> Constructors
100
101| | description |
102| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400103| <a href="#SkPaint_empty_constructor">SkPaint()</a> | Constructs with default values. |
Cary Clark73fa9722017-08-29 17:36:51 -0400104| <a href="#SkPaint_copy_const_SkPaint">SkPaint(const SkPaint& paint)</a> | Makes a shallow copy. |
105| <a href="#SkPaint_move_SkPaint">SkPaint(SkPaint&& paint)</a> | Moves paint without copying it. |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400106| | Decreases <a href="undocumented#Reference_Count">Reference Count</a> of owned objects. |
Cary Clark12799e12017-07-28 15:18:29 -0400107
108## <a name="Operators"></a> Operators
109
110| operator | description |
111| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400112| <a href="#SkPaint_copy_assignment_operator">operator=(const SkPaint& paint)</a> | Makes a shallow copy. |
113| <a href="#SkPaint_move_assignment_operator">operator=(SkPaint&& paint)</a> | Moves paint without copying it. |
114| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | Compares paints for equality. |
115| <a href="#SkPaint_not_equal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | Compares paints for inequality. |
Cary Clark12799e12017-07-28 15:18:29 -0400116
117## <a name="Member_Functions"></a> Member Functions
118
119| function | description |
120| --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400121| <a href="#SkPaint_breakText">breakText</a> | Returns text that fits in a width. |
122| <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> | Returns true if settings allow for fast bounds computation. |
123| <a href="#SkPaint_computeFastBounds">computeFastBounds</a> | Returns fill bounds for quick reject tests. |
124| <a href="#SkPaint_computeFastStrokeBounds">computeFastStrokeBounds</a> | Returns stroke bounds for quick reject tests. |
Cary Clarkce101242017-09-01 15:51:02 -0400125| <a href="#SkPaint_containsText">containsText</a> | Returns if all text corresponds to <a href="#Glyph">Glyphs</a>. |
126| <a href="#SkPaint_countText">countText</a> | Returns number of <a href="#Glyph">Glyphs</a> in text. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400127| <a href="#SkPaint_doComputeFastBounds">doComputeFastBounds</a> | Returns bounds for quick reject tests. |
128| <a href="#SkPaint_flatten">flatten</a> | Serializes into a buffer. |
129| <a href="#SkPaint_getAlpha">getAlpha</a> | Returns <a href="#Alpha">Color Alpha</a>, color opacity. |
Cary Clarkce101242017-09-01 15:51:02 -0400130| <a href="#SkPaint_getBlendMode">getBlendMode</a> | Returns <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with <a href="undocumented#Device">Device</a>. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400131| <a href="#SkPaint_getColor">getColor</a> | Returns <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color. |
132| <a href="#SkPaint_getColorFilter">getColorFilter</a> | Returns <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered. |
133| <a href="#SkPaint_getDrawLooper">getDrawLooper</a> | Returns <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
134| <a href="#SkPaint_getFillPath">getFillPath</a> | Returns fill path equivalent to stroke. |
135| <a href="#SkPaint_getFilterQuality">getFilterQuality</a> | Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, image filtering level. |
136| <a href="#SkPaint_getFlags">getFlags</a> | Returns <a href="#SkPaint_Flags">Flags</a> stored in a bit field. |
137| <a href="#SkPaint_getFontBounds">getFontBounds</a> | Returns union all glyph bounds. |
138| <a href="#SkPaint_getFontMetrics">getFontMetrics</a> | Returns <a href="undocumented#Typeface">Typeface</a> metrics scaled by text size. |
139| <a href="#SkPaint_getFontSpacing">getFontSpacing</a> | Returns recommended spacing between lines. |
140| <a href="#SkPaint_getHash">getHash</a> | Returns a shallow hash for equality checks. |
141| <a href="#SkPaint_getHinting">getHinting</a> | Returns <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level. |
142| <a href="#SkPaint_getImageFilter">getImageFilter</a> | Returns <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
143| <a href="#SkPaint_getMaskFilter">getMaskFilter</a> | Returns <a href="undocumented#Mask_Filter">Mask Filter</a>, alterations to <a href="undocumented#Mask_Alpha">Mask Alpha</a>. |
144| <a href="#SkPaint_getPathEffect">getPathEffect</a> | Returns <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
145| <a href="#SkPaint_getPosTextPath">getPosTextPath</a> | Returns <a href="SkPath_Reference#Path">Path</a> equivalent to positioned text. |
146| <a href="#SkPaint_getPosTextIntercepts">getPosTextIntercepts</a> | Returns where lines intersect positioned text; underlines. |
147| <a href="#SkPaint_getPosTextHIntercepts">getPosTextHIntercepts</a> | Returns where lines intersect horizontally positioned text; underlines. |
148| <a href="#SkPaint_getRasterizer">getRasterizer</a> | Returns <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Mask_Alpha">Mask Alpha</a> generation from <a href="SkPath_Reference#Path">Path</a>. |
149| <a href="#SkPaint_getShader">getShader</a> | Returns <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
150| <a href="#SkPaint_getStrokeCap">getStrokeCap</a> | Returns <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends. |
151| <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a> | Returns <a href="#SkPaint_Join">Join</a>, geometry on path corners. |
152| <a href="#SkPaint_getStrokeMiter">getStrokeMiter</a> | Returns <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners. |
153| <a href="#SkPaint_getStrokeWidth">getStrokeWidth</a> | Returns thickness of the stroke. |
154| <a href="#SkPaint_getStyle">getStyle</a> | Returns <a href="#SkPaint_Style">Style</a>: stroke, fill, or both. |
155| <a href="#SkPaint_getTextAlign">getTextAlign</a> | Returns <a href="#SkPaint_Align">Align</a>: left, center, or right. |
156| <a href="#SkPaint_getTextBlobIntercepts">getTextBlobIntercepts</a> | Returns where lines intersect <a href="undocumented#Text_Blob">Text Blob</a>; underlines. |
Cary Clarkbc5697d2017-10-04 14:31:33 -0400157| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | Returns character or glyph encoded size. b |
Cary Clark8cc16c72017-08-25 11:51:49 -0400158| <a href="#SkPaint_getTextIntercepts">getTextIntercepts</a> | Returns where lines intersect text; underlines. |
159| <a href="#SkPaint_getTextPath">getTextPath</a> | Returns <a href="SkPath_Reference#Path">Path</a> equivalent to text. |
160| <a href="#SkPaint_getTextScaleX">getTextScaleX</a> | Returns the text horizontal scale; condensed text. |
161| <a href="#SkPaint_getTextSkewX">getTextSkewX</a> | Returns the text horizontal skew; oblique text. |
162| <a href="#SkPaint_getTextSize">getTextSize</a> | Returns text size in points. |
163| <a href="#SkPaint_getTextWidths">getTextWidths</a> | Returns advance and bounds for each glyph in text. |
164| <a href="#SkPaint_getTypeface">getTypeface</a> | Returns <a href="undocumented#Typeface">Typeface</a>, font description. |
Cary Clarkce101242017-09-01 15:51:02 -0400165| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | Converts <a href="#Glyph">Glyphs</a> into text. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400166| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | Returns true if <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is set. |
Cary Clarkce101242017-09-01 15:51:02 -0400167| <a href="#SkPaint_isAutohinted">isAutohinted</a> | Returns true if <a href="#Glyph">Glyphs</a> are always hinted. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400168| <a href="#SkPaint_isDevKernText">isDevKernText</a> | Returns true if <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is set. |
169| <a href="#SkPaint_isDither">isDither</a> | Returns true if <a href="#Dither">Dither</a> is set. |
170| <a href="#SkPaint_isEmbeddedBitmapText">isEmbeddedBitmapText</a> | Returns true if <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is set. |
171| <a href="#SkPaint_isFakeBoldText">isFakeBoldText</a> | Returns true if <a href="#Fake_Bold">Fake Bold</a> is set. |
172| <a href="#SkPaint_isLCDRenderText">isLCDRenderText</a> | Returns true if <a href="SkPaint_Reference#LCD_Text">LCD Text</a> is set. |
173| <a href="#SkPaint_isSrcOver">isSrcOver</a> | Returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>. |
174| <a href="#SkPaint_isSubpixelText">isSubpixelText</a> | Returns true if <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is set. |
175| <a href="#SkPaint_isVerticalText">isVerticalText</a> | Returns true if <a href="#Vertical_Text">Vertical Text</a> is set. |
176| <a href="#SkPaint_measureText">measureText</a> | Returns advance width and bounds of text. |
177| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | Returns true if <a href="#Paint">Paint</a> prevents all drawing. |
178| <a href="#SkPaint_refColorFilter">refColorFilter</a> | References <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered. |
179| <a href="#SkPaint_refDrawLooper">refDrawLooper</a> | References <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
180| <a href="#SkPaint_refImageFilter">refImageFilter</a> | References <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
181| <a href="#SkPaint_refMaskFilter">refMaskFilter</a> | References <a href="undocumented#Mask_Filter">Mask Filter</a>, alterations to <a href="undocumented#Mask_Alpha">Mask Alpha</a>. |
182| <a href="#SkPaint_refPathEffect">refPathEffect</a> | References <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
183| <a href="#SkPaint_refRasterizer">refRasterizer</a> | References <a href="undocumented#Rasterizer">Rasterizer</a>, mask generation from path. |
184| <a href="#SkPaint_refShader">refShader</a> | References <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
185| <a href="#SkPaint_refTypeface">refTypeface</a> | References <a href="undocumented#Typeface">Typeface</a>, font description. |
186| <a href="#SkPaint_reset">reset</a> | Sets to default values. |
187| <a href="#SkPaint_setAlpha">setAlpha</a> | Sets <a href="#Alpha">Color Alpha</a>, color opacity. |
188| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | Sets or clears <a href="SkPaint_Reference#Anti_alias">Anti-alias</a>. |
189| <a href="#SkPaint_setARGB">setARGB</a> | Sets color by component. |
Cary Clarkce101242017-09-01 15:51:02 -0400190| <a href="#SkPaint_setAutohinted">setAutohinted</a> | Sets <a href="#Glyph">Glyphs</a> to always be hinted. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400191| <a href="#SkPaint_setBlendMode">setBlendMode</a> | Sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination. |
192| <a href="#SkPaint_setColor">setColor</a> | Sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color. |
193| <a href="#SkPaint_setColorFilter">setColorFilter</a> | Sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color. |
194| <a href="#SkPaint_setDevKernText">setDevKernText</a> | Sets or clears <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a>. |
195| <a href="#SkPaint_setDither">setDither</a> | Sets or clears <a href="#Dither">Dither</a>. |
196| <a href="#SkPaint_setDrawLooper">setDrawLooper</a> | Sets <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers. |
197| <a href="#SkPaint_setEmbeddedBitmapText">setEmbeddedBitmapText</a> | Sets or clears <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a>. |
198| <a href="#SkPaint_setFakeBoldText">setFakeBoldText</a> | Sets or clears <a href="#Fake_Bold">Fake Bold</a>. |
199| <a href="#SkPaint_setFilterQuality">setFilterQuality</a> | Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. |
200| <a href="#SkPaint_setFlags">setFlags</a> | Sets multiple <a href="#SkPaint_Flags">Flags</a> in a bit field. |
201| <a href="#SkPaint_setHinting">setHinting</a> | Sets <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level. |
202| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | Sets or clears <a href="SkPaint_Reference#LCD_Text">LCD Text</a>. |
203| <a href="#SkPaint_setMaskFilter">setMaskFilter</a> | Sets <a href="undocumented#Mask_Filter">Mask Filter</a>, alterations to <a href="undocumented#Mask_Alpha">Mask Alpha</a>. |
204| <a href="#SkPaint_setPathEffect">setPathEffect</a> | Sets <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing. |
205| <a href="#SkPaint_setRasterizer">setRasterizer</a> | Sets <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Mask_Alpha">Mask Alpha</a> generation from <a href="SkPath_Reference#Path">Path</a>. |
206| <a href="#SkPaint_setImageFilter">setImageFilter</a> | Sets <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur. |
207| <a href="#SkPaint_setShader">setShader</a> | Sets <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients. |
208| <a href="#SkPaint_setStrokeCap">setStrokeCap</a> | Sets <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends. |
209| <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a> | Sets <a href="#SkPaint_Join">Join</a>, geometry on path corners. |
210| <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> | Sets <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners. |
211| <a href="#SkPaint_setStrokeWidth">setStrokeWidth</a> | Sets thickness of the stroke. |
212| <a href="#SkPaint_setStyle">setStyle</a> | Sets <a href="#SkPaint_Style">Style</a>: stroke, fill, or both. |
213| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | Sets or clears <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>. |
214| <a href="#SkPaint_setTextAlign">setTextAlign</a> | Sets <a href="#SkPaint_Align">Align</a>: left, center, or right. |
Cary Clarkbc5697d2017-10-04 14:31:33 -0400215| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | Sets character or glyph encoded size. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400216| <a href="#SkPaint_setTextScaleX">setTextScaleX</a> | Sets the text horizontal scale; condensed text. |
217| <a href="#SkPaint_setTextSkewX">setTextSkewX</a> | Sets the text horizontal skew; oblique text. |
218| <a href="#SkPaint_setTextSize">setTextSize</a> | Sets text size in points. |
219| <a href="#SkPaint_setTypeface">setTypeface</a> | Sets <a href="undocumented#Typeface">Typeface</a>, font description. |
220| <a href="#SkPaint_setVerticalText">setVerticalText</a> | Sets or clears <a href="#Vertical_Text">Vertical Text</a>. |
221| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | Converts text into glyph indices. |
Cary Clarkce101242017-09-01 15:51:02 -0400222| <a href="#SkPaint_toString">toString</a> | Converts <a href="#Paint">Paint</a> to machine readable form. |
Cary Clark8cc16c72017-08-25 11:51:49 -0400223| <a href="#SkPaint_unflatten">unflatten</a> | Populates from a serialized stream. |
Cary Clark12799e12017-07-28 15:18:29 -0400224
225# <a name="Initializers"></a> Initializers
226
Cary Clark493df1f2017-08-25 13:14:33 -0400227<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400228## SkPaint
229
230<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
231SkPaint()
232</pre>
233
Cary Clark8cc16c72017-08-25 11:51:49 -0400234Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400235
236| attribute | default value |
237| --- | --- |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400238| <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400239| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400240| <a href="undocumented#Color">Color</a> | <a href="undocumented#SK_ColorBLACK">SK ColorBLACK</a> |
Cary Clark8cc16c72017-08-25 11:51:49 -0400241| <a href="#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400242| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400243| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400244| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400245| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400246| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> |
247| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400248| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400249| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400250| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400251| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
252| <a href="SkPaint_Reference#LCD_Text">LCD Text</a> | false |
253| <a href="SkPaint_Reference#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400254| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400255| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
256| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
257| <a href="undocumented#Rasterizer">Rasterizer</a> | nullptr |
258| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400259| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
260| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
261| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
262| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
263| <a href="#Text_Size">Text Size</a> | 12 |
264| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400265| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400266| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
267| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
268| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400269| <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400270| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400271
272The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clarkce101242017-09-01 15:51:02 -0400273paint default values. The overrides may be included in "<a href="undocumented#SkUserConfig">SkUserConfig</a>.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400274build system.
275
276### Return Value
277
Cary Clark8cc16c72017-08-25 11:51:49 -0400278default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400279
280### Example
281
282<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
283
284---
285
Cary Clark73fa9722017-08-29 17:36:51 -0400286<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400287## SkPaint
288
289<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
290SkPaint(const SkPaint& paint)
291</pre>
292
Cary Clark8cc16c72017-08-25 11:51:49 -0400293Makes a shallow copy of <a href="#Paint">Paint</a>. <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400294<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clark73fa9722017-08-29 17:36:51 -0400295between the original <a href="#SkPaint_copy_const_SkPaint_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> increment
Cary Clarkbad5ad72017-08-03 17:14:08 -0400296their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400297
Cary Clark4c06f5e2017-08-04 12:48:24 -0400298The referenced objects <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>,
299<a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> cannot be modified after they are created.
Cary Clark8cc16c72017-08-25 11:51:49 -0400300This prevents objects with <a href="undocumented#Reference_Count">Reference Count</a> from being modified once <a href="#Paint">Paint</a> refers to them.
Cary Clark12799e12017-07-28 15:18:29 -0400301
302### Parameters
303
Cary Clark73fa9722017-08-29 17:36:51 -0400304<table> <tr> <td><a name="SkPaint_copy_const_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400305original to copy</td>
306 </tr>
307</table>
308
309### Return Value
310
Cary Clark73fa9722017-08-29 17:36:51 -0400311shallow copy of <a href="#SkPaint_copy_const_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400312
313### Example
314
315<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
316
317#### Example Output
318
319~~~~
320SK_ColorRED == paint1.getColor()
321SK_ColorBLUE == paint2.getColor()
322~~~~
323
324</fiddle-embed></div>
325
326---
327
Cary Clark73fa9722017-08-29 17:36:51 -0400328<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400329## SkPaint
330
331<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
332SkPaint(SkPaint&& paint)
333</pre>
334
Cary Clarkd0530ba2017-09-14 11:25:39 -0400335Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400336of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400337
Cary Clark73fa9722017-08-29 17:36:51 -0400338After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400339
340### Parameters
341
Cary Clark73fa9722017-08-29 17:36:51 -0400342<table> <tr> <td><a name="SkPaint_move_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400343original to move</td>
344 </tr>
345</table>
346
347### Return Value
348
Cary Clark73fa9722017-08-29 17:36:51 -0400349content of <a href="#SkPaint_move_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400350
351### Example
352
353<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
354
355#### Example Output
356
357~~~~
358path effect unique: true
359~~~~
360
361</fiddle-embed></div>
362
363---
364
Cary Clark493df1f2017-08-25 13:14:33 -0400365<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400366## reset
367
368<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
369void reset()
370</pre>
371
Cary Clarkbc5697d2017-10-04 14:31:33 -0400372Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
373<a href="#Paint">Paint</a> with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400374
375### Example
376
377<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
378
379#### Example Output
380
381~~~~
382paint1 == paint2
383~~~~
384
385</fiddle-embed></div>
386
387---
388
389# <a name="Destructor"></a> Destructor
390
Cary Clark493df1f2017-08-25 13:14:33 -0400391<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400392## ~SkPaint
393
394<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
395~SkPaint()
396</pre>
397
Cary Clark8cc16c72017-08-25 11:51:49 -0400398Decreases <a href="#Paint">Paint</a> <a href="undocumented#Reference_Count">Reference Count</a> of owned objects: <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400399<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a>. If the
400objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400401
402---
403
404# <a name="Management"></a> Management
405
Cary Clark493df1f2017-08-25 13:14:33 -0400406<a name="SkPaint_copy_assignment_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400407## operator=
408
409<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
410SkPaint& operator=(const SkPaint& paint)
411</pre>
412
Cary Clark8cc16c72017-08-25 11:51:49 -0400413Makes a shallow copy of <a href="#Paint">Paint</a>. <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400414<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clark8cc16c72017-08-25 11:51:49 -0400415between the original <a href="#SkPaint_copy_assignment_operator_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400416prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clark8cc16c72017-08-25 11:51:49 -0400417resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_assignment_operator_paint">paint</a>
418are increased by one. <a href="#SkPaint_copy_assignment_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400419
420### Parameters
421
Cary Clark8cc16c72017-08-25 11:51:49 -0400422<table> <tr> <td><a name="SkPaint_copy_assignment_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400423original to copy</td>
424 </tr>
425</table>
426
427### Return Value
428
Cary Clark8cc16c72017-08-25 11:51:49 -0400429content of <a href="#SkPaint_copy_assignment_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400430
431### Example
432
433<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
434
435#### Example Output
436
437~~~~
438SK_ColorRED == paint1.getColor()
439SK_ColorRED == paint2.getColor()
440~~~~
441
442</fiddle-embed></div>
443
444---
445
Cary Clark493df1f2017-08-25 13:14:33 -0400446<a name="SkPaint_move_assignment_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400447## operator=
448
449<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
450SkPaint& operator=(SkPaint&& paint)
451</pre>
452
Cary Clarkd0530ba2017-09-14 11:25:39 -0400453Moves the <a href="#SkPaint_move_assignment_operator_paint">paint</a> to avoid increasing the reference counts
Cary Clark8cc16c72017-08-25 11:51:49 -0400454of objects referenced by the <a href="#SkPaint_move_assignment_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400455prior destination are decreased by one; those objects are deleted if the resulting count
456is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400457
Cary Clark8cc16c72017-08-25 11:51:49 -0400458After the call, <a href="#SkPaint_move_assignment_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400459
460### Parameters
461
Cary Clark8cc16c72017-08-25 11:51:49 -0400462<table> <tr> <td><a name="SkPaint_move_assignment_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400463original to move</td>
464 </tr>
465</table>
466
467### Return Value
468
Cary Clark8cc16c72017-08-25 11:51:49 -0400469content of <a href="#SkPaint_move_assignment_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400470
471### Example
472
473<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
474
475#### Example Output
476
477~~~~
478SK_ColorRED == paint2.getColor()
479~~~~
480
481</fiddle-embed></div>
482
483---
484
Cary Clark493df1f2017-08-25 13:14:33 -0400485<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400486## operator==
487
488<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
489bool operator==(const SkPaint& a, const SkPaint& b)
490</pre>
491
Cary Clark8cc16c72017-08-25 11:51:49 -0400492Compares <a href="#SkPaint_equal_operator_a">a</a> and <a href="#SkPaint_equal_operator_b">b</a>, and returns true if <a href="#SkPaint_equal_operator_a">a</a> and <a href="#SkPaint_equal_operator_b">b</a> are equivalent. May return false
Cary Clark4c06f5e2017-08-04 12:48:24 -0400493if <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>,
494<a href="undocumented#Draw_Looper">Draw Looper</a>, or <a href="undocumented#Image_Filter">Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400495
496### Parameters
497
Cary Clark8cc16c72017-08-25 11:51:49 -0400498<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
499<a href="#Paint">Paint</a> to compare</td>
500 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
501<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400502 </tr>
503</table>
504
505### Return Value
506
Cary Clark8cc16c72017-08-25 11:51:49 -0400507true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400508
509### Example
510
511<div><fiddle-embed name="7481a948e34672720337a631830586dd">
512
513#### Example Output
514
515~~~~
516paint1 == paint2
517paint1 != paint2
518~~~~
519
520</fiddle-embed></div>
521
522---
523
Cary Clark493df1f2017-08-25 13:14:33 -0400524<a name="SkPaint_not_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400525## operator!=
526
527<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
528bool operator!=(const SkPaint& a, const SkPaint& b)
529</pre>
530
Cary Clark8cc16c72017-08-25 11:51:49 -0400531Compares <a href="#SkPaint_not_equal_operator_a">a</a> and <a href="#SkPaint_not_equal_operator_b">b</a>, and returns true if <a href="#SkPaint_not_equal_operator_a">a</a> and <a href="#SkPaint_not_equal_operator_b">b</a> are not equivalent. May return true
Cary Clark4c06f5e2017-08-04 12:48:24 -0400532if <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Rasterizer">Rasterizer</a>,
533<a href="undocumented#Draw_Looper">Draw Looper</a>, or <a href="undocumented#Image_Filter">Image Filter</a> have identical contents but different pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400534
535### Parameters
536
Cary Clark8cc16c72017-08-25 11:51:49 -0400537<table> <tr> <td><a name="SkPaint_not_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
538<a href="#Paint">Paint</a> to compare</td>
539 </tr> <tr> <td><a name="SkPaint_not_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
540<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400541 </tr>
542</table>
543
544### Return Value
545
Cary Clark8cc16c72017-08-25 11:51:49 -0400546true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400547
548### Example
549
550<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
551
552#### Example Output
553
554~~~~
555paint1 == paint2
556paint1 == paint2
557~~~~
558
559</fiddle-embed></div>
560
561---
562
Cary Clark493df1f2017-08-25 13:14:33 -0400563<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400564## getHash
565
566<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
567uint32_t getHash() const
568</pre>
569
Cary Clark8cc16c72017-08-25 11:51:49 -0400570Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400571Identical hashes guarantee that the paints are
572equivalent, but differing hashes do not guarantee that the paints have differing
573contents.
574
Cary Clark8cc16c72017-08-25 11:51:49 -0400575If <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> returns true for two paints,
Cary Clark12799e12017-07-28 15:18:29 -0400576their hashes are also equal.
577
578The hash returned is platform and implementation specific.
579
580### Return Value
581
582a shallow hash
583
584### Example
585
586<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
587
588#### Example Output
589
590~~~~
591paint1 == paint2
592paint1.getHash() == paint2.getHash()
593~~~~
594
595</fiddle-embed></div>
596
597---
598
Cary Clark493df1f2017-08-25 13:14:33 -0400599<a name="SkPaint_flatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400600## flatten
601
602<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
603void flatten(SkWriteBuffer& buffer) const
604</pre>
605
Cary Clark8cc16c72017-08-25 11:51:49 -0400606Serializes <a href="#Paint">Paint</a> into a <a href="#SkPaint_flatten_buffer">buffer</a>. A companion <a href="#SkPaint_unflatten">unflatten</a> call
Cary Clark12799e12017-07-28 15:18:29 -0400607can reconstitute the paint at a later time.
608
609### Parameters
610
Cary Clark8cc16c72017-08-25 11:51:49 -0400611<table> <tr> <td><a name="SkPaint_flatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
612<a href="undocumented#Write_Buffer">Write Buffer</a> receiving the flattened <a href="#Paint">Paint</a> data</td>
Cary Clark12799e12017-07-28 15:18:29 -0400613 </tr>
614</table>
615
616### Example
617
618<div><fiddle-embed name="670672b146b50eced4d3dd10c701e0a7">
619
620#### Example Output
621
622~~~~
623color = 0xffff0000
624~~~~
625
626</fiddle-embed></div>
627
628---
629
Cary Clark493df1f2017-08-25 13:14:33 -0400630<a name="SkPaint_unflatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400631## unflatten
632
633<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
634void unflatten(SkReadBuffer& buffer)
635</pre>
636
Cary Clark8cc16c72017-08-25 11:51:49 -0400637Populates <a href="#Paint">Paint</a>, typically from a serialized stream, created by calling
638<a href="#SkPaint_flatten">flatten</a> at an earlier time.
Cary Clark12799e12017-07-28 15:18:29 -0400639
Cary Clark8cc16c72017-08-25 11:51:49 -0400640<a href="undocumented#SkReadBuffer">SkReadBuffer</a> class is not public, so <a href="#SkPaint_unflatten">unflatten</a> cannot be meaningfully called
Cary Clark12799e12017-07-28 15:18:29 -0400641by the client.
642
643### Parameters
644
Cary Clark8cc16c72017-08-25 11:51:49 -0400645<table> <tr> <td><a name="SkPaint_unflatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -0400646serialized data describing <a href="#Paint">Paint</a> content</td>
Cary Clark12799e12017-07-28 15:18:29 -0400647 </tr>
648</table>
649
Cary Clark2ade9972017-11-02 17:49:34 -0400650### See Also
651
652<a href="undocumented#SkReadBuffer">SkReadBuffer</a>
653
Cary Clark12799e12017-07-28 15:18:29 -0400654---
655
656# <a name="Hinting"></a> Hinting
657
Cary Clark8cc16c72017-08-25 11:51:49 -0400658## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400659
Cary Clark154beea2017-10-26 07:58:48 -0400660<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400661enum <a href="#Hinting">Hinting</a> {
662<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
663<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
664<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
665<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400666};</pre>
667
Cary Clark8cc16c72017-08-25 11:51:49 -0400668<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
669look 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 -0400670muted effect or no effect at all depending on the platform.
671
Cary Clark4c06f5e2017-08-04 12:48:24 -0400672The four levels roughly control corresponding features on platforms that use <a href="undocumented#FreeType">FreeType</a>
Cary Clark8cc16c72017-08-25 11:51:49 -0400673as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400674
675### Constants
676
677<table>
678 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400679 <td><a name="SkPaint_kNo_Hinting"> <code><strong>SkPaint::kNo_Hinting </strong></code> </a></td><td>0</td><td>Leaves glyph outlines unchanged from their native representation.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400680With <a href="undocumented#FreeType">FreeType</a>, this is equivalent to the <a href="undocumented#FT_LOAD_NO_HINTING">FT LOAD NO HINTING</a>
681bit-field constant supplied to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400682outline being loaded should not be fitted to the pixel grid but simply scaled
683to 26.6 fractional pixels.</td>
684 </tr>
685 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400686 <td><a name="SkPaint_kSlight_Hinting"> <code><strong>SkPaint::kSlight_Hinting </strong></code> </a></td><td>1</td><td>Modifies glyph outlines minimally to improve constrast.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400687With <a href="undocumented#FreeType">FreeType</a>, this is equivalent in spirit to the
688<a href="undocumented#FT_LOAD_TARGET_LIGHT">FT LOAD TARGET LIGHT</a> value supplied to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400689lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400690Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400691 </tr>
692 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400693 <td><a name="SkPaint_kNormal_Hinting"> <code><strong>SkPaint::kNormal_Hinting </strong></code> </a></td><td>2</td><td>Modifies glyph outlines to improve constrast. This is the default.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400694With <a href="undocumented#FreeType">FreeType</a>, this supplies <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>,
Cary Clark12799e12017-07-28 15:18:29 -0400695choosing the default hinting algorithm, which is optimized for standard
696gray-level rendering.</td>
697 </tr>
698 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400699 <td><a name="SkPaint_kFull_Hinting"> <code><strong>SkPaint::kFull_Hinting </strong></code> </a></td><td>3</td><td>Modifies glyph outlines for maxiumum constrast. With <a href="undocumented#FreeType">FreeType</a>, this selects
700<a href="undocumented#FT_LOAD_TARGET_LCD">FT LOAD TARGET LCD</a> or <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400701<a href="undocumented#FT_LOAD_TARGET_LCD">FT LOAD TARGET LCD</a> is a variant of <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> optimized for
702horizontally decimated <a href="undocumented#LCD">LCD</a> displays; <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> is a
703variant of <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> optimized for vertically decimated <a href="undocumented#LCD">LCD</a> displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400704 </tr>
705</table>
706
Cary Clark8cc16c72017-08-25 11:51:49 -0400707On <a href="undocumented#Windows">Windows</a> with <a href="undocumented#DirectWrite">DirectWrite</a>, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400708
Cary Clark8cc16c72017-08-25 11:51:49 -0400709<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400710Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400711
712
713
Cary Clark493df1f2017-08-25 13:14:33 -0400714<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400715## getHinting
716
717<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
718Hinting getHinting() const
719</pre>
720
721Returns level of glyph outline adjustment.
722
723### Return Value
724
Cary Clark8cc16c72017-08-25 11:51:49 -0400725one 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 -0400726
727### Example
728
729<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
730
731#### Example Output
732
733~~~~
734SkPaint::kNormal_Hinting == paint.getHinting()
735~~~~
736
737</fiddle-embed></div>
738
739---
740
Cary Clark493df1f2017-08-25 13:14:33 -0400741<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400742## setHinting
743
744<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
745void setHinting(Hinting hintingLevel)
746</pre>
747
748Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400749Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400750
Cary Clark8cc16c72017-08-25 11:51:49 -0400751| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400752| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400753| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400754| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
755| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
756| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400757
758### Parameters
759
Cary Clark8cc16c72017-08-25 11:51:49 -0400760<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
761one 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 -0400762 </tr>
763</table>
764
765### Example
766
767<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
768
769#### Example Output
770
771~~~~
772paint1 == paint2
773~~~~
774
775</fiddle-embed></div>
776
777---
778
779# <a name="Flags"></a> Flags
780
Cary Clark8cc16c72017-08-25 11:51:49 -0400781## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400782
Cary Clark154beea2017-10-26 07:58:48 -0400783<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400784enum <a href="#Flags">Flags</a> {
785<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
786<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
787<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
788<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
789<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
790<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
791<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
792<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
793<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
794<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
795<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400796
Cary Clark8cc16c72017-08-25 11:51:49 -0400797<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400798};
799</pre>
800
Cary Clark8cc16c72017-08-25 11:51:49 -0400801The bit values stored in <a href="#Flags">Flags</a>.
802The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400803with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400804All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400805multiple settings at once.
806
807### Constants
808
809<table>
810 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400811 <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting <a href="SkPaint_Reference#Anti_alias">Anti-alias</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400812 </tr>
813 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400814 <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 -0400815 </tr>
816 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400817 <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 -0400818 </tr>
819 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400820 <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 -0400821 </tr>
822 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400823 <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 -0400824 </tr>
825 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400826 <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 -0400827 </tr>
828 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400829 <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 -0400830 </tr>
831 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400832 <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 -0400833 </tr>
834 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400835 <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 -0400836 </tr>
837 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400838 <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 -0400839 </tr>
840 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400841 <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 -0400842 </tr>
843 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400844 <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 -0400845 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400846<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400847
848</table>
849
Cary Clark8cc16c72017-08-25 11:51:49 -0400850## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400851
Cary Clark154beea2017-10-26 07:58:48 -0400852<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400853enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
854<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
855<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400856};</pre>
857
858### Constants
859
860<table>
861 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400862 <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 -0400863 </tr>
864 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400865 <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 -0400866 </tr>
867</table>
868
Cary Clark2ade9972017-11-02 17:49:34 -0400869### See Also
870
871<a href="#Flags">Flags</a> <a href="#SkPaint_getFlags">getFlags</a>
872
Cary Clark12799e12017-07-28 15:18:29 -0400873
874
Cary Clark493df1f2017-08-25 13:14:33 -0400875<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400876## getFlags
877
878<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
879uint32_t getFlags() const
880</pre>
881
Cary Clark8cc16c72017-08-25 11:51:49 -0400882Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
883bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400884
885### Return Value
886
Cary Clark8cc16c72017-08-25 11:51:49 -0400887zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400888
889### Example
890
891<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
892
893#### Example Output
894
895~~~~
896(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
897~~~~
898
899</fiddle-embed></div>
900
901---
902
Cary Clark493df1f2017-08-25 13:14:33 -0400903<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400904## setFlags
905
906<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
907void setFlags(uint32_t flags)
908</pre>
909
Cary Clark8cc16c72017-08-25 11:51:49 -0400910Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
911All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400912
913### Parameters
914
Cary Clark8cc16c72017-08-25 11:51:49 -0400915<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
916union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400917 </tr>
918</table>
919
920### Example
921
922<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
923
924#### Example Output
925
926~~~~
927paint.isAntiAlias()
928paint.isDither()
929~~~~
930
931</fiddle-embed></div>
932
933---
934
935# <a name="Anti-alias"></a> Anti-alias
Cary Clark4c06f5e2017-08-04 12:48:24 -0400936<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400937If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
938If <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 -0400939
Cary Clarkce101242017-09-01 15:51:02 -0400940The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400941passing through the pixel center may, but is not required to, draw the pixel.
942
Cary Clarkce101242017-09-01 15:51:02 -0400943<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 -0400944active <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 -0400945
Cary Clarkce101242017-09-01 15:51:02 -0400946A platform may only support <a href="undocumented#Anti_alias">Anti-aliased</a> drawing. Some <a href="undocumented#GPU_backed">GPU-backed</a> platforms use
947<a href="undocumented#Supersampling">Supersampling</a> to <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> all drawing, and have no mechanism to selectively
948<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400949
Cary Clarkce101242017-09-01 15:51:02 -0400950The amount of coverage computed for <a href="undocumented#Anti_alias">Anti-aliased</a> pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400951
Cary Clark4c06f5e2017-08-04 12:48:24 -0400952<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is disabled by default.
Cary Clark8cc16c72017-08-25 11:51:49 -0400953<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -0400954at compile time.
955
956### Example
957
958<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
959A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400960The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clarkce101242017-09-01 15:51:02 -0400961<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400962
Cary Clark493df1f2017-08-25 13:14:33 -0400963<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400964## isAntiAlias
965
966<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
967bool isAntiAlias() const
968</pre>
969
Cary Clark4c06f5e2017-08-04 12:48:24 -0400970If 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 -0400971
Cary Clark8cc16c72017-08-25 11:51:49 -0400972Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400973
974### Return Value
975
Cary Clark8cc16c72017-08-25 11:51:49 -0400976<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400977
978### Example
979
980<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
981
982#### Example Output
983
984~~~~
985paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
986paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
987~~~~
988
989</fiddle-embed></div>
990
991---
992
Cary Clark493df1f2017-08-25 13:14:33 -0400993<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400994## setAntiAlias
995
996<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
997void setAntiAlias(bool aa)
998</pre>
999
Cary Clark4c06f5e2017-08-04 12:48:24 -04001000Requests, 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 -04001001partial transparency.
1002
Cary Clark8cc16c72017-08-25 11:51:49 -04001003Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
1004Clears <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 -04001005
1006### Parameters
1007
Cary Clark8cc16c72017-08-25 11:51:49 -04001008<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
1009setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001010 </tr>
1011</table>
1012
1013### Example
1014
1015<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1016
1017#### Example Output
1018
1019~~~~
1020paint1 == paint2
1021~~~~
1022
1023</fiddle-embed></div>
1024
1025---
1026
1027# <a name="Dither"></a> Dither
Cary Clarkce101242017-09-01 15:51:02 -04001028<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001029This can help to smooth color transitions and reducing banding in gradients.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001030Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
1031and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
1032and improves rendering into a <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001033
1034Dithering is always enabled for linear gradients drawing into
Cary Clark4c06f5e2017-08-04 12:48:24 -04001035<a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a> and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001036<a href="#Dither">Dither</a> cannot be enabled for <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> <a href="undocumented#Surface">Surface</a> and
Cary Clark4c06f5e2017-08-04 12:48:24 -04001037<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001038
Cary Clark8cc16c72017-08-25 11:51:49 -04001039<a href="#Dither">Dither</a> is disabled by default.
1040<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 -04001041at compile time.
1042
Cary Clark8cc16c72017-08-25 11:51:49 -04001043Some 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 -04001044
1045### Example
1046
1047<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1048alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1049
1050### Example
1051
1052<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001053Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001054dither, making it easier to see.</div></fiddle-embed></div>
1055
Cary Clark493df1f2017-08-25 13:14:33 -04001056<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001057## isDither
1058
1059<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1060bool isDither() const
1061</pre>
1062
1063If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001064Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001065
1066### Return Value
1067
Cary Clark8cc16c72017-08-25 11:51:49 -04001068<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001069
1070### Example
1071
1072<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1073
1074#### Example Output
1075
1076~~~~
1077paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1078paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1079~~~~
1080
1081</fiddle-embed></div>
1082
1083---
1084
Cary Clark493df1f2017-08-25 13:14:33 -04001085<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001086## setDither
1087
1088<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1089void setDither(bool dither)
1090</pre>
1091
1092Requests, but does not require, to distribute color error.
1093
Cary Clark8cc16c72017-08-25 11:51:49 -04001094Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1095Clears <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 -04001096
1097### Parameters
1098
Cary Clark8cc16c72017-08-25 11:51:49 -04001099<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1100setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001101 </tr>
1102</table>
1103
1104### Example
1105
1106<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1107
1108#### Example Output
1109
1110~~~~
1111paint1 == paint2
1112~~~~
1113
1114</fiddle-embed></div>
1115
1116### See Also
1117
Cary Clark4c06f5e2017-08-04 12:48:24 -04001118<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001119
1120---
1121
1122### See Also
1123
Cary Clark4c06f5e2017-08-04 12:48:24 -04001124Gradient <a href="undocumented#RGB_565">Color RGB-565</a>
Cary Clark12799e12017-07-28 15:18:29 -04001125
1126# <a name="Device_Text"></a> Device Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001127<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 -04001128
Cary Clark8cc16c72017-08-25 11:51:49 -04001129When 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 -04001130create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001131on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001132<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 -04001133the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001134
Cary Clark8cc16c72017-08-25 11:51:49 -04001135<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 -04001136As the opaqueness
1137of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1138
1139Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001140<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> and <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> are clear by default.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001141<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 -04001142<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 -04001143
1144### Example
1145
Cary Clark4c06f5e2017-08-04 12:48:24 -04001146<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 -04001147When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1148When <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 -04001149
1150## <a name="Linear_Text"></a> Linear Text
1151
Cary Clark4c06f5e2017-08-04 12:48:24 -04001152<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 -04001153If <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 -04001154If <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 -04001155
Cary Clark493df1f2017-08-25 13:14:33 -04001156<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001157## isLinearText
1158
1159<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1160bool isLinearText() const
1161</pre>
1162
Cary Clark4c06f5e2017-08-04 12:48:24 -04001163If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001164
Cary Clark8cc16c72017-08-25 11:51:49 -04001165Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001166
1167### Return Value
1168
Cary Clark8cc16c72017-08-25 11:51:49 -04001169<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001170
1171### Example
1172
1173<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1174
1175### See Also
1176
Cary Clark8cc16c72017-08-25 11:51:49 -04001177<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001178
1179---
1180
Cary Clark493df1f2017-08-25 13:14:33 -04001181<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001182## setLinearText
1183
1184<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1185void setLinearText(bool linearText)
1186</pre>
1187
Cary Clark4c06f5e2017-08-04 12:48:24 -04001188If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001189By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001190
Cary Clark8cc16c72017-08-25 11:51:49 -04001191Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1192Clears <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 -04001193
1194### Parameters
1195
Cary Clark8cc16c72017-08-25 11:51:49 -04001196<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1197setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001198 </tr>
1199</table>
1200
1201### Example
1202
1203<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1204
1205### See Also
1206
Cary Clark8cc16c72017-08-25 11:51:49 -04001207<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001208
1209---
1210
1211## <a name="Subpixel_Text"></a> Subpixel Text
1212
Cary Clark8cc16c72017-08-25 11:51:49 -04001213<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 -04001214As the opaqueness
1215of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1216
Cary Clark493df1f2017-08-25 13:14:33 -04001217<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001218## isSubpixelText
1219
1220<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1221bool isSubpixelText() const
1222</pre>
1223
Cary Clarkce101242017-09-01 15:51:02 -04001224If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001225
Cary Clark8cc16c72017-08-25 11:51:49 -04001226Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001227
1228### Return Value
1229
Cary Clark8cc16c72017-08-25 11:51:49 -04001230<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001231
1232### Example
1233
1234<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1235
1236#### Example Output
1237
1238~~~~
1239paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1240paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1241~~~~
1242
1243</fiddle-embed></div>
1244
1245---
1246
Cary Clark493df1f2017-08-25 13:14:33 -04001247<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001248## setSubpixelText
1249
1250<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1251void setSubpixelText(bool subpixelText)
1252</pre>
1253
Cary Clarkce101242017-09-01 15:51:02 -04001254Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001255
Cary Clark8cc16c72017-08-25 11:51:49 -04001256Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1257Clears <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 -04001258
1259### Parameters
1260
Cary Clark8cc16c72017-08-25 11:51:49 -04001261<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1262setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001263 </tr>
1264</table>
1265
1266### Example
1267
1268<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1269
1270#### Example Output
1271
1272~~~~
1273paint1 == paint2
1274~~~~
1275
1276</fiddle-embed></div>
1277
1278---
1279
1280## <a name="LCD_Text"></a> LCD Text
1281
Cary Clark8cc16c72017-08-25 11:51:49 -04001282When 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 -04001283create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001284on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001285<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 -04001286the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001287
Cary Clark493df1f2017-08-25 13:14:33 -04001288<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001289## isLCDRenderText
1290
1291<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1292bool isLCDRenderText() const
1293</pre>
1294
Cary Clarkce101242017-09-01 15:51:02 -04001295If true, <a href="#Glyph">Glyphs</a> may use <a href="undocumented#LCD">LCD</a> striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001296
Cary Clark8cc16c72017-08-25 11:51:49 -04001297Returns 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 -04001298
1299### Return Value
1300
Cary Clark8cc16c72017-08-25 11:51:49 -04001301<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001302
1303### Example
1304
1305<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1306
1307#### Example Output
1308
1309~~~~
1310paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1311paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1312~~~~
1313
1314</fiddle-embed></div>
1315
1316---
1317
Cary Clark493df1f2017-08-25 13:14:33 -04001318<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001319## setLCDRenderText
1320
1321<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1322void setLCDRenderText(bool lcdText)
1323</pre>
1324
Cary Clarkce101242017-09-01 15:51:02 -04001325Requests, but does not require, that <a href="#Glyph">Glyphs</a> use <a href="undocumented#LCD">LCD</a> striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001326
Cary Clark8cc16c72017-08-25 11:51:49 -04001327Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1328Clears <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 -04001329
1330### Parameters
1331
Cary Clark8cc16c72017-08-25 11:51:49 -04001332<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1333setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001334 </tr>
1335</table>
1336
1337### Example
1338
1339<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1340
1341#### Example Output
1342
1343~~~~
1344paint1 == paint2
1345~~~~
1346
1347</fiddle-embed></div>
1348
1349---
1350
1351# <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
Cary Clarkce101242017-09-01 15:51:02 -04001352<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 -04001353<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> when set chooses an embedded bitmap glyph over an outline contained
Cary Clark12799e12017-07-28 15:18:29 -04001354in a font if the platform supports this option.
1355
Cary Clark8cc16c72017-08-25 11:51:49 -04001356<a href="undocumented#FreeType">FreeType</a> selects the bitmap glyph if available when <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set, and selects
1357the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001358<a href="undocumented#Windows">Windows</a> may select the bitmap glyph but is not required to do so.
1359<a href="undocumented#OS_X">OS X</a> and <a href="undocumented#iOS">iOS</a> do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001360
Cary Clark4c06f5e2017-08-04 12:48:24 -04001361<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1362<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 -04001363<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001364
1365### Example
1366
Cary Clark154beea2017-10-26 07:58:48 -04001367<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkce101242017-09-01 15:51:02 -04001368<div>The "" <a href="undocumented#TrueType">TrueType</a> font in the <a href="undocumented#Skia">Skia</a> resources/fonts directory
1369includes an embedded bitmap <a href="undocumented#Glyph">Glyph</a> at odd font sizes. This example works
1370on platforms that use <a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
1371<a href="undocumented#Windows">Windows</a> may, but is not required to, return a bitmap glyph if
Cary Clarkbc5697d2017-10-04 14:31:33 -04001372<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set.</div><a href="SkBitmap_Reference#SkBitmap">SkBitmap</a> bitmap;
Cary Clark12799e12017-07-28 15:18:29 -04001373bitmap.allocN32Pixels(30, 15);
1374bitmap.eraseColor(0);
Cary Clark4c06f5e2017-08-04 12:48:24 -04001375<a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> offscreen(bitmap);
Cary Clark8cc16c72017-08-25 11:51:49 -04001376<a href="#SkPaint">SkPaint</a> paint;
Cary Clark12799e12017-07-28 15:18:29 -04001377paint.</pre>
1378
Cary Clark493df1f2017-08-25 13:14:33 -04001379<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001380## isEmbeddedBitmapText
1381
1382<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1383bool isEmbeddedBitmapText() const
1384</pre>
1385
Cary Clarkce101242017-09-01 15:51:02 -04001386If 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 -04001387
Cary Clark8cc16c72017-08-25 11:51:49 -04001388Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001389
1390### Return Value
1391
Cary Clark8cc16c72017-08-25 11:51:49 -04001392<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001393
1394### Example
1395
1396<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1397
1398#### Example Output
1399
1400~~~~
1401paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1402paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1403~~~~
1404
1405</fiddle-embed></div>
1406
1407---
1408
Cary Clark493df1f2017-08-25 13:14:33 -04001409<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001410## setEmbeddedBitmapText
1411
1412<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1413void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1414</pre>
1415
1416Requests, but does not require, to use bitmaps in fonts instead of outlines.
1417
Cary Clark8cc16c72017-08-25 11:51:49 -04001418Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1419Clears <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 -04001420
1421### Parameters
1422
Cary Clark8cc16c72017-08-25 11:51:49 -04001423<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1424setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001425 </tr>
1426</table>
1427
1428### Example
1429
1430<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1431
1432#### Example Output
1433
1434~~~~
1435paint1 == paint2
1436~~~~
1437
1438</fiddle-embed></div>
1439
1440---
1441
1442# <a name="Automatic_Hinting"></a> Automatic Hinting
Cary Clark8cc16c72017-08-25 11:51:49 -04001443If <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 -04001444instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001445<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
1446<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001447
Cary Clark8cc16c72017-08-25 11:51:49 -04001448<a href="#Automatic_Hinting">Automatic Hinting</a> only affects platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001449
Cary Clark493df1f2017-08-25 13:14:33 -04001450<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001451## isAutohinted
1452
1453<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1454bool isAutohinted() const
1455</pre>
1456
Cary Clark8cc16c72017-08-25 11:51:49 -04001457If true, and if <a href="#SkPaint_Hinting">Hinting</a> is set to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> or <a href="#SkPaint_kFull_Hinting">kFull Hinting</a>, and if
Cary Clark4c06f5e2017-08-04 12:48:24 -04001458platform uses <a href="undocumented#FreeType">FreeType</a> as the <a href="undocumented#Font_Manager">Font Manager</a>, instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint
Cary Clarkce101242017-09-01 15:51:02 -04001459<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001460
Cary Clark8cc16c72017-08-25 11:51:49 -04001461Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001462
1463### Return Value
1464
Cary Clark8cc16c72017-08-25 11:51:49 -04001465<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001466
1467### Example
1468
1469<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1470
1471#### Example Output
1472
1473~~~~
1474paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1475paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1476~~~~
1477
1478</fiddle-embed></div>
1479
1480### See Also
1481
Cary Clark8cc16c72017-08-25 11:51:49 -04001482<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001483
1484---
1485
Cary Clark493df1f2017-08-25 13:14:33 -04001486<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001487## setAutohinted
1488
1489<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1490void setAutohinted(bool useAutohinter)
1491</pre>
1492
Cary Clark8cc16c72017-08-25 11:51:49 -04001493If <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 -04001494instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001495<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
1496<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001497
Cary Clark4c06f5e2017-08-04 12:48:24 -04001498Only affects platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001499
Cary Clark8cc16c72017-08-25 11:51:49 -04001500Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1501Clears <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 -04001502
1503### Parameters
1504
Cary Clark8cc16c72017-08-25 11:51:49 -04001505<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1506setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001507 </tr>
1508</table>
1509
1510### Example
1511
1512<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1513
1514### See Also
1515
Cary Clark8cc16c72017-08-25 11:51:49 -04001516<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001517
1518---
1519
1520# <a name="Vertical_Text"></a> Vertical Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001521<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 -04001522using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1523is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1524<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001525
Cary Clarkce101242017-09-01 15:51:02 -04001526<a href="undocumented#Skia">Skia</a> can translate text character codes as a series of <a href="#Glyph">Glyphs</a>, but does not implement
Cary Clark12799e12017-07-28 15:18:29 -04001527font substitution,
Cary Clarkce101242017-09-01 15:51:02 -04001528textual substitution, line layout, or contextual spacing like <a href="undocumented#Kerning">Kerning</a> pairs. Use
1529a text shaping engine likeHarfBuzzto translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001530into glyph series.
1531
Cary Clark8cc16c72017-08-25 11:51:49 -04001532<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 -04001533
Cary Clark8cc16c72017-08-25 11:51:49 -04001534<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1535<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 -04001536
Cary Clark8cc16c72017-08-25 11:51:49 -04001537<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1538<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1539<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001540
1541### Example
1542
1543<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1544
Cary Clark493df1f2017-08-25 13:14:33 -04001545<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001546## isVerticalText
1547
1548<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1549bool isVerticalText() const
1550</pre>
1551
Cary Clarkce101242017-09-01 15:51:02 -04001552If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001553
Cary Clark8cc16c72017-08-25 11:51:49 -04001554Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001555
1556### Return Value
1557
Cary Clark8cc16c72017-08-25 11:51:49 -04001558<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001559
1560### Example
1561
1562<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1563
1564#### Example Output
1565
1566~~~~
1567paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1568paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1569~~~~
1570
1571</fiddle-embed></div>
1572
1573---
1574
Cary Clark493df1f2017-08-25 13:14:33 -04001575<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001576## setVerticalText
1577
1578<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1579void setVerticalText(bool verticalText)
1580</pre>
1581
1582If true, text advance positions the next glyph below the previous glyph instead of to the
1583right of previous glyph.
1584
Cary Clark8cc16c72017-08-25 11:51:49 -04001585Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1586Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001587
1588### Parameters
1589
Cary Clark8cc16c72017-08-25 11:51:49 -04001590<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1591setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001592 </tr>
1593</table>
1594
1595### Example
1596
1597<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1598
1599#### Example Output
1600
1601~~~~
1602paint1 == paint2
1603~~~~
1604
1605</fiddle-embed></div>
1606
1607---
1608
1609# <a name="Fake_Bold"></a> Fake Bold
Cary Clark8cc16c72017-08-25 11:51:49 -04001610<a href="#Fake_Bold">Fake Bold</a> approximates the bold font style accompanying a normal font when a bold font face
Cary Clark4c06f5e2017-08-04 12:48:24 -04001611is not available. <a href="undocumented#Skia">Skia</a> does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001612bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001613
Cary Clark8cc16c72017-08-25 11:51:49 -04001614Use <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 -04001615is not available.
1616
Cary Clarkce101242017-09-01 15:51:02 -04001617A <a href="undocumented#FreeType">FreeType</a> based port may define <a href="undocumented#SK_USE_FREETYPE_EMBOLDEN">SK USE FREETYPE EMBOLDEN</a> at compile time to direct
1618the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark8cc16c72017-08-25 11:51:49 -04001619by 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 -04001620
Cary Clark8cc16c72017-08-25 11:51:49 -04001621<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001622
1623### Example
1624
1625<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1626
Cary Clark493df1f2017-08-25 13:14:33 -04001627<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001628## isFakeBoldText
1629
1630<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1631bool isFakeBoldText() const
1632</pre>
1633
1634If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1635from outlines.
1636
Cary Clark8cc16c72017-08-25 11:51:49 -04001637Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001638
1639### Return Value
1640
Cary Clark8cc16c72017-08-25 11:51:49 -04001641<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001642
1643### Example
1644
1645<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1646
1647#### Example Output
1648
1649~~~~
1650paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1651paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1652~~~~
1653
1654</fiddle-embed></div>
1655
1656---
1657
Cary Clark493df1f2017-08-25 13:14:33 -04001658<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001659## setFakeBoldText
1660
1661<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1662void setFakeBoldText(bool fakeBoldText)
1663</pre>
1664
Cary Clarkce101242017-09-01 15:51:02 -04001665Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001666
Cary Clark8cc16c72017-08-25 11:51:49 -04001667Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1668Clears <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 -04001669
1670### Parameters
1671
Cary Clark8cc16c72017-08-25 11:51:49 -04001672<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1673setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001674 </tr>
1675</table>
1676
1677### Example
1678
1679<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1680
1681#### Example Output
1682
1683~~~~
1684paint1 == paint2
1685~~~~
1686
1687</fiddle-embed></div>
1688
1689---
1690
1691# <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
Cary Clarkce101242017-09-01 15:51:02 -04001692if <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
1693spacing by the difference of the hinted and <a href="undocumented#Unhinted">Unhinted</a> <a href="undocumented#Left_Side_Bearing">Left Side Bearing</a> and
1694<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
1695<a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001696
Cary Clarkce101242017-09-01 15:51:02 -04001697<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text <a href="undocumented#Kerning">Kerning</a>, where the space between
Cary Clarkbc5697d2017-10-04 14:31:33 -04001698a specific pair of characters is adjusted using data in the font <a href="undocumented#Kerning">Kerning</a> tables.
Cary Clark12799e12017-07-28 15:18:29 -04001699
Cary Clark493df1f2017-08-25 13:14:33 -04001700<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001701## isDevKernText
1702
1703<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1704bool isDevKernText() const
1705</pre>
1706
1707Returns if character spacing may be adjusted by the hinting difference.
1708
Cary Clark8cc16c72017-08-25 11:51:49 -04001709Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001710
1711### Return Value
1712
Cary Clark8cc16c72017-08-25 11:51:49 -04001713<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001714
1715### Example
1716
1717<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1718
1719---
1720
Cary Clark493df1f2017-08-25 13:14:33 -04001721<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001722## setDevKernText
1723
1724<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1725void setDevKernText(bool devKernText)
1726</pre>
1727
1728Requests, but does not require, to use hinting to adjust glyph spacing.
1729
Cary Clark8cc16c72017-08-25 11:51:49 -04001730Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1731Clears <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 -04001732
1733### Parameters
1734
Cary Clark8cc16c72017-08-25 11:51:49 -04001735<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1736setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001737 </tr>
1738</table>
1739
1740### Example
1741
1742<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1743
1744#### Example Output
1745
1746~~~~
1747paint1 == paint2
1748~~~~
1749
1750</fiddle-embed></div>
1751
1752---
1753
1754# <a name="Filter_Quality_Methods"></a> Filter Quality Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04001755<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1756A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1757A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001758If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1759in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001760
Cary Clark8cc16c72017-08-25 11:51:49 -04001761<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 -04001762
1763<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001764 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1765 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1766 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1767 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001768</table>
1769
Cary Clarkbc5697d2017-10-04 14:31:33 -04001770and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</a> specialization that uses <a href="undocumented#Image">Image</a> or <a href="SkBitmap_Reference#Bitmap">Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001771
Cary Clark4c06f5e2017-08-04 12:48:24 -04001772<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 -04001773
1774### Example
1775
1776<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1777
Cary Clark493df1f2017-08-25 13:14:33 -04001778<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001779## getFilterQuality
1780
1781<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1782SkFilterQuality getFilterQuality() const
1783</pre>
1784
Cary Clark4c06f5e2017-08-04 12:48:24 -04001785Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001786draws faster; a higher setting looks better when the image is scaled.
1787
1788### Return Value
1789
Cary Clark4c06f5e2017-08-04 12:48:24 -04001790one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1791<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001792
1793### Example
1794
1795<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1796
1797#### Example Output
1798
1799~~~~
1800kNone_SkFilterQuality == paint.getFilterQuality()
1801~~~~
1802
1803</fiddle-embed></div>
1804
1805---
1806
Cary Clark493df1f2017-08-25 13:14:33 -04001807<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001808## setFilterQuality
1809
1810<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1811void setFilterQuality(SkFilterQuality quality)
1812</pre>
1813
Cary Clark4c06f5e2017-08-04 12:48:24 -04001814Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001815draws faster; a higher setting looks better when the image is scaled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001816Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001817
1818### Parameters
1819
Cary Clark8cc16c72017-08-25 11:51:49 -04001820<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04001821one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1822<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001823 </tr>
1824</table>
1825
1826### Example
1827
1828<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1829
1830#### Example Output
1831
1832~~~~
1833kHigh_SkFilterQuality == paint.getFilterQuality()
1834~~~~
1835
1836</fiddle-embed></div>
1837
1838### See Also
1839
Cary Clark4c06f5e2017-08-04 12:48:24 -04001840<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001841
1842---
1843
1844# <a name="Color_Methods"></a> Color Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04001845<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 -04001846or stroked shape in a
184732-bit value. Each component occupies 8-bits, ranging from zero: no contribution;
1848to 255: full intensity. All values in any combination are valid.
1849
Cary Clarkce101242017-09-01 15:51:02 -04001850<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>;
Cary Clark8cc16c72017-08-25 11:51:49 -04001851<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 -04001852
Cary Clark8cc16c72017-08-25 11:51:49 -04001853The 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 -04001854on the output device, which may have more or fewer bits, and may have a different arrangement.
1855
Cary Clark8cc16c72017-08-25 11:51:49 -04001856| 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 -04001857| --- | --- | --- | --- | --- |
1858| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1859
1860### Example
1861
1862<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1863
Cary Clark493df1f2017-08-25 13:14:33 -04001864<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001865## getColor
1866
1867<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1868SkColor getColor() const
1869</pre>
1870
Cary Clarkce101242017-09-01 15:51:02 -04001871Retrieves <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 -04001872Use 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 -04001873a color component.
1874
1875### Return Value
1876
Cary Clarkce101242017-09-01 15:51:02 -04001877<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001878
1879### Example
1880
1881<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1882
1883#### Example Output
1884
1885~~~~
1886Yellow is 100% red, 100% green, and 0% blue.
1887~~~~
1888
1889</fiddle-embed></div>
1890
1891### See Also
1892
Cary Clark4c06f5e2017-08-04 12:48:24 -04001893<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001894
1895---
1896
Cary Clark493df1f2017-08-25 13:14:33 -04001897<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001898## setColor
1899
1900<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1901void setColor(SkColor color)
1902</pre>
1903
Cary Clarkce101242017-09-01 15:51:02 -04001904Sets <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,
1905<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 -04001906
1907### Parameters
1908
Cary Clark8cc16c72017-08-25 11:51:49 -04001909<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001910<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001911 </tr>
1912</table>
1913
1914### Example
1915
1916<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1917
1918#### Example Output
1919
1920~~~~
1921green1 == green2
1922~~~~
1923
1924</fiddle-embed></div>
1925
1926### See Also
1927
Cary Clark8cc16c72017-08-25 11:51:49 -04001928<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 -04001929
1930---
1931
1932## <a name="Alpha_Methods"></a> Alpha Methods
1933
Cary Clark8cc16c72017-08-25 11:51:49 -04001934<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 -04001935
Cary Clark493df1f2017-08-25 13:14:33 -04001936<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001937## getAlpha
1938
1939<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1940uint8_t getAlpha() const
1941</pre>
1942
Cary Clarkce101242017-09-01 15:51:02 -04001943Retrieves <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 -04001944
1945### Return Value
1946
Cary Clarkce101242017-09-01 15:51:02 -04001947<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001948
1949### Example
1950
1951<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1952
1953#### Example Output
1954
1955~~~~
1956255 == paint.getAlpha()
1957~~~~
1958
1959</fiddle-embed></div>
1960
1961---
1962
Cary Clark493df1f2017-08-25 13:14:33 -04001963<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001964## setAlpha
1965
1966<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1967void setAlpha(U8CPU a)
1968</pre>
1969
Cary Clarkce101242017-09-01 15:51:02 -04001970Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001971unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001972build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1973<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 -04001974fully opaque.
1975
1976### Parameters
1977
Cary Clark8cc16c72017-08-25 11:51:49 -04001978<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001979<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001980 </tr>
1981</table>
1982
1983### Example
1984
1985<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1986
1987#### Example Output
1988
1989~~~~
19900x44112233 == paint.getColor()
1991~~~~
1992
1993</fiddle-embed></div>
1994
1995---
1996
Cary Clark493df1f2017-08-25 13:14:33 -04001997<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001998## setARGB
1999
2000<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2001void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
2002</pre>
2003
Cary Clark4c06f5e2017-08-04 12:48:24 -04002004Sets <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 -04002005The 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 -04002006
2007### Parameters
2008
Cary Clark8cc16c72017-08-25 11:51:49 -04002009<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2010amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2011 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2012amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2013 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2014amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2015 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2016amount 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 -04002017 </tr>
2018</table>
2019
2020### Example
2021
2022<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2023
2024#### Example Output
2025
2026~~~~
2027transRed1 == transRed2
2028~~~~
2029
2030</fiddle-embed></div>
2031
2032### See Also
2033
Cary Clark8cc16c72017-08-25 11:51:49 -04002034<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002035
2036---
2037
2038# <a name="Style"></a> Style
Cary Clark8cc16c72017-08-25 11:51:49 -04002039<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2040Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002041
Cary Clark8cc16c72017-08-25 11:51:49 -04002042Set <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 -04002043The fill covers the area inside the geometry for most shapes.
2044
Cary Clark8cc16c72017-08-25 11:51:49 -04002045Set <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 -04002046
2047## <a name="Fill"></a> Fill
2048
2049### See Also
2050
Cary Clark8cc16c72017-08-25 11:51:49 -04002051<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002052
2053## <a name="Stroke"></a> Stroke
2054
Cary Clarkbc5697d2017-10-04 14:31:33 -04002055The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002056<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>.
2057The 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 -04002058The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002059
Cary Clark8cc16c72017-08-25 11:51:49 -04002060As <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
2061may 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 -04002062
2063## <a name="Hairline"></a> Hairline
2064
Cary Clark8cc16c72017-08-25 11:51:49 -04002065<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Hairline">Hairline</a>.
2066<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
Cary Clark12799e12017-07-28 15:18:29 -04002067flow horizontally, vertically,or diagonally.
2068
Cary Clark8cc16c72017-08-25 11:51:49 -04002069<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
2070two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2071pixel. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clark4c06f5e2017-08-04 12:48:24 -04002072<a href="undocumented#GPU_backed">GPU-backed</a> implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002073while stroking.
2074
Cary Clark8cc16c72017-08-25 11:51:49 -04002075## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002076
Cary Clark154beea2017-10-26 07:58:48 -04002077<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002078enum <a href="#SkPaint_Style">Style</a> {
2079<a href="#SkPaint_kFill_Style">kFill Style</a>,
2080<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2081<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002082};</pre>
2083
Cary Clark8cc16c72017-08-25 11:51:49 -04002084Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002085The stroke and fill
2086share all paint attributes; for instance, they are drawn with the same color.
2087
Cary Clark8cc16c72017-08-25 11:51:49 -04002088Use <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 -04002089a fill draw.
2090
2091### Constants
2092
2093<table>
2094 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002095 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002096Applies 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>.
2097<a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="undocumented#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 -04002098<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2099The <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 -04002100and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002101<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 -04002102 </tr>
2103 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002104 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002105Applies 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 -04002106<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 -04002107and ignore the set <a href="#SkPaint_Style">Style</a>.
2108The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002109 </tr>
2110 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002111 <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 -04002112Applies 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 -04002113<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2114and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002115 </tr>
2116
2117</table>
2118
Cary Clark8cc16c72017-08-25 11:51:49 -04002119## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002120
Cary Clark154beea2017-10-26 07:58:48 -04002121<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002122enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002123<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002124};</pre>
2125
2126### Constants
2127
2128<table>
2129 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002130 <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.
2131May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002132 </tr>
2133
2134</table>
2135
Cary Clark493df1f2017-08-25 13:14:33 -04002136<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002137## getStyle
2138
2139<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2140Style getStyle() const
2141</pre>
2142
2143Whether the geometry is filled, stroked, or filled and stroked.
2144
2145### Return Value
2146
Cary Clark8cc16c72017-08-25 11:51:49 -04002147one 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 -04002148
2149### Example
2150
2151<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2152
2153#### Example Output
2154
2155~~~~
2156SkPaint::kFill_Style == paint.getStyle()
2157~~~~
2158
2159</fiddle-embed></div>
2160
2161### See Also
2162
Cary Clark8cc16c72017-08-25 11:51:49 -04002163<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002164
2165---
2166
Cary Clark493df1f2017-08-25 13:14:33 -04002167<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002168## setStyle
2169
2170<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2171void setStyle(Style style)
2172</pre>
2173
2174Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002175Has 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 -04002176
2177### Parameters
2178
Cary Clark8cc16c72017-08-25 11:51:49 -04002179<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2180one 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 -04002181 </tr>
2182</table>
2183
2184### Example
2185
2186<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2187
2188### See Also
2189
Cary Clark8cc16c72017-08-25 11:51:49 -04002190<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002191
2192---
2193
2194### See Also
2195
Cary Clark8cc16c72017-08-25 11:51:49 -04002196<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 -04002197
2198# <a name="Stroke_Width"></a> Stroke Width
Cary Clark8cc16c72017-08-25 11:51:49 -04002199<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clarkbc5697d2017-10-04 14:31:33 -04002200of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002201set 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 -04002202
2203When width is greater than zero, the stroke encompasses as many pixels partially
2204or fully as needed. When the width equals zero, the paint enables hairlines;
2205the stroke is always one pixel wide.
2206
Cary Clarkbc5697d2017-10-04 14:31:33 -04002207The stroke dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002208remains one pixel wide regardless of scaling.
2209
2210The default width for the paint is zero.
2211
2212### Example
2213
Cary Clarkce101242017-09-01 15:51:02 -04002214<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clarkbc5697d2017-10-04 14:31:33 -04002215line and the platform implementation.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002216
Cary Clark493df1f2017-08-25 13:14:33 -04002217<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002218## getStrokeWidth
2219
2220<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2221SkScalar getStrokeWidth() const
2222</pre>
2223
Cary Clark8cc16c72017-08-25 11:51:49 -04002224Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002225outline the shape.
2226
2227### Return Value
2228
Cary Clark8cc16c72017-08-25 11:51:49 -04002229zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002230
2231### Example
2232
2233<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2234
2235#### Example Output
2236
2237~~~~
22380 == paint.getStrokeWidth()
2239~~~~
2240
2241</fiddle-embed></div>
2242
2243---
2244
Cary Clark493df1f2017-08-25 13:14:33 -04002245<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002246## setStrokeWidth
2247
2248<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2249void setStrokeWidth(SkScalar width)
2250</pre>
2251
2252Sets the thickness of the pen used by the paint to
2253outline the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002254Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002255
2256### Parameters
2257
Cary Clark8cc16c72017-08-25 11:51:49 -04002258<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2259zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002260 </tr>
2261</table>
2262
2263### Example
2264
2265<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2266
2267#### Example Output
2268
2269~~~~
22705 == paint.getStrokeWidth()
2271~~~~
2272
2273</fiddle-embed></div>
2274
2275---
2276
2277# <a name="Miter_Limit"></a> Miter Limit
Cary Clark8cc16c72017-08-25 11:51:49 -04002278<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002279relative to the stroke width.
2280
Cary Clark8cc16c72017-08-25 11:51:49 -04002281<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2282is 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>
2283or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002284
Cary Clark8cc16c72017-08-25 11:51:49 -04002285If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2286is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002287
Cary Clark8cc16c72017-08-25 11:51:49 -04002288<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002289
Cary Clark8cc16c72017-08-25 11:51:49 -04002290miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002291The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clarkce101242017-09-01 15:51:02 -04002292in "<a href="undocumented#SkUserConfig">SkUserConfig</a>.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002293
2294Here are some miter limits and the angles that triggers them.
2295
2296| miter limit | angle in degrees |
2297| --- | --- |
2298| 10 | 11.48 |
2299| 9 | 12.76 |
2300| 8 | 14.36 |
2301| 7 | 16.43 |
2302| 6 | 19.19 |
2303| 5 | 23.07 |
2304| 4 | 28.96 |
2305| 3 | 38.94 |
2306| 2 | 60 |
2307| 1 | 180 |
2308
2309### Example
2310
2311<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2312When the miter limit is decreased slightly, the miter join is replaced
2313by a bevel join.</div></fiddle-embed></div>
2314
Cary Clark493df1f2017-08-25 13:14:33 -04002315<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002316## getStrokeMiter
2317
2318<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2319SkScalar getStrokeMiter() const
2320</pre>
2321
2322The limit at which a sharp corner is drawn beveled.
2323
2324### Return Value
2325
Cary Clark8cc16c72017-08-25 11:51:49 -04002326zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002327
2328### Example
2329
2330<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2331
2332#### Example Output
2333
2334~~~~
2335default miter limit == 4
2336~~~~
2337
2338</fiddle-embed></div>
2339
2340### See Also
2341
Cary Clark8cc16c72017-08-25 11:51:49 -04002342<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 -04002343
2344---
2345
Cary Clark493df1f2017-08-25 13:14:33 -04002346<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002347## setStrokeMiter
2348
2349<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2350void setStrokeMiter(SkScalar miter)
2351</pre>
2352
2353The limit at which a sharp corner is drawn beveled.
2354Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002355Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002356
2357### Parameters
2358
Cary Clark8cc16c72017-08-25 11:51:49 -04002359<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2360zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002361 </tr>
2362</table>
2363
2364### Example
2365
2366<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2367
2368#### Example Output
2369
2370~~~~
2371default miter limit == 8
2372~~~~
2373
2374</fiddle-embed></div>
2375
2376### See Also
2377
Cary Clark8cc16c72017-08-25 11:51:49 -04002378<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 -04002379
2380---
2381
2382# <a name="Stroke_Cap"></a> Stroke Cap
2383
Cary Clark8cc16c72017-08-25 11:51:49 -04002384## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002385
Cary Clark154beea2017-10-26 07:58:48 -04002386<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002387enum <a href="#SkPaint_Cap">Cap</a> {
2388<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2389<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2390<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002391
Cary Clark8cc16c72017-08-25 11:51:49 -04002392<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2393<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002394};
Cary Clark6fc50412017-09-21 12:31:06 -04002395
Cary Clark8cc16c72017-08-25 11:51:49 -04002396static 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 -04002397
Cary Clark8cc16c72017-08-25 11:51:49 -04002398<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 -04002399
2400### Constants
2401
2402<table>
2403 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002404 <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 -04002405 </tr>
2406 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002407 <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 -04002408and end.</td>
2409 </tr>
2410 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002411 <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 -04002412and end. The square sides are parallel to the initial and final direction
2413of the stroke.</td>
2414 </tr>
2415 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002416 <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 -04002417 </tr>
2418 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002419 <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>.
2420<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 -04002421 </tr>
2422 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002423 <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.
2424May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002425 </tr>
2426
Cary Clark8cc16c72017-08-25 11:51:49 -04002427Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002428follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002429
Cary Clark8cc16c72017-08-25 11:51:49 -04002430If 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 -04002431visible beginning and end.
2432
Cary Clark8cc16c72017-08-25 11:51:49 -04002433<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 -04002434
Cary Clark8cc16c72017-08-25 11:51:49 -04002435<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> is not drawn.
2436<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 -04002437at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002438<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
2439<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002440
Cary Clark8cc16c72017-08-25 11:51:49 -04002441<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 -04002442
2443</table>
2444
2445### Example
2446
Cary Clark2ade9972017-11-02 17:49:34 -04002447<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002448
Cary Clark493df1f2017-08-25 13:14:33 -04002449<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002450## getStrokeCap
2451
2452<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2453Cap getStrokeCap() const
2454</pre>
2455
2456The geometry drawn at the beginning and end of strokes.
2457
2458### Return Value
2459
Cary Clark8cc16c72017-08-25 11:51:49 -04002460one 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 -04002461
2462### Example
2463
2464<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2465
2466#### Example Output
2467
2468~~~~
2469kButt_Cap == default stroke cap
2470~~~~
2471
2472</fiddle-embed></div>
2473
2474### See Also
2475
Cary Clark8cc16c72017-08-25 11:51:49 -04002476<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002477
2478---
2479
Cary Clark493df1f2017-08-25 13:14:33 -04002480<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002481## setStrokeCap
2482
2483<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2484void setStrokeCap(Cap cap)
2485</pre>
2486
2487The geometry drawn at the beginning and end of strokes.
2488
2489### Parameters
2490
Cary Clark8cc16c72017-08-25 11:51:49 -04002491<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2492one 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>;
2493has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002494 </tr>
2495</table>
2496
2497### Example
2498
2499<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2500
2501#### Example Output
2502
2503~~~~
2504kRound_Cap == paint.getStrokeCap()
2505~~~~
2506
2507</fiddle-embed></div>
2508
2509### See Also
2510
Cary Clark8cc16c72017-08-25 11:51:49 -04002511<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002512
2513---
2514
2515# <a name="Stroke_Join"></a> Stroke Join
Cary Clark8cc16c72017-08-25 11:51:49 -04002516<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 -04002517
Cary Clark8cc16c72017-08-25 11:51:49 -04002518Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002519follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002520
2521If the contour direction changes abruptly, because the tangent direction leading
2522to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002523the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002524
2525### Example
2526
Cary Clark2ade9972017-11-02 17:49:34 -04002527<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002528
Cary Clark8cc16c72017-08-25 11:51:49 -04002529## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002530
Cary Clark154beea2017-10-26 07:58:48 -04002531<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002532enum <a href="#SkPaint_Join">Join</a> {
2533<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2534<a href="#SkPaint_kRound_Join">kRound Join</a>,
2535<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002536
Cary Clark8cc16c72017-08-25 11:51:49 -04002537<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2538<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002539};
Cary Clark6fc50412017-09-21 12:31:06 -04002540
Cary Clark8cc16c72017-08-25 11:51:49 -04002541static 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 -04002542
Cary Clark8cc16c72017-08-25 11:51:49 -04002543<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 -04002544affects the four corners of a stroked rectangle, and the connected segments in a
2545stroked path.
2546
2547Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2548radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2549connect the thick strokes.
2550
2551The fill path constructed to describe the stroked path respects the join setting but may
2552not contain the actual join. For instance, a fill path constructed with round joins does
2553not necessarily include circles at each connected segment.
2554
2555### Constants
2556
2557<table>
2558 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002559 <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>.
2560If 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 -04002561 </tr>
2562 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002563 <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 -04002564 </tr>
2565 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002566 <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 -04002567 </tr>
2568 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002569 <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 -04002570 </tr>
2571 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002572 <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>.
2573<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 -04002574 </tr>
2575 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002576 <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.
2577May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002578 </tr>
2579</table>
2580
2581### Example
2582
2583<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2584
2585### See Also
2586
Cary Clark8cc16c72017-08-25 11:51:49 -04002587<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 -04002588
2589
2590
Cary Clark493df1f2017-08-25 13:14:33 -04002591<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002592## getStrokeJoin
2593
2594<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2595Join getStrokeJoin() const
2596</pre>
2597
2598The geometry drawn at the corners of strokes.
2599
2600### Return Value
2601
Cary Clark8cc16c72017-08-25 11:51:49 -04002602one 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 -04002603
2604### Example
2605
2606<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2607
2608#### Example Output
2609
2610~~~~
2611kMiter_Join == default stroke join
2612~~~~
2613
2614</fiddle-embed></div>
2615
2616### See Also
2617
Cary Clark8cc16c72017-08-25 11:51:49 -04002618<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002619
2620---
2621
Cary Clark493df1f2017-08-25 13:14:33 -04002622<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002623## setStrokeJoin
2624
2625<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2626void setStrokeJoin(Join join)
2627</pre>
2628
2629The geometry drawn at the corners of strokes.
2630
2631### Parameters
2632
Cary Clark8cc16c72017-08-25 11:51:49 -04002633<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2634one 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 -04002635otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002636 </tr>
2637</table>
2638
2639### Example
2640
2641<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2642
2643#### Example Output
2644
2645~~~~
2646kMiter_Join == paint.getStrokeJoin()
2647~~~~
2648
2649</fiddle-embed></div>
2650
2651### See Also
2652
Cary Clark8cc16c72017-08-25 11:51:49 -04002653<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002654
2655---
2656
2657### See Also
2658
Cary Clark8cc16c72017-08-25 11:51:49 -04002659<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002660
2661# <a name="Fill_Path"></a> Fill Path
Cary Clark8cc16c72017-08-25 11:51:49 -04002662<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 -04002663
Cary Clark8cc16c72017-08-25 11:51:49 -04002664If <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 -04002665replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2666destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002667
Cary Clark4c06f5e2017-08-04 12:48:24 -04002668Fill <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
2669the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002670
Cary Clark8cc16c72017-08-25 11:51:49 -04002671If <a href="#SkPaint_Style">Style</a> is <a href="#SkPaint_kStroke_Style">kStroke Style</a> or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
2672and <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>,
2673and <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 -04002674
Cary Clark8cc16c72017-08-25 11:51:49 -04002675Fill <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 -04002676
Cary Clark8cc16c72017-08-25 11:51:49 -04002677If 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>
2678returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002679
Cary Clark493df1f2017-08-25 13:14:33 -04002680<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002681## getFillPath
2682
2683<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2684bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect,
2685 SkScalar resScale = 1) const
2686</pre>
2687
2688The filled equivalent of the stroked path.
2689
2690### Parameters
2691
Cary Clark8cc16c72017-08-25 11:51:49 -04002692<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002693<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002694 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2695resulting <a href="SkPath_Reference#Path">Path</a>; may be the same as <a href="#SkPaint_getFillPath_src">src</a>, but may not be nullptr</td>
2696 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002697optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002698 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002699if > 1, increase precision, else if (0 < res < 1) reduce precision
2700to favor speed and size</td>
2701 </tr>
2702</table>
2703
2704### Return Value
2705
Cary Clark8cc16c72017-08-25 11:51:49 -04002706true if the path represents <a href="#Style_Fill">Style Fill</a>, or false if it represents <a href="#Hairline">Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002707
2708### Example
2709
Cary Clarkce101242017-09-01 15:51:02 -04002710<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href="#Quad">Quad</a> stroke is turned into a filled path with increasing levels of precision.
2711At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002712At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2713
2714---
2715
2716<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2717bool getFillPath(const SkPath& src, SkPath* dst) const
2718</pre>
2719
2720The filled equivalent of the stroked path.
2721
Cary Clark8cc16c72017-08-25 11:51:49 -04002722Replaces <a href="#SkPaint_getFillPath_2_dst">dst</a> with the <a href="#SkPaint_getFillPath_2_src">src</a> path modified by <a href="undocumented#Path_Effect">Path Effect</a> and <a href="#Style_Stroke">Style Stroke</a>.
2723<a href="undocumented#Path_Effect">Path Effect</a>, if any, is not culled. <a href="#Stroke_Width">Stroke Width</a> is created with default precision.
Cary Clark12799e12017-07-28 15:18:29 -04002724
2725### Parameters
2726
Cary Clark8cc16c72017-08-25 11:51:49 -04002727<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002728<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002729 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2730resulting <a href="SkPath_Reference#Path">Path</a> <a href="#SkPaint_getFillPath_2_dst">dst</a> may be the same as <a href="#SkPaint_getFillPath_2_src">src</a>, but may not be nullptr</td>
Cary Clark12799e12017-07-28 15:18:29 -04002731 </tr>
2732</table>
2733
2734### Return Value
2735
Cary Clark8cc16c72017-08-25 11:51:49 -04002736true if the path represents <a href="#Style_Fill">Style Fill</a>, or false if it represents <a href="#Hairline">Hairline</a>
Cary Clark12799e12017-07-28 15:18:29 -04002737
2738### Example
2739
2740<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2741
2742---
2743
2744### See Also
2745
Cary Clark8cc16c72017-08-25 11:51:49 -04002746<a href="#Style_Stroke">Style Stroke</a> <a href="#Stroke_Width">Stroke Width</a> <a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04002747
2748# <a name="Shader_Methods"></a> Shader Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002749<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2750<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark8cc16c72017-08-25 11:51:49 -04002751If <a href="#Paint">Paint</a> has no <a href="undocumented#Shader">Shader</a>, then <a href="undocumented#Color">Color</a> fills the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002752
Cary Clark8cc16c72017-08-25 11:51:49 -04002753<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2754If <a href="undocumented#Shader">Shader</a> object defines only <a href="#Alpha">Color Alpha</a>, then <a href="undocumented#Color">Color</a> modulated by <a href="#Alpha">Color Alpha</a> describes
Cary Clark12799e12017-07-28 15:18:29 -04002755the fill.
2756
Cary Clark8cc16c72017-08-25 11:51:49 -04002757The drawn transparency can be modified without altering <a href="undocumented#Shader">Shader</a>, by changing <a href="#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002758
2759### Example
2760
2761<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2762
Cary Clark8cc16c72017-08-25 11:51:49 -04002763If <a href="undocumented#Shader">Shader</a> generates only <a href="#Alpha">Color Alpha</a> then all components of <a href="undocumented#Color">Color</a> modulate the output.
Cary Clark12799e12017-07-28 15:18:29 -04002764
2765### Example
2766
2767<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2768
Cary Clark493df1f2017-08-25 13:14:33 -04002769<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002770## getShader
2771
2772<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2773SkShader* getShader() const
2774</pre>
2775
2776Optional colors used when filling a path, such as a gradient.
2777
Cary Clark4c06f5e2017-08-04 12:48:24 -04002778Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002779
2780### Return Value
2781
Cary Clark4c06f5e2017-08-04 12:48:24 -04002782<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002783
2784### Example
2785
2786<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2787
2788#### Example Output
2789
2790~~~~
2791nullptr == shader
2792nullptr != shader
2793~~~~
2794
2795</fiddle-embed></div>
2796
2797---
2798
Cary Clark493df1f2017-08-25 13:14:33 -04002799<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002800## refShader
2801
2802<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002803sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002804</pre>
2805
2806Optional colors used when filling a path, such as a gradient.
2807
Cary Clark4c06f5e2017-08-04 12:48:24 -04002808Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002809
2810### Return Value
2811
Cary Clark4c06f5e2017-08-04 12:48:24 -04002812<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002813
2814### Example
2815
2816<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2817
2818#### Example Output
2819
2820~~~~
2821shader unique: true
2822shader unique: false
2823~~~~
2824
2825</fiddle-embed></div>
2826
2827---
2828
Cary Clark493df1f2017-08-25 13:14:33 -04002829<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002830## setShader
2831
2832<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002833void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002834</pre>
2835
2836Optional colors used when filling a path, such as a gradient.
2837
Cary Clarkd0530ba2017-09-14 11:25:39 -04002838Sets <a href="undocumented#Shader">Shader</a> to <a href="#SkPaint_setShader_shader">shader</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Shader">Shader</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04002839Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002840
2841### Parameters
2842
Cary Clark8cc16c72017-08-25 11:51:49 -04002843<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002844how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002845 </tr>
2846</table>
2847
2848### Example
2849
2850<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2851
2852---
2853
2854# <a name="Color_Filter_Methods"></a> Color Filter Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002855<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2856<a href="undocumented#Color_Filter">Color Filter</a> may apply <a href="undocumented#Blend_Mode">Blend Mode</a>, transform the color through a matrix, or composite multiple filters.
Cary Clark8cc16c72017-08-25 11:51:49 -04002857If <a href="#Paint">Paint</a> has no <a href="undocumented#Color_Filter">Color Filter</a>, the color is unaltered.
Cary Clark12799e12017-07-28 15:18:29 -04002858
Cary Clark8cc16c72017-08-25 11:51:49 -04002859The drawn transparency can be modified without altering <a href="undocumented#Color_Filter">Color Filter</a>, by changing <a href="#Alpha">Color Alpha</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002860
2861### Example
2862
2863<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2864
Cary Clark493df1f2017-08-25 13:14:33 -04002865<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002866## getColorFilter
2867
2868<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2869SkColorFilter* getColorFilter() const
2870</pre>
2871
Cary Clark4c06f5e2017-08-04 12:48:24 -04002872Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2873Does not alter <a href="undocumented#Color_Filter">Color Filter</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002874
2875### Return Value
2876
Cary Clark4c06f5e2017-08-04 12:48:24 -04002877<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002878
2879### Example
2880
2881<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2882
2883#### Example Output
2884
2885~~~~
2886nullptr == color filter
2887nullptr != color filter
2888~~~~
2889
2890</fiddle-embed></div>
2891
2892---
2893
Cary Clark493df1f2017-08-25 13:14:33 -04002894<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002895## refColorFilter
2896
2897<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002898sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002899</pre>
2900
Cary Clark4c06f5e2017-08-04 12:48:24 -04002901Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2902Increases <a href="undocumented#Color_Filter">Color Filter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002903
2904### Return Value
2905
Cary Clark4c06f5e2017-08-04 12:48:24 -04002906<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002907
2908### Example
2909
2910<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2911
2912#### Example Output
2913
2914~~~~
2915color filter unique: true
2916color filter unique: false
2917~~~~
2918
2919</fiddle-embed></div>
2920
2921---
2922
Cary Clark493df1f2017-08-25 13:14:33 -04002923<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002924## setColorFilter
2925
2926<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002927void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002928</pre>
2929
Cary Clark6fc50412017-09-21 12:31:06 -04002930Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2931<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2932
2933Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002934
2935### Parameters
2936
Cary Clark8cc16c72017-08-25 11:51:49 -04002937<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002938<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002939 </tr>
2940</table>
2941
2942### Example
2943
2944<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2945
2946---
2947
2948# <a name="Blend_Mode_Methods"></a> Blend Mode Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002949<a href="undocumented#Blend_Mode">Blend Mode</a> describes how <a href="undocumented#Color">Color</a> combines with the destination color.
Cary Clark8cc16c72017-08-25 11:51:49 -04002950The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002951over the destination color.
2952
2953### Example
2954
2955<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2956
2957### See Also
2958
Cary Clark4c06f5e2017-08-04 12:48:24 -04002959<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002960
Cary Clark493df1f2017-08-25 13:14:33 -04002961<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002962## getBlendMode
2963
2964<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2965SkBlendMode getBlendMode() const
2966</pre>
2967
Cary Clark4c06f5e2017-08-04 12:48:24 -04002968Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002969By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002970
2971### Return Value
2972
2973mode used to combine source color with destination color
2974
2975### Example
2976
2977<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2978
2979#### Example Output
2980
2981~~~~
2982kSrcOver == getBlendMode
2983kSrcOver != getBlendMode
2984~~~~
2985
2986</fiddle-embed></div>
2987
2988---
2989
Cary Clark493df1f2017-08-25 13:14:33 -04002990<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002991## isSrcOver
2992
2993<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2994bool isSrcOver() const
2995</pre>
2996
Cary Clark8cc16c72017-08-25 11:51:49 -04002997Returns true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, the default.
Cary Clark12799e12017-07-28 15:18:29 -04002998
2999### Return Value
3000
Cary Clark8cc16c72017-08-25 11:51:49 -04003001true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003002
3003### Example
3004
3005<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3006
3007#### Example Output
3008
3009~~~~
3010isSrcOver == true
3011isSrcOver != true
3012~~~~
3013
3014</fiddle-embed></div>
3015
3016---
3017
Cary Clark493df1f2017-08-25 13:14:33 -04003018<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003019## setBlendMode
3020
3021<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3022void setBlendMode(SkBlendMode mode)
3023</pre>
3024
Cary Clark8cc16c72017-08-25 11:51:49 -04003025Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003026Does not check for valid input.
3027
3028### Parameters
3029
Cary Clark8cc16c72017-08-25 11:51:49 -04003030<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003031<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003032 </tr>
3033</table>
3034
3035### Example
3036
3037<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3038
3039#### Example Output
3040
3041~~~~
3042isSrcOver == true
3043isSrcOver != true
3044~~~~
3045
3046</fiddle-embed></div>
3047
3048---
3049
3050# <a name="Path_Effect_Methods"></a> Path Effect Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003051<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3052<a href="undocumented#Path_Effect">Path Effect</a> may implement dashing, custom fill effects and custom stroke effects.
Cary Clark8cc16c72017-08-25 11:51:49 -04003053If <a href="#Paint">Paint</a> has no <a href="undocumented#Path_Effect">Path Effect</a>, the path geometry is unaltered when filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04003054
3055### Example
3056
3057<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3058
3059### See Also
3060
Cary Clark4c06f5e2017-08-04 12:48:24 -04003061<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003062
Cary Clark493df1f2017-08-25 13:14:33 -04003063<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003064## getPathEffect
3065
3066<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3067SkPathEffect* getPathEffect() const
3068</pre>
3069
Cary Clark4c06f5e2017-08-04 12:48:24 -04003070Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3071Does not alter <a href="undocumented#Path_Effect">Path Effect</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003072
3073### Return Value
3074
Cary Clark4c06f5e2017-08-04 12:48:24 -04003075<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003076
3077### Example
3078
3079<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3080
3081#### Example Output
3082
3083~~~~
3084nullptr == path effect
3085nullptr != path effect
3086~~~~
3087
3088</fiddle-embed></div>
3089
3090---
3091
Cary Clark493df1f2017-08-25 13:14:33 -04003092<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003093## refPathEffect
3094
3095<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003096sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003097</pre>
3098
Cary Clark4c06f5e2017-08-04 12:48:24 -04003099Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3100Increases <a href="undocumented#Path_Effect">Path Effect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003101
3102### Return Value
3103
Cary Clark4c06f5e2017-08-04 12:48:24 -04003104<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003105
3106### Example
3107
3108<div><fiddle-embed name="c55c74f8f581870bd2c18f2f99765579">
3109
3110#### Example Output
3111
3112~~~~
3113path effect unique: true
3114path effect unique: false
3115~~~~
3116
3117</fiddle-embed></div>
3118
3119---
3120
Cary Clark493df1f2017-08-25 13:14:33 -04003121<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003122## setPathEffect
3123
3124<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003125void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003126</pre>
3127
Cary Clark6fc50412017-09-21 12:31:06 -04003128Sets <a href="undocumented#Path_Effect">Path Effect</a> to <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3129<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3130
3131Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003132
3133### Parameters
3134
Cary Clark8cc16c72017-08-25 11:51:49 -04003135<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003136replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003137 </tr>
3138</table>
3139
3140### Example
3141
3142<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3143
3144---
3145
3146# <a name="Mask_Filter_Methods"></a> Mask Filter Methods
Cary Clarkce101242017-09-01 15:51:02 -04003147<a href="undocumented#Mask_Filter">Mask Filter</a> uses coverage of the shape drawn to create <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003148<a href="undocumented#Mask_Filter">Mask Filter</a> operates at a lower level than <a href="undocumented#Rasterizer">Rasterizer</a>; <a href="undocumented#Mask_Filter">Mask Filter</a> takes a <a href="undocumented#Mask">Mask</a>,
3149and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003150
3151<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3152creating a blur effect. Set <a href="undocumented#Mask_Filter">Mask Filter</a> to nullptr to prevent <a href="undocumented#Mask_Filter">Mask Filter</a> from
3153modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003154
3155### Example
3156
3157<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3158
Cary Clark493df1f2017-08-25 13:14:33 -04003159<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003160## getMaskFilter
3161
3162<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3163SkMaskFilter* getMaskFilter() const
3164</pre>
3165
Cary Clark4c06f5e2017-08-04 12:48:24 -04003166Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3167Does not alter <a href="undocumented#Mask_Filter">Mask Filter</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003168
3169### Return Value
3170
Cary Clark4c06f5e2017-08-04 12:48:24 -04003171<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003172
3173### Example
3174
3175<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3176
3177#### Example Output
3178
3179~~~~
3180nullptr == mask filter
3181nullptr != mask filter
3182~~~~
3183
3184</fiddle-embed></div>
3185
3186---
3187
Cary Clark493df1f2017-08-25 13:14:33 -04003188<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003189## refMaskFilter
3190
3191<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003192sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003193</pre>
3194
Cary Clark4c06f5e2017-08-04 12:48:24 -04003195Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003196
Cary Clark4c06f5e2017-08-04 12:48:24 -04003197Increases <a href="undocumented#Mask_Filter">Mask Filter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003198
3199### Return Value
3200
Cary Clark4c06f5e2017-08-04 12:48:24 -04003201<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003202
3203### Example
3204
3205<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3206
3207#### Example Output
3208
3209~~~~
3210mask filter unique: true
3211mask filter unique: false
3212~~~~
3213
3214</fiddle-embed></div>
3215
3216---
3217
Cary Clark493df1f2017-08-25 13:14:33 -04003218<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003219## setMaskFilter
3220
3221<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003222void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003223</pre>
3224
Cary Clark6fc50412017-09-21 12:31:06 -04003225Sets <a href="undocumented#Mask_Filter">Mask Filter</a> to <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3226<a href="undocumented#Mask_Filter">Mask Filter</a>. Pass nullptr to clear <a href="undocumented#Mask_Filter">Mask Filter</a> and leave <a href="undocumented#Mask_Filter">Mask Filter</a> effect on
3227<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3228
Cary Clark4c06f5e2017-08-04 12:48:24 -04003229Does not affect <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003230Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003231
3232### Parameters
3233
Cary Clark8cc16c72017-08-25 11:51:49 -04003234<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003235modifies clipping mask generated from drawn geometry</td>
3236 </tr>
3237</table>
3238
3239### Example
3240
3241<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3242
3243---
3244
3245# <a name="Typeface_Methods"></a> Typeface Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003246<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3247<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3248The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003249implementation.
3250
3251### Example
3252
Ben Wagner700ff172017-11-08 15:37:22 -05003253<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003254
Cary Clark493df1f2017-08-25 13:14:33 -04003255<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003256## getTypeface
3257
3258<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3259SkTypeface* getTypeface() const
3260</pre>
3261
Cary Clark4c06f5e2017-08-04 12:48:24 -04003262Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003263Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003264
3265### Return Value
3266
Cary Clark4c06f5e2017-08-04 12:48:24 -04003267<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003268
3269### Example
3270
3271<div><fiddle-embed name="4d9ffb5761b62a9e3bc9b0bca8787bce">
3272
3273#### Example Output
3274
3275~~~~
3276nullptr == typeface
3277nullptr != typeface
3278~~~~
3279
3280</fiddle-embed></div>
3281
3282---
3283
Cary Clark493df1f2017-08-25 13:14:33 -04003284<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003285## refTypeface
3286
3287<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003288sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003289</pre>
3290
Cary Clark4c06f5e2017-08-04 12:48:24 -04003291Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003292
3293### Return Value
3294
Cary Clark4c06f5e2017-08-04 12:48:24 -04003295<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003296
3297### Example
3298
3299<div><fiddle-embed name="c8edce7b36a3ffda8af4fe89d7187dbc">
3300
3301#### Example Output
3302
3303~~~~
3304typeface1 != typeface2
3305typeface1 == typeface2
3306~~~~
3307
3308</fiddle-embed></div>
3309
3310---
3311
Cary Clark493df1f2017-08-25 13:14:33 -04003312<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003313## setTypeface
3314
3315<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003316void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003317</pre>
3318
Cary Clark6fc50412017-09-21 12:31:06 -04003319Sets <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>.
3320Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3321<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003322
3323### Parameters
3324
Cary Clark8cc16c72017-08-25 11:51:49 -04003325<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003326font and style used to draw text</td>
3327 </tr>
3328</table>
3329
3330### Example
3331
3332<div><fiddle-embed name="3d2656ec4c555ed2c7ec086720124a2a"></fiddle-embed></div>
3333
3334---
3335
3336# <a name="Rasterizer_Methods"></a> Rasterizer Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003337<a href="undocumented#Rasterizer">Rasterizer</a> controls how shapes are converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
3338<a href="undocumented#Rasterizer">Rasterizer</a> operates at a higher level than <a href="undocumented#Mask_Filter">Mask Filter</a>; <a href="undocumented#Rasterizer">Rasterizer</a> takes a <a href="SkPath_Reference#Path">Path</a>,
3339and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003340
Cary Clark4c06f5e2017-08-04 12:48:24 -04003341<a href="undocumented#Rasterizer">Rasterizer</a> may change the geometry and transparency of the shape, such as
Cary Clark8cc16c72017-08-25 11:51:49 -04003342creating a shadow effect. <a href="undocumented#Rasterizer">Rasterizer</a> forms the base of <a href="#Layer">Rasterizer Layer</a>, which
Cary Clark12799e12017-07-28 15:18:29 -04003343creates effects like embossing and outlining.
Cary Clark6fc50412017-09-21 12:31:06 -04003344
Cary Clarkbc5697d2017-10-04 14:31:33 -04003345<a href="undocumented#Rasterizer">Rasterizer</a> applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Arc">Arcs</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003346<a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003347
3348### Example
3349
3350<div><fiddle-embed name="e63f8a50996699342a14c6e54d684108"></fiddle-embed></div>
3351
Cary Clark493df1f2017-08-25 13:14:33 -04003352<a name="SkPaint_getRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003353## getRasterizer
3354
3355<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3356SkRasterizer* getRasterizer() const
3357</pre>
3358
Cary Clark4c06f5e2017-08-04 12:48:24 -04003359Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3360Does not alter <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003361
3362### Return Value
3363
Cary Clark4c06f5e2017-08-04 12:48:24 -04003364<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003365
3366### Example
3367
3368<div><fiddle-embed name="0707d407c3a14388b107af8ae5873e55">
3369
3370#### Example Output
3371
3372~~~~
3373nullptr == rasterizer
3374nullptr != rasterizer
3375~~~~
3376
3377</fiddle-embed></div>
3378
3379---
3380
Cary Clark493df1f2017-08-25 13:14:33 -04003381<a name="SkPaint_refRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003382## refRasterizer
3383
3384<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003385sk_sp&lt;SkRasterizer&gt; refRasterizer() const
Cary Clark12799e12017-07-28 15:18:29 -04003386</pre>
3387
Cary Clark4c06f5e2017-08-04 12:48:24 -04003388Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3389Increases <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003390
3391### Return Value
3392
Cary Clark4c06f5e2017-08-04 12:48:24 -04003393<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003394
3395### Example
3396
3397<div><fiddle-embed name="c0855ce19a33cb7e5747750ef341b7b3">
3398
3399#### Example Output
3400
3401~~~~
3402rasterizer unique: true
3403rasterizer unique: false
3404~~~~
3405
3406</fiddle-embed></div>
3407
3408---
3409
Cary Clark493df1f2017-08-25 13:14:33 -04003410<a name="SkPaint_setRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003411## setRasterizer
3412
3413<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003414void setRasterizer(sk_sp&lt;SkRasterizer&gt; rasterizer)
Cary Clark12799e12017-07-28 15:18:29 -04003415</pre>
3416
Cary Clark6fc50412017-09-21 12:31:06 -04003417Sets <a href="undocumented#Rasterizer">Rasterizer</a> to <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3418<a href="undocumented#Rasterizer">Rasterizer</a>. Pass nullptr to clear <a href="undocumented#Rasterizer">Rasterizer</a> and leave <a href="undocumented#Rasterizer">Rasterizer</a> effect on
3419<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3420
Cary Clark4c06f5e2017-08-04 12:48:24 -04003421Does not affect <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003422Increments <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003423
3424### Parameters
3425
Cary Clark8cc16c72017-08-25 11:51:49 -04003426<table> <tr> <td><a name="SkPaint_setRasterizer_rasterizer"> <code><strong>rasterizer </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003427how geometry is converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003428 </tr>
3429</table>
3430
3431### Example
3432
3433<div><fiddle-embed name="aec8ed9296c1628073086a33039f62b7"></fiddle-embed></div>
3434
3435---
3436
3437# <a name="Image_Filter_Methods"></a> Image Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003438<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3439with <a href="undocumented#Blend_Mode">Blend Mode</a> set to <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>. <a href="undocumented#Image_Filter">Image Filter</a> creates a new bitmap,
Cary Clark4c06f5e2017-08-04 12:48:24 -04003440which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003441
Cary Clark4c06f5e2017-08-04 12:48:24 -04003442<a href="undocumented#Image_Filter">Image Filter</a> is higher level than <a href="undocumented#Mask_Filter">Mask Filter</a>; for instance, an <a href="undocumented#Image_Filter">Image Filter</a>
Cary Clarkce101242017-09-01 15:51:02 -04003443can operate on all channels of <a href="undocumented#Color">Color</a>, while <a href="undocumented#Mask_Filter">Mask Filter</a> generates <a href="#Alpha">Alpha</a> only.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003444<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
3445<a href="undocumented#Mask_Filter">Mask Filter</a> and <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003446
3447### Example
3448
3449<div><fiddle-embed name="88804938b49eb4f7c7f01ad52f4db0d8"></fiddle-embed></div>
3450
Cary Clark493df1f2017-08-25 13:14:33 -04003451<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003452## getImageFilter
3453
3454<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3455SkImageFilter* getImageFilter() const
3456</pre>
3457
Cary Clark4c06f5e2017-08-04 12:48:24 -04003458Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3459Does not alter <a href="undocumented#Image_Filter">Image Filter</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003460
3461### Return Value
3462
Cary Clark4c06f5e2017-08-04 12:48:24 -04003463<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003464
3465### Example
3466
3467<div><fiddle-embed name="38788d42772641606e08c60d9dd418a2">
3468
3469#### Example Output
3470
3471~~~~
3472nullptr == image filter
3473nullptr != image filter
3474~~~~
3475
3476</fiddle-embed></div>
3477
3478---
3479
Cary Clark493df1f2017-08-25 13:14:33 -04003480<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003481## refImageFilter
3482
3483<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003484sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003485</pre>
3486
Cary Clark4c06f5e2017-08-04 12:48:24 -04003487Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3488Increases <a href="undocumented#Image_Filter">Image Filter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003489
3490### Return Value
3491
Cary Clark4c06f5e2017-08-04 12:48:24 -04003492<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003493
3494### Example
3495
3496<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3497
3498#### Example Output
3499
3500~~~~
3501image filter unique: true
3502image filter unique: false
3503~~~~
3504
3505</fiddle-embed></div>
3506
3507---
3508
Cary Clark493df1f2017-08-25 13:14:33 -04003509<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003510## setImageFilter
3511
3512<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003513void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003514</pre>
3515
Cary Clark6fc50412017-09-21 12:31:06 -04003516Sets <a href="undocumented#Image_Filter">Image Filter</a> to <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3517<a href="undocumented#Image_Filter">Image Filter</a>. Pass nullptr to clear <a href="undocumented#Image_Filter">Image Filter</a>, and remove <a href="undocumented#Image_Filter">Image Filter</a> effect
Cary Clark12799e12017-07-28 15:18:29 -04003518on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003519
Cary Clark4c06f5e2017-08-04 12:48:24 -04003520Does not affect <a href="undocumented#Rasterizer">Rasterizer</a> or <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003521Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003522
3523### Parameters
3524
Cary Clark8cc16c72017-08-25 11:51:49 -04003525<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003526how <a href="undocumented#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003527 </tr>
3528</table>
3529
3530### Example
3531
3532<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3533
3534---
3535
3536# <a name="Draw_Looper_Methods"></a> Draw Looper Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003537<a href="undocumented#Draw_Looper">Draw Looper</a> sets a modifier that communicates state from one <a href="undocumented#Draw_Layer">Draw Layer</a>
Cary Clark12799e12017-07-28 15:18:29 -04003538to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003539
Cary Clark4c06f5e2017-08-04 12:48:24 -04003540<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3541<a href="undocumented#Draw_Looper">Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3542Set <a href="undocumented#Draw_Looper">Draw Looper</a> to nullptr to prevent <a href="undocumented#Draw_Looper">Draw Looper</a> from modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003543
3544### Example
3545
3546<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3547
Cary Clark493df1f2017-08-25 13:14:33 -04003548<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003549## getDrawLooper
3550
3551<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3552SkDrawLooper* getDrawLooper() const
3553</pre>
3554
Cary Clark4c06f5e2017-08-04 12:48:24 -04003555Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3556Does not alter <a href="undocumented#Draw_Looper">Draw Looper</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003557
3558### Return Value
3559
Cary Clark4c06f5e2017-08-04 12:48:24 -04003560<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003561
3562### Example
3563
3564<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3565
3566#### Example Output
3567
3568~~~~
3569nullptr == draw looper
3570nullptr != draw looper
3571~~~~
3572
3573</fiddle-embed></div>
3574
3575---
3576
Cary Clark493df1f2017-08-25 13:14:33 -04003577<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003578## refDrawLooper
3579
3580<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003581sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003582</pre>
3583
Cary Clark4c06f5e2017-08-04 12:48:24 -04003584Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3585Increases <a href="undocumented#Draw_Looper">Draw Looper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003586
3587### Return Value
3588
Cary Clark4c06f5e2017-08-04 12:48:24 -04003589<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003590
3591### Example
3592
3593<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3594
3595#### Example Output
3596
3597~~~~
3598draw looper unique: true
3599draw looper unique: false
3600~~~~
3601
3602</fiddle-embed></div>
3603
3604---
3605
Cary Clark493df1f2017-08-25 13:14:33 -04003606<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003607## getLooper
3608
3609<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3610SkDrawLooper* getLooper() const
3611</pre>
3612
3613Deprecated.
3614
3615(see bug.skia.org/6259)
3616
3617### Return Value
3618
Cary Clark4c06f5e2017-08-04 12:48:24 -04003619<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003620
3621---
3622
Cary Clark493df1f2017-08-25 13:14:33 -04003623<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003624## setDrawLooper
3625
3626<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003627void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003628</pre>
3629
Cary Clark6fc50412017-09-21 12:31:06 -04003630Sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
3631<a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a>. Pass nullptr to clear <a href="undocumented#Draw_Looper">Draw Looper</a> and leave <a href="undocumented#Draw_Looper">Draw Looper</a> effect on
3632drawing unaltered.
3633
3634Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003635
3636### Parameters
3637
Cary Clark8cc16c72017-08-25 11:51:49 -04003638<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003639iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003640 </tr>
3641</table>
3642
3643### Example
3644
3645<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3646
3647---
3648
Cary Clark493df1f2017-08-25 13:14:33 -04003649<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003650## setLooper
3651
3652<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003653void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003654</pre>
3655
3656Deprecated.
3657
3658(see bug.skia.org/6259)
3659
3660### Parameters
3661
Cary Clark8cc16c72017-08-25 11:51:49 -04003662<table> <tr> <td><a name="SkPaint_setLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3663sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setLooper_drawLooper">drawLooper</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003664 </tr>
3665
3666---
3667
3668</table>
3669
3670# <a name="Text_Align"></a> Text Align
3671
Cary Clark8cc16c72017-08-25 11:51:49 -04003672## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003673
Cary Clark154beea2017-10-26 07:58:48 -04003674<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003675enum <a href="#SkPaint_Align">Align</a> {
3676<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3677<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3678<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003679};</pre>
3680
Cary Clark8cc16c72017-08-25 11:51:49 -04003681<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003682<a href="#SkPaint_Align">Align</a> affects <a href="#Glyph">Glyphs</a> drawn with: <a href="#SkCanvas_drawText">SkCanvas::drawText</a>, <a href="#SkCanvas_drawPosText">SkCanvas::drawPosText</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04003683<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3684<a href="#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
3685and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003686as well as calls that place text <a href="#Glyph">Glyphs</a> like <a href="#SkPaint_getTextWidths">getTextWidths</a> and <a href="#SkPaint_getTextPath">getTextPath</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003687
3688The text position is set by the font for both horizontal and vertical text.
3689Typically, for horizontal text, the position is to the left side of the glyph on the
3690base line; and for vertical text, the position is the horizontal center of the glyph
3691at the caps height.
3692
Cary Clark8cc16c72017-08-25 11:51:49 -04003693<a href="#SkPaint_Align">Align</a> adjusts the glyph position to center it or move it to abut the position
Cary Clark12799e12017-07-28 15:18:29 -04003694using the metrics returned by the font.
3695
Cary Clark8cc16c72017-08-25 11:51:49 -04003696<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003697
3698### Constants
3699
3700<table>
3701 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003702 <td><a name="SkPaint_kLeft_Align"> <code><strong>SkPaint::kLeft_Align </strong></code> </a></td><td>0</td><td>Leaves the glyph at the position computed by the font offset by the text position.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003703 </tr>
3704 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003705 <td><a name="SkPaint_kCenter_Align"> <code><strong>SkPaint::kCenter_Align </strong></code> </a></td><td>1</td><td>Moves the glyph half its width if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> clear, and
3706half its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003707 </tr>
3708 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003709 <td><a name="SkPaint_kRight_Align"> <code><strong>SkPaint::kRight_Align </strong></code> </a></td><td>2</td><td>Moves the glyph by its width if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> clear,
3710and by its height if <a href="#SkPaint_Flags">Flags</a> has <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> set.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003711 </tr>
3712
3713</table>
3714
Cary Clark8cc16c72017-08-25 11:51:49 -04003715## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003716
Cary Clark154beea2017-10-26 07:58:48 -04003717<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003718enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003719<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003720};</pre>
3721
3722### Constants
3723
3724<table>
3725 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003726 <td><a name="SkPaint_kAlignCount"> <code><strong>SkPaint::kAlignCount </strong></code> </a></td><td>3</td><td>The number of different <a href="#Text_Align">Text Align</a> values defined.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003727 </tr>
3728
3729</table>
3730
3731### Example
3732
3733<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3734
3735### Example
3736
Cary Clark8cc16c72017-08-25 11:51:49 -04003737<div><fiddle-embed name="f1cbbbafe6b3c52b81309cccbf96a308"><div><a href="#Vertical_Text">Vertical Text</a> treats <a href="#SkPaint_kLeft_Align">kLeft Align</a> as top align, and <a href="#SkPaint_kRight_Align">kRight Align</a> as bottom align.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003738
Cary Clark493df1f2017-08-25 13:14:33 -04003739<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003740## getTextAlign
3741
3742<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3743Align getTextAlign() const
3744</pre>
3745
Cary Clark8cc16c72017-08-25 11:51:49 -04003746Returns <a href="#Text_Align">Text Align</a>.
3747Returns <a href="#SkPaint_kLeft_Align">kLeft Align</a> if <a href="#Text_Align">Text Align</a> has not been set.
Cary Clark12799e12017-07-28 15:18:29 -04003748
3749### Return Value
3750
3751text placement relative to position
3752
3753### Example
3754
3755<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3756
3757#### Example Output
3758
3759~~~~
3760kLeft_Align == default
3761~~~~
3762
3763</fiddle-embed></div>
3764
3765---
3766
Cary Clark493df1f2017-08-25 13:14:33 -04003767<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003768## setTextAlign
3769
3770<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3771void setTextAlign(Align align)
3772</pre>
3773
Cary Clark8cc16c72017-08-25 11:51:49 -04003774Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3775Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003776
3777### Parameters
3778
Cary Clark8cc16c72017-08-25 11:51:49 -04003779<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003780text placement relative to position</td>
3781 </tr>
3782</table>
3783
3784### Example
3785
Cary Clark4c06f5e2017-08-04 12:48:24 -04003786<div><fiddle-embed name="d37540afd918506ac2594665ca63979b"><div><a href="undocumented#Text">Text</a> is left-aligned by default, and then set to center. Setting the
Cary Clark12799e12017-07-28 15:18:29 -04003787alignment out of range has no effect.</div></fiddle-embed></div>
3788
3789---
3790
3791# <a name="Text_Size"></a> Text Size
Cary Clark8cc16c72017-08-25 11:51:49 -04003792<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3793<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3794<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003795Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003796
3797### Example
3798
3799<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3800
Cary Clark493df1f2017-08-25 13:14:33 -04003801<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003802## getTextSize
3803
3804<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3805SkScalar getTextSize() const
3806</pre>
3807
Cary Clark8cc16c72017-08-25 11:51:49 -04003808Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003809
3810### Return Value
3811
3812typographic height of text
3813
3814### Example
3815
3816<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3817
3818---
3819
Cary Clark493df1f2017-08-25 13:14:33 -04003820<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003821## setTextSize
3822
3823<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3824void setTextSize(SkScalar textSize)
3825</pre>
3826
Cary Clark8cc16c72017-08-25 11:51:49 -04003827Sets <a href="#Text_Size">Text Size</a> in points.
3828Has no effect if <a href="#SkPaint_setTextSize_textSize">textSize</a> is not greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04003829
3830### Parameters
3831
Cary Clark8cc16c72017-08-25 11:51:49 -04003832<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003833typographic height of text</td>
3834 </tr>
3835</table>
3836
3837### Example
3838
3839<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3840
3841---
3842
3843# <a name="Text_Scale_X"></a> Text Scale X
Cary Clark8cc16c72017-08-25 11:51:49 -04003844<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003845<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003846is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003847<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3848<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003849
3850### Example
3851
3852<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3853
Cary Clark493df1f2017-08-25 13:14:33 -04003854<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003855## getTextScaleX
3856
3857<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3858SkScalar getTextScaleX() const
3859</pre>
3860
Cary Clark8cc16c72017-08-25 11:51:49 -04003861Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003862Default value is 1.
3863
3864### Return Value
3865
3866text horizontal scale
3867
3868### Example
3869
3870<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3871
3872---
3873
Cary Clark493df1f2017-08-25 13:14:33 -04003874<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003875## setTextScaleX
3876
3877<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3878void setTextScaleX(SkScalar scaleX)
3879</pre>
3880
Cary Clark8cc16c72017-08-25 11:51:49 -04003881Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003882Default value is 1.
3883
3884### Parameters
3885
Cary Clark8cc16c72017-08-25 11:51:49 -04003886<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003887text horizontal scale</td>
3888 </tr>
3889</table>
3890
3891### Example
3892
3893<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3894
3895---
3896
3897# <a name="Text_Skew_X"></a> Text Skew X
Cary Clark8cc16c72017-08-25 11:51:49 -04003898<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003899<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003900is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003901<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3902<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003903
3904### Example
3905
3906<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3907
Cary Clark493df1f2017-08-25 13:14:33 -04003908<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003909## getTextSkewX
3910
3911<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3912SkScalar getTextSkewX() const
3913</pre>
3914
Cary Clark8cc16c72017-08-25 11:51:49 -04003915Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003916Default value is zero.
3917
3918### Return Value
3919
3920additional shear in x-axis relative to y-axis
3921
3922### Example
3923
3924<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3925
3926---
3927
Cary Clark493df1f2017-08-25 13:14:33 -04003928<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003929## setTextSkewX
3930
3931<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3932void setTextSkewX(SkScalar skewX)
3933</pre>
3934
Cary Clark8cc16c72017-08-25 11:51:49 -04003935Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003936Default value is zero.
3937
3938### Parameters
3939
Cary Clark8cc16c72017-08-25 11:51:49 -04003940<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003941additional shear in x-axis relative to y-axis</td>
3942 </tr>
3943</table>
3944
3945### Example
3946
3947<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3948
3949---
3950
3951# <a name="Text_Encoding"></a> Text Encoding
3952
Cary Clark8cc16c72017-08-25 11:51:49 -04003953## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003954
Cary Clark154beea2017-10-26 07:58:48 -04003955<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003956enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3957<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3958<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3959<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3960<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003961};</pre>
3962
Cary Clark6fc50412017-09-21 12:31:06 -04003963<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clarkbc5697d2017-10-04 14:31:33 -04003964size, or glyph indices. Characters are encoded as specified by the<a href="undocumented#Unicode">Unicode</a> standard.
Cary Clark6fc50412017-09-21 12:31:06 -04003965
Cary Clark4c06f5e2017-08-04 12:48:24 -04003966Character codes encoded size are specified by <a href="undocumented#UTF_8">UTF-8</a>, <a href="undocumented#UTF_16">UTF-16</a>, or <a href="undocumented#UTF_32">UTF-32</a>.
Cary Clarkbc5697d2017-10-04 14:31:33 -04003967All character code formats are able to represent all of <a href="undocumented#Unicode">Unicode</a>, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003968in the total storage required.
3969
Cary Clark6fc50412017-09-21 12:31:06 -04003970<a href="undocumented#UTF_8">UTF-8</a> (<a href="undocumented#RFC">RFC</a> 3629)encodes each character as one or more 8-bit bytes.
3971
3972<a href="undocumented#UTF_16">UTF-16</a> (<a href="undocumented#RFC">RFC</a> 2781)encodes each character as one or two 16-bit words.
3973
3974<a href="undocumented#UTF_32">UTF-32</a>encodes each character as one 32-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003975
Cary Clark4c06f5e2017-08-04 12:48:24 -04003976<a href="undocumented#Font_Manager">Font Manager</a> uses font data to convert character code points into glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04003977A glyph index is a 16-bit word.
3978
Cary Clark8cc16c72017-08-25 11:51:49 -04003979<a href="#SkPaint_TextEncoding">TextEncoding</a> is set to <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04003980
3981### Constants
3982
3983<table>
3984 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003985 <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent <a href="undocumented#UTF_8">UTF-8</a> or <a href="undocumented#ASCII">ASCII</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003986 </tr>
3987 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003988 <td><a name="SkPaint_kUTF16_TextEncoding"> <code><strong>SkPaint::kUTF16_TextEncoding </strong></code> </a></td><td>1</td><td>Uses two byte words to represent most of <a href="undocumented#Unicode">Unicode</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003989 </tr>
3990 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003991 <td><a name="SkPaint_kUTF32_TextEncoding"> <code><strong>SkPaint::kUTF32_TextEncoding </strong></code> </a></td><td>2</td><td>Uses four byte words to represent all of <a href="undocumented#Unicode">Unicode</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003992 </tr>
3993 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003994 <td><a name="SkPaint_kGlyphID_TextEncoding"> <code><strong>SkPaint::kGlyphID_TextEncoding </strong></code> </a></td><td>3</td><td>Uses two byte words to represent glyph indices.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003995 </tr>
3996
3997</table>
3998
3999### Example
4000
Cary Clarkbc5697d2017-10-04 14:31:33 -04004001<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in <a href="undocumented#UTF_8">UTF-8</a>.
4002Second line is encoded in <a href="undocumented#UTF_16">UTF-16</a>.
4003Third line is encoded in <a href="undocumented#UTF_32">UTF-32</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004004Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
4005
Cary Clark493df1f2017-08-25 13:14:33 -04004006<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004007## getTextEncoding
4008
4009<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4010TextEncoding getTextEncoding() const
4011</pre>
4012
Cary Clark8cc16c72017-08-25 11:51:49 -04004013Returns <a href="#Text_Encoding">Text Encoding</a>.
4014<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004015
4016### Return Value
4017
Cary Clark8cc16c72017-08-25 11:51:49 -04004018one 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
4019<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004020
4021### Example
4022
4023<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
4024
4025#### Example Output
4026
4027~~~~
4028kUTF8_TextEncoding == text encoding
4029kGlyphID_TextEncoding == text encoding
4030~~~~
4031
4032</fiddle-embed></div>
4033
4034---
4035
Cary Clark493df1f2017-08-25 13:14:33 -04004036<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004037## setTextEncoding
4038
4039<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4040void setTextEncoding(TextEncoding encoding)
4041</pre>
4042
Cary Clark8cc16c72017-08-25 11:51:49 -04004043Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
4044<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
4045Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004046
4047### Parameters
4048
Cary Clark8cc16c72017-08-25 11:51:49 -04004049<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
4050one 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
4051<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004052 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004053#
4054
Cary Clark12799e12017-07-28 15:18:29 -04004055</table>
4056
4057### Example
4058
4059<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
4060
4061#### Example Output
4062
4063~~~~
40644 != text encoding
4065~~~~
4066
4067</fiddle-embed></div>
4068
4069---
4070
4071# <a name="Font_Metrics"></a> Font Metrics
Cary Clarkce101242017-09-01 15:51:02 -04004072<a href="#Font_Metrics">Font Metrics</a> describe dimensions common to the <a href="#Glyph">Glyphs</a> in <a href="undocumented#Typeface">Typeface</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004073The dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data and do not take
Cary Clark8cc16c72017-08-25 11:51:49 -04004074<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004075
Cary Clark4c06f5e2017-08-04 12:48:24 -04004076<a href="undocumented#Font">Font</a> dimensions specify the anchor to the left of the glyph at baseline as the origin.
Cary Clark12799e12017-07-28 15:18:29 -04004077X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4078are positive.
4079Y-axis values above the baseline are negative, and below the baseline are positive.
4080
4081### Example
4082
Ben Wagnere5806492017-11-09 12:08:31 -05004083<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004084
Cary Clark8cc16c72017-08-25 11:51:49 -04004085# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004086
Cary Clark154beea2017-10-26 07:58:48 -04004087<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004088struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4089enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4090<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4091<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4092<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4093<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004094};
4095
Cary Clark8cc16c72017-08-25 11:51:49 -04004096uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4097<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4098<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4099<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4100<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4101<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4102<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4103<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4104<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4105<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4106<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4107<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4108<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4109<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4110<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4111<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004112
Cary Clark8cc16c72017-08-25 11:51:49 -04004113bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4114bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4115bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4116bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004117};</pre>
4118
Cary Clark154beea2017-10-26 07:58:48 -04004119<a href="#SkPaint_FontMetrics">FontMetrics</a> is filled out by <a href="#SkPaint_getFontMetrics">getFontMetrics</a>. <a href="#SkPaint_FontMetrics">FontMetrics</a> contents reflect the values
4120computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4121not available.
4122
Ben Wagnere5806492017-11-09 12:08:31 -05004123All vertical values relative to the baseline are given y-down. As such, zero is on the
4124baseline, negative values are above the baseline, and positive values are below the
4125baseline.
4126
Cary Clark154beea2017-10-26 07:58:48 -04004127<a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a> and <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a> have a bit set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> if their values
4128are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004129
Cary Clark154beea2017-10-26 07:58:48 -04004130<a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a> and <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a> have a bit set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> if their values
4131are valid, since their value may be zero.
4132
Cary Clark8cc16c72017-08-25 11:51:49 -04004133## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004134
Cary Clark154beea2017-10-26 07:58:48 -04004135<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004136enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4137<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4138<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4139<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4140<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004141};</pre>
4142
Cary Clark154beea2017-10-26 07:58:48 -04004143<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4144the underline or strikeout metric may be valid and zero.
4145Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4146
Cary Clark12799e12017-07-28 15:18:29 -04004147### Constants
4148
4149<table>
4150 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004151 <td><a name="SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag"> <code><strong>SkPaint::FontMetrics::kUnderlineThicknessIsValid_Flag </strong></code> </a></td><td>0x0001</td><td>Set if <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a> is valid.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004152 </tr>
4153 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004154 <td><a name="SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag"> <code><strong>SkPaint::FontMetrics::kUnderlinePositionIsValid_Flag </strong></code> </a></td><td>0x0002</td><td>Set if <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a> is valid.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004155 </tr>
4156 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004157 <td><a name="SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag"> <code><strong>SkPaint::FontMetrics::kStrikeoutThicknessIsValid_Flag </strong></code> </a></td><td>0x0004</td><td>Set if <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a> is valid.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004158 </tr>
4159 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004160 <td><a name="SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag"> <code><strong>SkPaint::FontMetrics::kStrikeoutPositionIsValid_Flag </strong></code> </a></td><td>0x0008</td><td>Set if <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a> is valid.</td>
Cary Clark12799e12017-07-28 15:18:29 -04004161 </tr>
4162
4163</table>
4164
Cary Clark8cc16c72017-08-25 11:51:49 -04004165<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004166
Cary Clark8cc16c72017-08-25 11:51:49 -04004167<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004168
Cary Clark8cc16c72017-08-25 11:51:49 -04004169<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004170
Ben Wagnere5806492017-11-09 12:08:31 -05004171Greatest extent above the baseline for any glyph.
4172Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004173
Cary Clark8cc16c72017-08-25 11:51:49 -04004174<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004175
4176Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004177Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004178
Cary Clark8cc16c72017-08-25 11:51:49 -04004179<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004180
4181Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004182Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004183
Cary Clark8cc16c72017-08-25 11:51:49 -04004184<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004185
Ben Wagnere5806492017-11-09 12:08:31 -05004186Greatest extent below the baseline for any glyph.
4187Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004188
Cary Clark8cc16c72017-08-25 11:51:49 -04004189<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004190
4191Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004192Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004193
Cary Clark8cc16c72017-08-25 11:51:49 -04004194<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004195
4196Average character width, if it is available.
4197Zero if no average width is stored in the font.
4198
Cary Clark8cc16c72017-08-25 11:51:49 -04004199<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004200
4201Maximum character width.
4202
Cary Clark8cc16c72017-08-25 11:51:49 -04004203<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004204
Ben Wagnere5806492017-11-09 12:08:31 -05004205Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004206Typically less than zero.
4207
Cary Clark8cc16c72017-08-25 11:51:49 -04004208<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004209
Cary Clarkce101242017-09-01 15:51:02 -04004210Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004211Typically greater than zero.
4212
Cary Clark8cc16c72017-08-25 11:51:49 -04004213<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004214
4215Height of a lower-case 'x'.
4216May be zero if no lower-case height is stored in the font.
4217
Cary Clark8cc16c72017-08-25 11:51:49 -04004218<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004219
4220Height of an upper-case letter.
4221May be zero if no upper-case height is stored in the font.
4222
Cary Clark8cc16c72017-08-25 11:51:49 -04004223<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004224
Ben Wagnere5806492017-11-09 12:08:31 -05004225Underline thickness.
4226
4227If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004228If <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is clear, <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004229
Cary Clark8cc16c72017-08-25 11:51:49 -04004230<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004231
Ben Wagnere5806492017-11-09 12:08:31 -05004232Position of the top of the underline stroke relative to the baseline.
4233Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004234
Cary Clark8cc16c72017-08-25 11:51:49 -04004235If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4236If <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is clear, <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004237
Cary Clark8cc16c72017-08-25 11:51:49 -04004238<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004239
Ben Wagnere5806492017-11-09 12:08:31 -05004240Strikeout thickness.
4241
4242If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004243If <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is clear, <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004244
Cary Clark8cc16c72017-08-25 11:51:49 -04004245<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004246
Ben Wagnere5806492017-11-09 12:08:31 -05004247Position of the bottom of the strikeout stroke relative to the baseline.
4248Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004249
Cary Clark8cc16c72017-08-25 11:51:49 -04004250If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4251If <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is clear, <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004252
Cary Clark493df1f2017-08-25 13:14:33 -04004253<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004254## hasUnderlineThickness
4255
4256<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4257bool hasUnderlineThickness(SkScalar* thickness) const
4258</pre>
4259
Ben Wagnere5806492017-11-09 12:08:31 -05004260If <a href="#Font_Metrics">Font Metrics</a> has a valid underline <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004261<a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a> to that value. If the underline <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a> is not valid,
4262return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004263
4264### Parameters
4265
Cary Clark8cc16c72017-08-25 11:51:49 -04004266<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004267storage for underline width</td>
4268 </tr>
4269</table>
4270
4271### Return Value
4272
4273true if font specifies underline width
4274
4275---
4276
Cary Clark493df1f2017-08-25 13:14:33 -04004277<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004278## hasUnderlinePosition
4279
4280<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4281bool hasUnderlinePosition(SkScalar* position) const
4282</pre>
4283
Ben Wagnere5806492017-11-09 12:08:31 -05004284If <a href="#Font_Metrics">Font Metrics</a> has a valid underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004285<a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a> to that value. If the underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a> is not valid,
4286return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004287
4288### Parameters
4289
Cary Clark8cc16c72017-08-25 11:51:49 -04004290<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4291storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004292 </tr>
4293</table>
4294
4295### Return Value
4296
Cary Clark8cc16c72017-08-25 11:51:49 -04004297true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004298
4299---
4300
Cary Clark493df1f2017-08-25 13:14:33 -04004301<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004302## hasStrikeoutThickness
4303
4304<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4305bool hasStrikeoutThickness(SkScalar* thickness) const
4306</pre>
4307
Ben Wagnere5806492017-11-09 12:08:31 -05004308If <a href="#Font_Metrics">Font Metrics</a> has a valid strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004309<a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a> to that value. If the underline <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a> is not valid,
4310return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004311
4312### Parameters
4313
Cary Clark8cc16c72017-08-25 11:51:49 -04004314<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004315storage for strikeout width</td>
4316 </tr>
4317</table>
4318
4319### Return Value
4320
4321true if font specifies strikeout width
4322
4323---
4324
Cary Clark493df1f2017-08-25 13:14:33 -04004325<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004326## hasStrikeoutPosition
4327
4328<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4329bool hasStrikeoutPosition(SkScalar* position) const
4330</pre>
4331
Ben Wagnere5806492017-11-09 12:08:31 -05004332If <a href="#Font_Metrics">Font Metrics</a> has a valid strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>, return true, and set
Cary Clarkce101242017-09-01 15:51:02 -04004333<a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a> to that value. If the underline <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a> is not valid,
4334return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004335
4336### Parameters
4337
Cary Clark8cc16c72017-08-25 11:51:49 -04004338<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4339storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004340 </tr>
4341</table>
4342
4343### Return Value
4344
Cary Clark8cc16c72017-08-25 11:51:49 -04004345true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004346
4347---
4348
Cary Clark493df1f2017-08-25 13:14:33 -04004349<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004350## getFontMetrics
4351
4352<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4353SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4354</pre>
4355
Cary Clark8cc16c72017-08-25 11:51:49 -04004356Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4357The return value is the recommended spacing between lines: the sum of <a href="#SkPaint_getFontMetrics_metrics">metrics</a>
Cary Clark12799e12017-07-28 15:18:29 -04004358descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004359If <a href="#SkPaint_getFontMetrics_metrics">metrics</a> is not nullptr, <a href="#Font_Metrics">Font Metrics</a> is copied to <a href="#SkPaint_getFontMetrics_metrics">metrics</a>.
4360Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4361dimensions required by <a href="#Text_Scale_X">Text Scale X</a>, <a href="#Text_Skew_X">Text Skew X</a>, <a href="#Fake_Bold">Fake Bold</a>,
4362<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4363Results can be additionally scaled by <a href="#SkPaint_getFontMetrics_scale">scale</a>; a <a href="#SkPaint_getFontMetrics_scale">scale</a> of zero
Cary Clark12799e12017-07-28 15:18:29 -04004364is ignored.
4365
4366### Parameters
4367
Cary Clark8cc16c72017-08-25 11:51:49 -04004368<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4369storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4370 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004371additional multiplier for returned values</td>
4372 </tr>
4373</table>
4374
4375### Return Value
4376
4377recommended spacing between lines
4378
4379### Example
4380
4381<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4382
4383### See Also
4384
Cary Clark8cc16c72017-08-25 11:51:49 -04004385<a href="#Text_Size">Text Size</a> <a href="undocumented#Typeface">Typeface</a> <a href="#Typeface_Methods">Typeface Methods</a>
Cary Clark12799e12017-07-28 15:18:29 -04004386
4387---
4388
Cary Clark493df1f2017-08-25 13:14:33 -04004389<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004390## getFontSpacing
4391
4392<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4393SkScalar getFontSpacing() const
4394</pre>
4395
4396Returns the recommended spacing between lines: the sum of metrics
4397descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004398Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004399dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004400Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004401
4402### Return Value
4403
4404recommended spacing between lines
4405
4406### Example
4407
4408<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4409
4410#### Example Output
4411
4412~~~~
4413textSize: 12 fontSpacing: 13.9688
4414textSize: 18 fontSpacing: 20.9531
4415textSize: 24 fontSpacing: 27.9375
4416textSize: 32 fontSpacing: 37.25
4417~~~~
4418
4419</fiddle-embed></div>
4420
4421---
4422
Cary Clark493df1f2017-08-25 13:14:33 -04004423<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004424## getFontBounds
4425
4426<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4427SkRect getFontBounds() const
4428</pre>
4429
Cary Clarkce101242017-09-01 15:51:02 -04004430Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004431Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004432ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4433and <a href="#Text_Skew_X">Text Skew X</a>, but not <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004434
Cary Clark8cc16c72017-08-25 11:51:49 -04004435If <a href="#Text_Size">Text Size</a> is large, <a href="#Text_Scale_X">Text Scale X</a> is one, and <a href="#Text_Skew_X">Text Skew X</a> is zero,
4436returns the same bounds as <a href="#Font_Metrics">Font Metrics</a> { <a href="#SkPaint_FontMetrics_fXMin">FontMetrics::fXMin</a>,
4437<a href="#SkPaint_FontMetrics_fTop">FontMetrics::fTop</a>, <a href="#SkPaint_FontMetrics_fXMax">FontMetrics::fXMax</a>, <a href="#SkPaint_FontMetrics_fBottom">FontMetrics::fBottom</a> }.
Cary Clark12799e12017-07-28 15:18:29 -04004438
4439### Return Value
4440
Cary Clarkce101242017-09-01 15:51:02 -04004441union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004442
4443### Example
4444
4445<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4446
4447#### Example Output
4448
4449~~~~
4450metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4451font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4452~~~~
4453
4454</fiddle-embed></div>
4455
4456---
4457
Cary Clark493df1f2017-08-25 13:14:33 -04004458<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004459## textToGlyphs
4460
4461<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4462int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4463</pre>
4464
Cary Clark8cc16c72017-08-25 11:51:49 -04004465Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4466Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4467<a href="#Text_Encoding">Text Encoding</a> specifies how <a href="#SkPaint_textToGlyphs_text">text</a> represents characters or <a href="#SkPaint_textToGlyphs_glyphs">glyphs</a>.
4468<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004469
Cary Clarkbc5697d2017-10-04 14:31:33 -04004470Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004471
Cary Clark8cc16c72017-08-25 11:51:49 -04004472If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4473If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004474
Cary Clark8cc16c72017-08-25 11:51:49 -04004475If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
4476<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid <a href="undocumented#UTF_8">UTF-8</a> sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004477
4478### Parameters
4479
Cary Clark8cc16c72017-08-25 11:51:49 -04004480<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004481character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004482 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004483length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004484 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004485storage for glyph indices; may be nullptr</td>
4486 </tr>
4487</table>
4488
4489### Return Value
4490
Cary Clark8cc16c72017-08-25 11:51:49 -04004491number of <a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> represented by <a href="#SkPaint_textToGlyphs_text">text</a> of length <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a>
Cary Clark12799e12017-07-28 15:18:29 -04004492
4493### Example
4494
4495<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4496
4497---
4498
Cary Clark493df1f2017-08-25 13:14:33 -04004499<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004500## countText
4501
4502<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4503int countText(const void* text, size_t byteLength) const
4504</pre>
4505
Cary Clarkce101242017-09-01 15:51:02 -04004506Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4507Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004508Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004509
4510### Parameters
4511
Cary Clark8cc16c72017-08-25 11:51:49 -04004512<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004513character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004514 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004515length of character storage in bytes</td>
4516 </tr>
4517</table>
4518
4519### Return Value
4520
Cary Clarkce101242017-09-01 15:51:02 -04004521number of <a href="#Glyph">Glyphs</a> represented by <a href="#SkPaint_countText_text">text</a> of length <a href="#SkPaint_countText_byteLength">byteLength</a>
Cary Clark12799e12017-07-28 15:18:29 -04004522
4523### Example
4524
4525<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4526
4527#### Example Output
4528
4529~~~~
4530count = 5
4531~~~~
4532
4533</fiddle-embed></div>
4534
4535---
4536
Cary Clark493df1f2017-08-25 13:14:33 -04004537<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004538## containsText
4539
4540<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4541bool containsText(const void* text, size_t byteLength) const
4542</pre>
4543
Cary Clark8cc16c72017-08-25 11:51:49 -04004544Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
4545Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004546<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004547
Cary Clark8cc16c72017-08-25 11:51:49 -04004548If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4549returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4550does not check to see if <a href="#SkPaint_containsText_text">text</a> contains valid glyph indices for <a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004551
Cary Clarkce101242017-09-01 15:51:02 -04004552Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004553
4554### Parameters
4555
Cary Clark8cc16c72017-08-25 11:51:49 -04004556<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004557array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004558 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4559number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004560 </tr>
4561</table>
4562
4563### Return Value
4564
Cary Clark8cc16c72017-08-25 11:51:49 -04004565true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004566
4567### Example
4568
Cary Clark8cc16c72017-08-25 11:51:49 -04004569<div><fiddle-embed name="9202369019552f09cd4bec7f3046fee4"><div><a href="#SkPaint_containsText">containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark4c06f5e2017-08-04 12:48:24 -04004570corresponding to the <a href="undocumented#Unicode">Unicode</a> surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004571
4572#### Example Output
4573
4574~~~~
45750x00b0 == has char
45760xd800 != has char
4577~~~~
4578
4579</fiddle-embed></div>
4580
4581### Example
4582
Cary Clark8cc16c72017-08-25 11:51:49 -04004583<div><fiddle-embed name="904227febfd1c2e264955da0ef66da73"><div><a href="#SkPaint_containsText">containsText</a> returns true that glyph index is greater than zero, not
Cary Clark4c06f5e2017-08-04 12:48:24 -04004584that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004585
4586#### Example Output
4587
4588~~~~
45890x01ff == has glyph
45900x0000 != has glyph
45910xffff == has glyph
4592~~~~
4593
4594</fiddle-embed></div>
4595
4596### See Also
4597
Cary Clark8cc16c72017-08-25 11:51:49 -04004598<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004599
4600---
4601
Cary Clark493df1f2017-08-25 13:14:33 -04004602<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004603## glyphsToUnichars
4604
4605<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4606void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4607</pre>
4608
Cary Clark8cc16c72017-08-25 11:51:49 -04004609Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004610<a href="undocumented#Glyph">Glyph</a> values without direct <a href="undocumented#Unicode">Unicode</a> equivalents are mapped to zero.
4611Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004612by <a href="#Text_Encoding">Text Encoding</a>; the <a href="#SkPaint_glyphsToUnichars_text">text</a> values returned are equivalent to <a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004613
Cary Clark8cc16c72017-08-25 11:51:49 -04004614Only supported on platforms that use <a href="undocumented#FreeType">FreeType</a> as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004615
4616### Parameters
4617
Cary Clark8cc16c72017-08-25 11:51:49 -04004618<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004619array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004620 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004621length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004622 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004623storage for character codes, one per glyph</td>
4624 </tr>
4625</table>
4626
4627### Example
4628
Cary Clark8cc16c72017-08-25 11:51:49 -04004629<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert <a href="undocumented#UTF_8">UTF-8</a> <a href="#SkPaint_glyphsToUnichars_text">text</a> to <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a>; then convert <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> to <a href="undocumented#Unichar">Unichar</a> code points.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004630
4631---
4632
4633# <a name="Measure_Text"></a> Measure Text
4634
Cary Clark493df1f2017-08-25 13:14:33 -04004635<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004636## measureText
4637
4638<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4639SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4640</pre>
4641
Cary Clark8cc16c72017-08-25 11:51:49 -04004642Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4643and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4644The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4645Uses <a href="#Text_Encoding">Text Encoding</a> to decode <a href="#SkPaint_measureText_text">text</a>, <a href="undocumented#Typeface">Typeface</a> to get the font metrics,
4646and <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>, <a href="#Text_Skew_X">Text Skew X</a>, <a href="#Stroke_Width">Stroke Width</a>, and
4647<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4648Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4649The bounding box is computed as if the <a href="#SkPaint_measureText_text">text</a> was drawn at the origin.
Cary Clark12799e12017-07-28 15:18:29 -04004650
4651### Parameters
4652
Cary Clark8cc16c72017-08-25 11:51:49 -04004653<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004654character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004655 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4656number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4657 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004658returns bounding box relative to (0, 0) if not nullptr</td>
4659 </tr>
4660</table>
4661
4662### Return Value
4663
4664advance width or height
4665
4666### Example
4667
4668<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4669
4670---
4671
4672<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4673SkScalar measureText(const void* text, size_t length) const
4674</pre>
4675
Cary Clark8cc16c72017-08-25 11:51:49 -04004676Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4677and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4678The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4679Uses <a href="#Text_Encoding">Text Encoding</a> to decode <a href="#SkPaint_measureText_2_text">text</a>, <a href="undocumented#Typeface">Typeface</a> to get the font metrics,
4680and <a href="#Text_Size">Text Size</a> to scale the metrics.
4681Does not scale the advance or bounds by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004682
4683### Parameters
4684
Cary Clark8cc16c72017-08-25 11:51:49 -04004685<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004686character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004687 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4688number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004689 </tr>
4690</table>
4691
4692### Return Value
4693
4694advance width or height
4695
4696### Example
4697
4698<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4699
4700#### Example Output
4701
4702~~~~
4703default width = 5
4704double width = 10
4705~~~~
4706
4707</fiddle-embed></div>
4708
4709---
4710
Cary Clark493df1f2017-08-25 13:14:33 -04004711<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004712## breakText
4713
4714<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4715size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004716 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004717</pre>
4718
Cary Clark8cc16c72017-08-25 11:51:49 -04004719Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4720If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, the <a href="#SkPaint_breakText_text">text</a> fragment fits if its advance width is less than or
4721equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4722If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, the <a href="#SkPaint_breakText_text">text</a> fragment fits if its advance height is less than or
4723equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4724Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4725Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4726Uses <a href="#Text_Encoding">Text Encoding</a> to decode <a href="#SkPaint_breakText_text">text</a>, <a href="undocumented#Typeface">Typeface</a> to get the font metrics,
4727and <a href="#Text_Size">Text Size</a> to scale the metrics.
4728Does not scale the advance or bounds by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004729
4730### Parameters
4731
Cary Clark8cc16c72017-08-25 11:51:49 -04004732<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004733character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004734 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4735number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4736 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4737advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4738 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4739returns the width of the <a href="#SkPaint_breakText_text">text</a> less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004740 </tr>
4741</table>
4742
4743### Return Value
4744
Cary Clark8cc16c72017-08-25 11:51:49 -04004745bytes of <a href="#SkPaint_breakText_text">text</a> that fit, always less than or equal to <a href="#SkPaint_breakText_length">length</a>
Cary Clark12799e12017-07-28 15:18:29 -04004746
4747### Example
4748
Cary Clark4c06f5e2017-08-04 12:48:24 -04004749<div><fiddle-embed name="fd0033470ccbd5c7059670fdbf96cffc"><div><a href="undocumented#Line">Line</a> under "" shows desired width, shorter than available characters.
Cary Clark8cc16c72017-08-25 11:51:49 -04004750<a href="undocumented#Line">Line</a> under "" shows measured width after breaking <a href="#SkPaint_breakText_text">text</a>.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004751
4752---
4753
Cary Clark493df1f2017-08-25 13:14:33 -04004754<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004755## getTextWidths
4756
4757<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4758int getTextWidths(const void* text, size_t byteLength, SkScalar widths[],
Cary Clark73fa9722017-08-29 17:36:51 -04004759 SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004760</pre>
4761
Cary Clark8cc16c72017-08-25 11:51:49 -04004762Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4763the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4764Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4765If <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.
4766if <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.
4767If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4768If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4769Uses <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,
4770and <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>.
4771Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4772Does 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 -04004773
4774### Parameters
4775
Cary Clark8cc16c72017-08-25 11:51:49 -04004776<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004777character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004778 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4779number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4780 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4781returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4782 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4783returns <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 -04004784 </tr>
4785</table>
4786
4787### Return Value
4788
Cary Clark8cc16c72017-08-25 11:51:49 -04004789glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004790
4791### Example
4792
Cary Clarkce101242017-09-01 15:51:02 -04004793<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 -04004794The 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 -04004795
4796---
4797
4798# <a name="Text_Path"></a> Text Path
Cary Clarkce101242017-09-01 15:51:02 -04004799<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 -04004800
Cary Clark493df1f2017-08-25 13:14:33 -04004801<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004802## getTextPath
4803
4804<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4805void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y,
4806 SkPath* path) const
4807</pre>
4808
Cary Clark8cc16c72017-08-25 11:51:49 -04004809Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4810Uses <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,
4811and <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.
4812All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4813Uses <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 -04004814
4815### Parameters
4816
Cary Clark8cc16c72017-08-25 11:51:49 -04004817<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004818character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004819 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4820number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4821 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
4822x-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
4823 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
4824y-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
4825 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004826geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004827 </tr>
4828</table>
4829
4830### Example
4831
Cary Clark4c06f5e2017-08-04 12:48:24 -04004832<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 -04004833the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4834
4835---
4836
Cary Clark493df1f2017-08-25 13:14:33 -04004837<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004838## getPosTextPath
4839
4840<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4841void getPosTextPath(const void* text, size_t length, const SkPoint pos[],
4842 SkPath* path) const
4843</pre>
4844
Cary Clark8cc16c72017-08-25 11:51:49 -04004845Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4846Uses <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,
4847and <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.
4848All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4849Uses <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>.
4850<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004851
4852### Parameters
4853
Cary Clark8cc16c72017-08-25 11:51:49 -04004854<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004855character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004856 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4857number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4858 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004859positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004860 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004861geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004862 </tr>
4863</table>
4864
4865### Example
4866
Cary Clarkce101242017-09-01 15:51:02 -04004867<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 -04004868
4869---
4870
4871# <a name="Text_Intercepts"></a> Text Intercepts
Cary Clarkce101242017-09-01 15:51:02 -04004872<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 -04004873of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clarkce101242017-09-01 15:51:02 -04004874underline that skips <a href="undocumented#Descenders">Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004875
Cary Clark493df1f2017-08-25 13:14:33 -04004876<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004877## getTextIntercepts
4878
4879<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4880int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4881 const SkScalar bounds[2], SkScalar* intervals) const
4882</pre>
4883
Cary Clark8cc16c72017-08-25 11:51:49 -04004884Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4885<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 -04004886The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark12799e12017-07-28 15:18:29 -04004887the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004888Uses <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,
4889and <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.
4890Uses <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>.
4891Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4892<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004893
4894### Parameters
4895
Cary Clark8cc16c72017-08-25 11:51:49 -04004896<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004897character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004898 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4899number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4900 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
4901x-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4902 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
4903y-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4904 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004905lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004906 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004907returned intersections; may be nullptr</td>
4908 </tr>
4909</table>
4910
4911### Return Value
4912
4913number of intersections; may be zero
4914
4915### Example
4916
Cary Clarkce101242017-09-01 15:51:02 -04004917<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 -04004918
4919---
4920
Cary Clark493df1f2017-08-25 13:14:33 -04004921<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004922## getPosTextIntercepts
4923
4924<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4925int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4926 const SkScalar bounds[2], SkScalar* intervals) const
4927</pre>
4928
Cary Clark8cc16c72017-08-25 11:51:49 -04004929Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4930<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 -04004931The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark12799e12017-07-28 15:18:29 -04004932the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004933Uses <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,
4934and <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.
4935Uses <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>.
4936Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4937<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004938
4939### Parameters
4940
Cary Clark8cc16c72017-08-25 11:51:49 -04004941<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004942character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004943 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4944number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4945 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004946positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004947 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004948lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004949 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004950returned intersections; may be nullptr</td>
4951 </tr>
4952</table>
4953
4954### Return Value
4955
Cary Clarka523d2d2017-08-30 08:58:10 -04004956number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004957
4958### Example
4959
Cary Clarkce101242017-09-01 15:51:02 -04004960<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 -04004961
4962---
4963
Cary Clark493df1f2017-08-25 13:14:33 -04004964<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004965## getPosTextHIntercepts
4966
4967<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4968int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[],
4969 SkScalar constY, const SkScalar bounds[2],
4970 SkScalar* intervals) const
4971</pre>
4972
Cary Clark8cc16c72017-08-25 11:51:49 -04004973Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4974<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 -04004975The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark12799e12017-07-28 15:18:29 -04004976the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004977Uses <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,
4978and <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.
4979Uses <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>.
4980Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4981<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004982
4983### Parameters
4984
Cary Clark8cc16c72017-08-25 11:51:49 -04004985<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004986character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004987 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4988number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4989 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004990positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004991 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004992position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004993 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004994lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004995 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004996returned intersections; may be nullptr</td>
4997 </tr>
4998</table>
4999
5000### Return Value
5001
5002number of intersections; may be zero
5003
5004### Example
5005
Cary Clark4c06f5e2017-08-04 12:48:24 -04005006<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 -04005007
5008---
5009
Cary Clark493df1f2017-08-25 13:14:33 -04005010<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005011## getTextBlobIntercepts
5012
5013<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5014int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2],
5015 SkScalar* intervals) const
5016</pre>
5017
Cary Clark8cc16c72017-08-25 11:51:49 -04005018Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
5019<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04005020The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark12799e12017-07-28 15:18:29 -04005021the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04005022Uses <a href="#Text_Encoding">Text Encoding</a> to decode text, <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
5023and <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 -04005024Uses run array and <a href="#Text_Align">Text Align</a> to position <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04005025Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
5026<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005027
5028### Parameters
5029
Cary Clark8cc16c72017-08-25 11:51:49 -04005030<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005031<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005032 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005033lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005034 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005035returned intersections; may be nullptr</td>
5036 </tr>
5037</table>
5038
5039### Return Value
5040
5041number of intersections; may be zero
5042
5043### Example
5044
5045<div><fiddle-embed name="4961b05f4f26cf270ab4948a57876341"></fiddle-embed></div>
5046
5047---
5048
Cary Clark493df1f2017-08-25 13:14:33 -04005049<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005050## nothingToDraw
5051
5052<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5053bool nothingToDraw() const
5054</pre>
5055
Cary Clark8cc16c72017-08-25 11:51:49 -04005056Returns true if <a href="#Paint">Paint</a> prevents all drawing;
5057otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005058
Cary Clarkce101242017-09-01 15:51:02 -04005059Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
5060new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005061
5062### Return Value
5063
Cary Clark8cc16c72017-08-25 11:51:49 -04005064true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005065
5066### Example
5067
5068<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5069
5070#### Example Output
5071
5072~~~~
5073initial nothing to draw: false
5074blend dst nothing to draw: true
5075blend src over nothing to draw: false
5076alpha 0 nothing to draw: true
5077~~~~
5078
5079</fiddle-embed></div>
5080
5081---
5082
5083# <a name="Fast_Bounds"></a> Fast Bounds
Cary Clark8cc16c72017-08-25 11:51:49 -04005084<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5085<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005086
Cary Clark493df1f2017-08-25 13:14:33 -04005087<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005088## canComputeFastBounds
5089
5090<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5091bool canComputeFastBounds() const
5092</pre>
5093
Cary Clark8cc16c72017-08-25 11:51:49 -04005094Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5095to 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 -04005096always returns false.
5097
5098### Return Value
5099
Cary Clark8cc16c72017-08-25 11:51:49 -04005100true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005101
5102---
5103
Cary Clark493df1f2017-08-25 13:14:33 -04005104<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005105## computeFastBounds
5106
5107<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5108const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5109</pre>
5110
Cary Clark8cc16c72017-08-25 11:51:49 -04005111Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005112raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005113effects 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 -04005114parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005115for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005116
Cary Clarkbc5697d2017-10-04 14:31:33 -04005117The 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 -04005118should 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 -04005119use 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 -04005120<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005121
5122### Parameters
5123
Cary Clark8cc16c72017-08-25 11:51:49 -04005124<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5125geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5126 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005127computed bounds of geometry; may not be nullptr</td>
5128 </tr>
5129</table>
5130
5131### Return Value
5132
5133fast computed bounds
5134
5135---
5136
Cary Clark493df1f2017-08-25 13:14:33 -04005137<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005138## computeFastStrokeBounds
5139
5140<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5141const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5142</pre>
5143
5144### Parameters
5145
Cary Clark8cc16c72017-08-25 11:51:49 -04005146<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5147geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5148 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005149computed bounds of geometry</td>
5150 </tr>
5151</table>
5152
5153### Return Value
5154
5155fast computed bounds
5156
5157---
5158
Cary Clark493df1f2017-08-25 13:14:33 -04005159<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005160## doComputeFastBounds
5161
5162<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5163const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage,
5164 Style style) const
5165</pre>
5166
Cary Clarkce101242017-09-01 15:51:02 -04005167Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5168account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5169altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005170
5171### Parameters
5172
Cary Clark8cc16c72017-08-25 11:51:49 -04005173<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5174geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5175 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005176computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005177 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5178overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005179 </tr>
5180</table>
5181
5182### Return Value
5183
5184fast computed bounds
5185
5186---
5187
Cary Clark493df1f2017-08-25 13:14:33 -04005188<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005189## toString
5190
5191<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5192void toString(SkString* str) const;
5193</pre>
5194
Cary Clarkce101242017-09-01 15:51:02 -04005195Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5196internal debugging tools. The interface and implementation may be
5197suppressed by defining <a href="undocumented#SK_IGNORE_TO_STRING">SK IGNORE TO STRING</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005198
5199### Parameters
5200
Cary Clark8cc16c72017-08-25 11:51:49 -04005201<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005202storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005203 </tr>
5204</table>
5205
5206### Example
5207
5208<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5209
5210#### Example Output
5211
5212~~~~
5213text size = 12
5214~~~~
5215
5216</fiddle-embed></div>
5217
Cary Clark2ade9972017-11-02 17:49:34 -04005218### See Also
5219
5220<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>
5221
Cary Clark12799e12017-07-28 15:18:29 -04005222---
5223