blob: ffab03e2885cf42efff37ab0002881765f553dbc [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
650---
651
652# <a name="Hinting"></a> Hinting
653
Cary Clark8cc16c72017-08-25 11:51:49 -0400654## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400655
Cary Clark154beea2017-10-26 07:58:48 -0400656<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400657enum <a href="#Hinting">Hinting</a> {
658<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
659<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
660<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
661<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400662};</pre>
663
Cary Clark8cc16c72017-08-25 11:51:49 -0400664<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
665look at a given point size on font engines that support it. <a href="#Hinting">Hinting</a> may have a
Cary Clark12799e12017-07-28 15:18:29 -0400666muted effect or no effect at all depending on the platform.
667
Cary Clark4c06f5e2017-08-04 12:48:24 -0400668The four levels roughly control corresponding features on platforms that use <a href="undocumented#FreeType">FreeType</a>
Cary Clark8cc16c72017-08-25 11:51:49 -0400669as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400670
671### Constants
672
673<table>
674 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400675 <td><a name="SkPaint_kNo_Hinting"> <code><strong>SkPaint::kNo_Hinting </strong></code> </a></td><td>0</td><td>Leaves glyph outlines unchanged from their native representation.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400676With <a href="undocumented#FreeType">FreeType</a>, this is equivalent to the <a href="undocumented#FT_LOAD_NO_HINTING">FT LOAD NO HINTING</a>
677bit-field constant supplied to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400678outline being loaded should not be fitted to the pixel grid but simply scaled
679to 26.6 fractional pixels.</td>
680 </tr>
681 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400682 <td><a name="SkPaint_kSlight_Hinting"> <code><strong>SkPaint::kSlight_Hinting </strong></code> </a></td><td>1</td><td>Modifies glyph outlines minimally to improve constrast.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400683With <a href="undocumented#FreeType">FreeType</a>, this is equivalent in spirit to the
684<a href="undocumented#FT_LOAD_TARGET_LIGHT">FT LOAD TARGET LIGHT</a> value supplied to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400685lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400686Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400687 </tr>
688 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400689 <td><a name="SkPaint_kNormal_Hinting"> <code><strong>SkPaint::kNormal_Hinting </strong></code> </a></td><td>2</td><td>Modifies glyph outlines to improve constrast. This is the default.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400690With <a href="undocumented#FreeType">FreeType</a>, this supplies <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> to <a href="undocumented#FT_Load_Glyph">FT Load Glyph</a>,
Cary Clark12799e12017-07-28 15:18:29 -0400691choosing the default hinting algorithm, which is optimized for standard
692gray-level rendering.</td>
693 </tr>
694 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400695 <td><a name="SkPaint_kFull_Hinting"> <code><strong>SkPaint::kFull_Hinting </strong></code> </a></td><td>3</td><td>Modifies glyph outlines for maxiumum constrast. With <a href="undocumented#FreeType">FreeType</a>, this selects
696<a href="undocumented#FT_LOAD_TARGET_LCD">FT LOAD TARGET LCD</a> or <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400697<a href="undocumented#FT_LOAD_TARGET_LCD">FT LOAD TARGET LCD</a> is a variant of <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> optimized for
698horizontally decimated <a href="undocumented#LCD">LCD</a> displays; <a href="undocumented#FT_LOAD_TARGET_LCD_V">FT LOAD TARGET LCD V</a> is a
699variant of <a href="undocumented#FT_LOAD_TARGET_NORMAL">FT LOAD TARGET NORMAL</a> optimized for vertically decimated <a href="undocumented#LCD">LCD</a> displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400700 </tr>
701</table>
702
Cary Clark8cc16c72017-08-25 11:51:49 -0400703On <a href="undocumented#Windows">Windows</a> with <a href="undocumented#DirectWrite">DirectWrite</a>, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400704
Cary Clark8cc16c72017-08-25 11:51:49 -0400705<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400706Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400707
708
709
Cary Clark493df1f2017-08-25 13:14:33 -0400710<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400711## getHinting
712
713<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
714Hinting getHinting() const
715</pre>
716
717Returns level of glyph outline adjustment.
718
719### Return Value
720
Cary Clark8cc16c72017-08-25 11:51:49 -0400721one of: <a href="#SkPaint_kNo_Hinting">kNo Hinting</a>, <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>, <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>, <a href="#SkPaint_kFull_Hinting">kFull Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -0400722
723### Example
724
725<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
726
727#### Example Output
728
729~~~~
730SkPaint::kNormal_Hinting == paint.getHinting()
731~~~~
732
733</fiddle-embed></div>
734
735---
736
Cary Clark493df1f2017-08-25 13:14:33 -0400737<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400738## setHinting
739
740<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
741void setHinting(Hinting hintingLevel)
742</pre>
743
744Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400745Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400746
Cary Clark8cc16c72017-08-25 11:51:49 -0400747| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400748| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400749| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400750| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
751| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
752| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400753
754### Parameters
755
Cary Clark8cc16c72017-08-25 11:51:49 -0400756<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
757one of: <a href="#SkPaint_kNo_Hinting">kNo Hinting</a>, <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>, <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>, <a href="#SkPaint_kFull_Hinting">kFull Hinting</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400758 </tr>
759</table>
760
761### Example
762
763<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
764
765#### Example Output
766
767~~~~
768paint1 == paint2
769~~~~
770
771</fiddle-embed></div>
772
773---
774
775# <a name="Flags"></a> Flags
776
Cary Clark8cc16c72017-08-25 11:51:49 -0400777## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400778
Cary Clark154beea2017-10-26 07:58:48 -0400779<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400780enum <a href="#Flags">Flags</a> {
781<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
782<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
783<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
784<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
785<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
786<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
787<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
788<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
789<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
790<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
791<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400792
Cary Clark8cc16c72017-08-25 11:51:49 -0400793<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400794};
795</pre>
796
Cary Clark8cc16c72017-08-25 11:51:49 -0400797The bit values stored in <a href="#Flags">Flags</a>.
798The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400799with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400800All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400801multiple settings at once.
802
803### Constants
804
805<table>
806 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400807 <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting <a href="SkPaint_Reference#Anti_alias">Anti-alias</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400808 </tr>
809 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400810 <td><a name="SkPaint_kDither_Flag"> <code><strong>SkPaint::kDither_Flag </strong></code> </a></td><td>0x0004</td><td>mask for setting <a href="#Dither">Dither</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400811 </tr>
812 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400813 <td><a name="SkPaint_kFakeBoldText_Flag"> <code><strong>SkPaint::kFakeBoldText_Flag </strong></code> </a></td><td>0x0020</td><td>mask for setting <a href="#Fake_Bold">Fake Bold</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400814 </tr>
815 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400816 <td><a name="SkPaint_kLinearText_Flag"> <code><strong>SkPaint::kLinearText_Flag </strong></code> </a></td><td>0x0040</td><td>mask for setting <a href="SkPaint_Reference#Linear_Text">Linear Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400817 </tr>
818 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400819 <td><a name="SkPaint_kSubpixelText_Flag"> <code><strong>SkPaint::kSubpixelText_Flag </strong></code> </a></td><td>0x0080</td><td>mask for setting <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400820 </tr>
821 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400822 <td><a name="SkPaint_kDevKernText_Flag"> <code><strong>SkPaint::kDevKernText_Flag </strong></code> </a></td><td>0x0100</td><td>mask for setting <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400823 </tr>
824 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400825 <td><a name="SkPaint_kLCDRenderText_Flag"> <code><strong>SkPaint::kLCDRenderText_Flag </strong></code> </a></td><td>0x0200</td><td>mask for setting <a href="SkPaint_Reference#LCD_Text">LCD Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400826 </tr>
827 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400828 <td><a name="SkPaint_kEmbeddedBitmapText_Flag"> <code><strong>SkPaint::kEmbeddedBitmapText_Flag </strong></code> </a></td><td>0x0400</td><td>mask for setting <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400829 </tr>
830 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400831 <td><a name="SkPaint_kAutoHinting_Flag"> <code><strong>SkPaint::kAutoHinting_Flag </strong></code> </a></td><td>0x0800</td><td>mask for setting <a href="#Automatic_Hinting">Automatic Hinting</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400832 </tr>
833 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400834 <td><a name="SkPaint_kVerticalText_Flag"> <code><strong>SkPaint::kVerticalText_Flag </strong></code> </a></td><td>0x1000</td><td>mask for setting <a href="#Vertical_Text">Vertical Text</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400835 </tr>
836 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400837 <td><a name="SkPaint_kGenA8FromLCD_Flag"> <code><strong>SkPaint::kGenA8FromLCD_Flag </strong></code> </a></td><td>0x2000</td><td>not intended for public use</td>
Cary Clark12799e12017-07-28 15:18:29 -0400838 </tr>
839 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400840 <td><a name="SkPaint_kAllFlags"> <code><strong>SkPaint::kAllFlags </strong></code> </a></td><td>0xFFFF</td><td>mask of all <a href="#Flags">Flags</a>, including private flags and flags reserved for future use</td>
Cary Clark12799e12017-07-28 15:18:29 -0400841 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400842<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400843
844</table>
845
Cary Clark8cc16c72017-08-25 11:51:49 -0400846## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400847
Cary Clark154beea2017-10-26 07:58:48 -0400848<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400849enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
850<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
851<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400852};</pre>
853
854### Constants
855
856<table>
857 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400858 <td><a name="SkPaint_kUnderlineText_ReserveFlag"> <code><strong>SkPaint::kUnderlineText_ReserveFlag </strong></code> </a></td><td>0x0008</td><td>mask for underline text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400859 </tr>
860 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400861 <td><a name="SkPaint_kStrikeThruText_ReserveFlag"> <code><strong>SkPaint::kStrikeThruText_ReserveFlag </strong></code> </a></td><td>0x0010</td><td>mask for strike-thru text</td>
Cary Clark12799e12017-07-28 15:18:29 -0400862 </tr>
863</table>
864
865
866
Cary Clark493df1f2017-08-25 13:14:33 -0400867<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400868## getFlags
869
870<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
871uint32_t getFlags() const
872</pre>
873
Cary Clark8cc16c72017-08-25 11:51:49 -0400874Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
875bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400876
877### Return Value
878
Cary Clark8cc16c72017-08-25 11:51:49 -0400879zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400880
881### Example
882
883<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
884
885#### Example Output
886
887~~~~
888(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
889~~~~
890
891</fiddle-embed></div>
892
893---
894
Cary Clark493df1f2017-08-25 13:14:33 -0400895<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400896## setFlags
897
898<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
899void setFlags(uint32_t flags)
900</pre>
901
Cary Clark8cc16c72017-08-25 11:51:49 -0400902Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
903All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400904
905### Parameters
906
Cary Clark8cc16c72017-08-25 11:51:49 -0400907<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
908union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400909 </tr>
910</table>
911
912### Example
913
914<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
915
916#### Example Output
917
918~~~~
919paint.isAntiAlias()
920paint.isDither()
921~~~~
922
923</fiddle-embed></div>
924
925---
926
927# <a name="Anti-alias"></a> Anti-alias
Cary Clark4c06f5e2017-08-04 12:48:24 -0400928<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400929If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
930If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, pixels are drawn with <a href="#Alpha">Color Alpha</a> equal to their coverage.
Cary Clark12799e12017-07-28 15:18:29 -0400931
Cary Clarkce101242017-09-01 15:51:02 -0400932The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400933passing through the pixel center may, but is not required to, draw the pixel.
934
Cary Clarkce101242017-09-01 15:51:02 -0400935<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 -0400936active <a href="SkPath_Reference#Path">Path</a> edge, and whose center is to the left of the end of the active <a href="SkPath_Reference#Path">Path</a> edge.
Cary Clark12799e12017-07-28 15:18:29 -0400937
Cary Clarkce101242017-09-01 15:51:02 -0400938A platform may only support <a href="undocumented#Anti_alias">Anti-aliased</a> drawing. Some <a href="undocumented#GPU_backed">GPU-backed</a> platforms use
939<a href="undocumented#Supersampling">Supersampling</a> to <a href="SkPaint_Reference#Anti_alias">Anti-alias</a> all drawing, and have no mechanism to selectively
940<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400941
Cary Clarkce101242017-09-01 15:51:02 -0400942The 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 -0400943
Cary Clark4c06f5e2017-08-04 12:48:24 -0400944<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> is disabled by default.
Cary Clark8cc16c72017-08-25 11:51:49 -0400945<a href="SkPaint_Reference#Anti_alias">Anti-alias</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -0400946at compile time.
947
948### Example
949
950<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
951A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400952The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clarkce101242017-09-01 15:51:02 -0400953<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400954
Cary Clark493df1f2017-08-25 13:14:33 -0400955<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400956## isAntiAlias
957
958<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
959bool isAntiAlias() const
960</pre>
961
Cary Clark4c06f5e2017-08-04 12:48:24 -0400962If true, pixels on the active edges of <a href="SkPath_Reference#Path">Path</a> may be drawn with partial transparency.
Cary Clark12799e12017-07-28 15:18:29 -0400963
Cary Clark8cc16c72017-08-25 11:51:49 -0400964Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400965
966### Return Value
967
Cary Clark8cc16c72017-08-25 11:51:49 -0400968<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400969
970### Example
971
972<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
973
974#### Example Output
975
976~~~~
977paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
978paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
979~~~~
980
981</fiddle-embed></div>
982
983---
984
Cary Clark493df1f2017-08-25 13:14:33 -0400985<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400986## setAntiAlias
987
988<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
989void setAntiAlias(bool aa)
990</pre>
991
Cary Clark4c06f5e2017-08-04 12:48:24 -0400992Requests, but does not require, that <a href="SkPath_Reference#Path">Path</a> edge pixels draw opaque or with
Cary Clark12799e12017-07-28 15:18:29 -0400993partial transparency.
994
Cary Clark8cc16c72017-08-25 11:51:49 -0400995Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
996Clears <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -0400997
998### Parameters
999
Cary Clark8cc16c72017-08-25 11:51:49 -04001000<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
1001setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001002 </tr>
1003</table>
1004
1005### Example
1006
1007<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1008
1009#### Example Output
1010
1011~~~~
1012paint1 == paint2
1013~~~~
1014
1015</fiddle-embed></div>
1016
1017---
1018
1019# <a name="Dither"></a> Dither
Cary Clarkce101242017-09-01 15:51:02 -04001020<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001021This can help to smooth color transitions and reducing banding in gradients.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001022Dithering lessens visible banding from <a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
1023and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> gradients,
1024and improves rendering into a <a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001025
1026Dithering is always enabled for linear gradients drawing into
Cary Clark4c06f5e2017-08-04 12:48:24 -04001027<a href="undocumented#SkColorType">kRGB 565 SkColorType</a> <a href="undocumented#Surface">Surface</a> and <a href="undocumented#SkColorType">kRGBA 8888 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001028<a href="#Dither">Dither</a> cannot be enabled for <a href="undocumented#SkColorType">kAlpha 8 SkColorType</a> <a href="undocumented#Surface">Surface</a> and
Cary Clark4c06f5e2017-08-04 12:48:24 -04001029<a href="undocumented#SkColorType">kRGBA F16 SkColorType</a> <a href="undocumented#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001030
Cary Clark8cc16c72017-08-25 11:51:49 -04001031<a href="#Dither">Dither</a> is disabled by default.
1032<a href="#Dither">Dither</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kDither_Flag">kDither Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -04001033at compile time.
1034
Cary Clark8cc16c72017-08-25 11:51:49 -04001035Some platform implementations may ignore dithering. Setto ignore <a href="#Dither">Dither</a> on <a href="undocumented#GPU_Surface">GPU Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001036
1037### Example
1038
1039<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1040alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1041
1042### Example
1043
1044<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001045Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001046dither, making it easier to see.</div></fiddle-embed></div>
1047
Cary Clark493df1f2017-08-25 13:14:33 -04001048<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001049## isDither
1050
1051<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1052bool isDither() const
1053</pre>
1054
1055If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001056Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001057
1058### Return Value
1059
Cary Clark8cc16c72017-08-25 11:51:49 -04001060<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001061
1062### Example
1063
1064<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1065
1066#### Example Output
1067
1068~~~~
1069paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1070paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1071~~~~
1072
1073</fiddle-embed></div>
1074
1075---
1076
Cary Clark493df1f2017-08-25 13:14:33 -04001077<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001078## setDither
1079
1080<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1081void setDither(bool dither)
1082</pre>
1083
1084Requests, but does not require, to distribute color error.
1085
Cary Clark8cc16c72017-08-25 11:51:49 -04001086Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1087Clears <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001088
1089### Parameters
1090
Cary Clark8cc16c72017-08-25 11:51:49 -04001091<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1092setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001093 </tr>
1094</table>
1095
1096### Example
1097
1098<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1099
1100#### Example Output
1101
1102~~~~
1103paint1 == paint2
1104~~~~
1105
1106</fiddle-embed></div>
1107
1108### See Also
1109
Cary Clark4c06f5e2017-08-04 12:48:24 -04001110<a href="undocumented#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001111
1112---
1113
1114### See Also
1115
Cary Clark4c06f5e2017-08-04 12:48:24 -04001116Gradient <a href="undocumented#RGB_565">Color RGB-565</a>
Cary Clark12799e12017-07-28 15:18:29 -04001117
1118# <a name="Device_Text"></a> Device Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001119<a href="SkPaint_Reference#LCD_Text">LCD Text</a> and <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> increase the precision of glyph position.
Cary Clark12799e12017-07-28 15:18:29 -04001120
Cary Clark8cc16c72017-08-25 11:51:49 -04001121When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001122create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001123on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001124<a href="SkPaint_Reference#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark8cc16c72017-08-25 11:51:49 -04001125the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001126
Cary Clark8cc16c72017-08-25 11:51:49 -04001127<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001128As the opaqueness
1129of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1130
1131Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001132<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> and <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> are clear by default.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001133<a href="SkPaint_Reference#LCD_Text">LCD Text</a> or <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
Cary Clark8cc16c72017-08-25 11:51:49 -04001134<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> or <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> (or both) at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001135
1136### Example
1137
Cary Clark4c06f5e2017-08-04 12:48:24 -04001138<div><fiddle-embed name="4606ae1be792d6bc46d496432f050ee9"><div>Four commas are drawn normally and with combinations of <a href="SkPaint_Reference#LCD_Text">LCD Text</a> and <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a>.
Cary Clarkce101242017-09-01 15:51:02 -04001139When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1140When <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 -04001141
1142## <a name="Linear_Text"></a> Linear Text
1143
Cary Clark4c06f5e2017-08-04 12:48:24 -04001144<a href="SkPaint_Reference#Linear_Text">Linear Text</a> selects whether text is rendered as a <a href="undocumented#Glyph">Glyph</a> or as a <a href="SkPath_Reference#Path">Path</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001145If <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is set, it has the same effect as setting <a href="#SkPaint_Hinting">Hinting</a> to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clarkd0530ba2017-09-14 11:25:39 -04001146If <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 -04001147
Cary Clark493df1f2017-08-25 13:14:33 -04001148<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001149## isLinearText
1150
1151<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1152bool isLinearText() const
1153</pre>
1154
Cary Clark4c06f5e2017-08-04 12:48:24 -04001155If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001156
Cary Clark8cc16c72017-08-25 11:51:49 -04001157Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001158
1159### Return Value
1160
Cary Clark8cc16c72017-08-25 11:51:49 -04001161<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001162
1163### Example
1164
1165<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1166
1167### See Also
1168
Cary Clark8cc16c72017-08-25 11:51:49 -04001169<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001170
1171---
1172
Cary Clark493df1f2017-08-25 13:14:33 -04001173<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001174## setLinearText
1175
1176<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1177void setLinearText(bool linearText)
1178</pre>
1179
Cary Clark4c06f5e2017-08-04 12:48:24 -04001180If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001181By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001182
Cary Clark8cc16c72017-08-25 11:51:49 -04001183Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1184Clears <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001185
1186### Parameters
1187
Cary Clark8cc16c72017-08-25 11:51:49 -04001188<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1189setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001190 </tr>
1191</table>
1192
1193### Example
1194
1195<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1196
1197### See Also
1198
Cary Clark8cc16c72017-08-25 11:51:49 -04001199<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001200
1201---
1202
1203## <a name="Subpixel_Text"></a> Subpixel Text
1204
Cary Clark8cc16c72017-08-25 11:51:49 -04001205<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> uses the pixel transparency to represent a fractional offset.
Cary Clark12799e12017-07-28 15:18:29 -04001206As the opaqueness
1207of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1208
Cary Clark493df1f2017-08-25 13:14:33 -04001209<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001210## isSubpixelText
1211
1212<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1213bool isSubpixelText() const
1214</pre>
1215
Cary Clarkce101242017-09-01 15:51:02 -04001216If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001217
Cary Clark8cc16c72017-08-25 11:51:49 -04001218Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001219
1220### Return Value
1221
Cary Clark8cc16c72017-08-25 11:51:49 -04001222<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001223
1224### Example
1225
1226<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1227
1228#### Example Output
1229
1230~~~~
1231paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1232paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1233~~~~
1234
1235</fiddle-embed></div>
1236
1237---
1238
Cary Clark493df1f2017-08-25 13:14:33 -04001239<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001240## setSubpixelText
1241
1242<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1243void setSubpixelText(bool subpixelText)
1244</pre>
1245
Cary Clarkce101242017-09-01 15:51:02 -04001246Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001247
Cary Clark8cc16c72017-08-25 11:51:49 -04001248Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1249Clears <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001250
1251### Parameters
1252
Cary Clark8cc16c72017-08-25 11:51:49 -04001253<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1254setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001255 </tr>
1256</table>
1257
1258### Example
1259
1260<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1261
1262#### Example Output
1263
1264~~~~
1265paint1 == paint2
1266~~~~
1267
1268</fiddle-embed></div>
1269
1270---
1271
1272## <a name="LCD_Text"></a> LCD Text
1273
Cary Clark8cc16c72017-08-25 11:51:49 -04001274When set, <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> takes advantage of the organization of <a href="#RGB">Color RGB</a> stripes that
Cary Clark12799e12017-07-28 15:18:29 -04001275create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001276on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001277<a href="SkPaint_Reference#LCD_Text">LCD Text</a> can be enabled on devices that orient stripes horizontally or vertically, and that order
Cary Clark8cc16c72017-08-25 11:51:49 -04001278the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001279
Cary Clark493df1f2017-08-25 13:14:33 -04001280<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001281## isLCDRenderText
1282
1283<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1284bool isLCDRenderText() const
1285</pre>
1286
Cary Clarkce101242017-09-01 15:51:02 -04001287If 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 -04001288
Cary Clark8cc16c72017-08-25 11:51:49 -04001289Returns true if <a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
Cary Clark12799e12017-07-28 15:18:29 -04001290
1291### Return Value
1292
Cary Clark8cc16c72017-08-25 11:51:49 -04001293<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001294
1295### Example
1296
1297<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1298
1299#### Example Output
1300
1301~~~~
1302paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1303paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1304~~~~
1305
1306</fiddle-embed></div>
1307
1308---
1309
Cary Clark493df1f2017-08-25 13:14:33 -04001310<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001311## setLCDRenderText
1312
1313<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1314void setLCDRenderText(bool lcdText)
1315</pre>
1316
Cary Clarkce101242017-09-01 15:51:02 -04001317Requests, 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 -04001318
Cary Clark8cc16c72017-08-25 11:51:49 -04001319Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1320Clears <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is false.
Cary Clark12799e12017-07-28 15:18:29 -04001321
1322### Parameters
1323
Cary Clark8cc16c72017-08-25 11:51:49 -04001324<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1325setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001326 </tr>
1327</table>
1328
1329### Example
1330
1331<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1332
1333#### Example Output
1334
1335~~~~
1336paint1 == paint2
1337~~~~
1338
1339</fiddle-embed></div>
1340
1341---
1342
1343# <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
Cary Clarkce101242017-09-01 15:51:02 -04001344<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 -04001345<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> when set chooses an embedded bitmap glyph over an outline contained
Cary Clark12799e12017-07-28 15:18:29 -04001346in a font if the platform supports this option.
1347
Cary Clark8cc16c72017-08-25 11:51:49 -04001348<a href="undocumented#FreeType">FreeType</a> selects the bitmap glyph if available when <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set, and selects
1349the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001350<a href="undocumented#Windows">Windows</a> may select the bitmap glyph but is not required to do so.
1351<a href="undocumented#OS_X">OS X</a> and <a href="undocumented#iOS">iOS</a> do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001352
Cary Clark4c06f5e2017-08-04 12:48:24 -04001353<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1354<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
Cary Clark8cc16c72017-08-25 11:51:49 -04001355<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001356
1357### Example
1358
Cary Clark154beea2017-10-26 07:58:48 -04001359<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkce101242017-09-01 15:51:02 -04001360<div>The "" <a href="undocumented#TrueType">TrueType</a> font in the <a href="undocumented#Skia">Skia</a> resources/fonts directory
1361includes an embedded bitmap <a href="undocumented#Glyph">Glyph</a> at odd font sizes. This example works
1362on platforms that use <a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
1363<a href="undocumented#Windows">Windows</a> may, but is not required to, return a bitmap glyph if
Cary Clarkbc5697d2017-10-04 14:31:33 -04001364<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 -04001365bitmap.allocN32Pixels(30, 15);
1366bitmap.eraseColor(0);
Cary Clark4c06f5e2017-08-04 12:48:24 -04001367<a href="SkCanvas_Reference#SkCanvas">SkCanvas</a> offscreen(bitmap);
Cary Clark8cc16c72017-08-25 11:51:49 -04001368<a href="#SkPaint">SkPaint</a> paint;
Cary Clark12799e12017-07-28 15:18:29 -04001369paint.</pre>
1370
Cary Clark493df1f2017-08-25 13:14:33 -04001371<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001372## isEmbeddedBitmapText
1373
1374<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1375bool isEmbeddedBitmapText() const
1376</pre>
1377
Cary Clarkce101242017-09-01 15:51:02 -04001378If 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 -04001379
Cary Clark8cc16c72017-08-25 11:51:49 -04001380Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001381
1382### Return Value
1383
Cary Clark8cc16c72017-08-25 11:51:49 -04001384<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001385
1386### Example
1387
1388<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1389
1390#### Example Output
1391
1392~~~~
1393paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1394paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1395~~~~
1396
1397</fiddle-embed></div>
1398
1399---
1400
Cary Clark493df1f2017-08-25 13:14:33 -04001401<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001402## setEmbeddedBitmapText
1403
1404<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1405void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1406</pre>
1407
1408Requests, but does not require, to use bitmaps in fonts instead of outlines.
1409
Cary Clark8cc16c72017-08-25 11:51:49 -04001410Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1411Clears <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 -04001412
1413### Parameters
1414
Cary Clark8cc16c72017-08-25 11:51:49 -04001415<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1416setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001417 </tr>
1418</table>
1419
1420### Example
1421
1422<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1423
1424#### Example Output
1425
1426~~~~
1427paint1 == paint2
1428~~~~
1429
1430</fiddle-embed></div>
1431
1432---
1433
1434# <a name="Automatic_Hinting"></a> Automatic Hinting
Cary Clark8cc16c72017-08-25 11:51:49 -04001435If <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 -04001436instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001437<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
1438<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001439
Cary Clark8cc16c72017-08-25 11:51:49 -04001440<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 -04001441
Cary Clark493df1f2017-08-25 13:14:33 -04001442<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001443## isAutohinted
1444
1445<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1446bool isAutohinted() const
1447</pre>
1448
Cary Clark8cc16c72017-08-25 11:51:49 -04001449If 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 -04001450platform 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 -04001451<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001452
Cary Clark8cc16c72017-08-25 11:51:49 -04001453Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001454
1455### Return Value
1456
Cary Clark8cc16c72017-08-25 11:51:49 -04001457<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001458
1459### Example
1460
1461<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1462
1463#### Example Output
1464
1465~~~~
1466paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1467paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1468~~~~
1469
1470</fiddle-embed></div>
1471
1472### See Also
1473
Cary Clark8cc16c72017-08-25 11:51:49 -04001474<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001475
1476---
1477
Cary Clark493df1f2017-08-25 13:14:33 -04001478<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001479## setAutohinted
1480
1481<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1482void setAutohinted(bool useAutohinter)
1483</pre>
1484
Cary Clark8cc16c72017-08-25 11:51:49 -04001485If <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 -04001486instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001487<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
1488<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001489
Cary Clark4c06f5e2017-08-04 12:48:24 -04001490Only 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 -04001491
Cary Clark8cc16c72017-08-25 11:51:49 -04001492Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1493Clears <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 -04001494
1495### Parameters
1496
Cary Clark8cc16c72017-08-25 11:51:49 -04001497<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1498setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001499 </tr>
1500</table>
1501
1502### Example
1503
1504<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1505
1506### See Also
1507
Cary Clark8cc16c72017-08-25 11:51:49 -04001508<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001509
1510---
1511
1512# <a name="Vertical_Text"></a> Vertical Text
Cary Clark4c06f5e2017-08-04 12:48:24 -04001513<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 -04001514using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1515is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1516<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001517
Cary Clarkce101242017-09-01 15:51:02 -04001518<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 -04001519font substitution,
Cary Clarkce101242017-09-01 15:51:02 -04001520textual substitution, line layout, or contextual spacing like <a href="undocumented#Kerning">Kerning</a> pairs. Use
1521a text shaping engine likeHarfBuzzto translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001522into glyph series.
1523
Cary Clark8cc16c72017-08-25 11:51:49 -04001524<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 -04001525
Cary Clark8cc16c72017-08-25 11:51:49 -04001526<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1527<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 -04001528
Cary Clark8cc16c72017-08-25 11:51:49 -04001529<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1530<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1531<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001532
1533### Example
1534
1535<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1536
Cary Clark493df1f2017-08-25 13:14:33 -04001537<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001538## isVerticalText
1539
1540<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1541bool isVerticalText() const
1542</pre>
1543
Cary Clarkce101242017-09-01 15:51:02 -04001544If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001545
Cary Clark8cc16c72017-08-25 11:51:49 -04001546Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001547
1548### Return Value
1549
Cary Clark8cc16c72017-08-25 11:51:49 -04001550<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001551
1552### Example
1553
1554<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1555
1556#### Example Output
1557
1558~~~~
1559paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1560paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1561~~~~
1562
1563</fiddle-embed></div>
1564
1565---
1566
Cary Clark493df1f2017-08-25 13:14:33 -04001567<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001568## setVerticalText
1569
1570<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1571void setVerticalText(bool verticalText)
1572</pre>
1573
1574If true, text advance positions the next glyph below the previous glyph instead of to the
1575right of previous glyph.
1576
Cary Clark8cc16c72017-08-25 11:51:49 -04001577Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1578Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001579
1580### Parameters
1581
Cary Clark8cc16c72017-08-25 11:51:49 -04001582<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1583setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001584 </tr>
1585</table>
1586
1587### Example
1588
1589<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1590
1591#### Example Output
1592
1593~~~~
1594paint1 == paint2
1595~~~~
1596
1597</fiddle-embed></div>
1598
1599---
1600
1601# <a name="Fake_Bold"></a> Fake Bold
Cary Clark8cc16c72017-08-25 11:51:49 -04001602<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 -04001603is 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 -04001604bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001605
Cary Clark8cc16c72017-08-25 11:51:49 -04001606Use <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 -04001607is not available.
1608
Cary Clarkce101242017-09-01 15:51:02 -04001609A <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
1610the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark8cc16c72017-08-25 11:51:49 -04001611by 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 -04001612
Cary Clark8cc16c72017-08-25 11:51:49 -04001613<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001614
1615### Example
1616
1617<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1618
Cary Clark493df1f2017-08-25 13:14:33 -04001619<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001620## isFakeBoldText
1621
1622<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1623bool isFakeBoldText() const
1624</pre>
1625
1626If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1627from outlines.
1628
Cary Clark8cc16c72017-08-25 11:51:49 -04001629Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001630
1631### Return Value
1632
Cary Clark8cc16c72017-08-25 11:51:49 -04001633<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001634
1635### Example
1636
1637<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1638
1639#### Example Output
1640
1641~~~~
1642paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1643paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1644~~~~
1645
1646</fiddle-embed></div>
1647
1648---
1649
Cary Clark493df1f2017-08-25 13:14:33 -04001650<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001651## setFakeBoldText
1652
1653<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1654void setFakeBoldText(bool fakeBoldText)
1655</pre>
1656
Cary Clarkce101242017-09-01 15:51:02 -04001657Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001658
Cary Clark8cc16c72017-08-25 11:51:49 -04001659Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1660Clears <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 -04001661
1662### Parameters
1663
Cary Clark8cc16c72017-08-25 11:51:49 -04001664<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1665setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001666 </tr>
1667</table>
1668
1669### Example
1670
1671<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1672
1673#### Example Output
1674
1675~~~~
1676paint1 == paint2
1677~~~~
1678
1679</fiddle-embed></div>
1680
1681---
1682
1683# <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
Cary Clarkce101242017-09-01 15:51:02 -04001684if <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
1685spacing by the difference of the hinted and <a href="undocumented#Unhinted">Unhinted</a> <a href="undocumented#Left_Side_Bearing">Left Side Bearing</a> and
1686<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
1687<a href="undocumented#FreeType">FreeType</a> as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001688
Cary Clarkce101242017-09-01 15:51:02 -04001689<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 -04001690a 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 -04001691
Cary Clark493df1f2017-08-25 13:14:33 -04001692<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001693## isDevKernText
1694
1695<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1696bool isDevKernText() const
1697</pre>
1698
1699Returns if character spacing may be adjusted by the hinting difference.
1700
Cary Clark8cc16c72017-08-25 11:51:49 -04001701Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001702
1703### Return Value
1704
Cary Clark8cc16c72017-08-25 11:51:49 -04001705<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001706
1707### Example
1708
1709<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1710
1711---
1712
Cary Clark493df1f2017-08-25 13:14:33 -04001713<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001714## setDevKernText
1715
1716<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1717void setDevKernText(bool devKernText)
1718</pre>
1719
1720Requests, but does not require, to use hinting to adjust glyph spacing.
1721
Cary Clark8cc16c72017-08-25 11:51:49 -04001722Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1723Clears <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 -04001724
1725### Parameters
1726
Cary Clark8cc16c72017-08-25 11:51:49 -04001727<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1728setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001729 </tr>
1730</table>
1731
1732### Example
1733
1734<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1735
1736#### Example Output
1737
1738~~~~
1739paint1 == paint2
1740~~~~
1741
1742</fiddle-embed></div>
1743
1744---
1745
1746# <a name="Filter_Quality_Methods"></a> Filter Quality Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04001747<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1748A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1749A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001750If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1751in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001752
Cary Clark8cc16c72017-08-25 11:51:49 -04001753<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 -04001754
1755<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001756 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1757 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1758 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1759 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001760</table>
1761
Cary Clarkbc5697d2017-10-04 14:31:33 -04001762and 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 -04001763
Cary Clark4c06f5e2017-08-04 12:48:24 -04001764<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 -04001765
1766### Example
1767
1768<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1769
Cary Clark493df1f2017-08-25 13:14:33 -04001770<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001771## getFilterQuality
1772
1773<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1774SkFilterQuality getFilterQuality() const
1775</pre>
1776
Cary Clark4c06f5e2017-08-04 12:48:24 -04001777Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001778draws faster; a higher setting looks better when the image is scaled.
1779
1780### Return Value
1781
Cary Clark4c06f5e2017-08-04 12:48:24 -04001782one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1783<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001784
1785### Example
1786
1787<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1788
1789#### Example Output
1790
1791~~~~
1792kNone_SkFilterQuality == paint.getFilterQuality()
1793~~~~
1794
1795</fiddle-embed></div>
1796
1797---
1798
Cary Clark493df1f2017-08-25 13:14:33 -04001799<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001800## setFilterQuality
1801
1802<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1803void setFilterQuality(SkFilterQuality quality)
1804</pre>
1805
Cary Clark4c06f5e2017-08-04 12:48:24 -04001806Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001807draws faster; a higher setting looks better when the image is scaled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001808Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001809
1810### Parameters
1811
Cary Clark8cc16c72017-08-25 11:51:49 -04001812<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04001813one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
1814<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001815 </tr>
1816</table>
1817
1818### Example
1819
1820<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1821
1822#### Example Output
1823
1824~~~~
1825kHigh_SkFilterQuality == paint.getFilterQuality()
1826~~~~
1827
1828</fiddle-embed></div>
1829
1830### See Also
1831
Cary Clark4c06f5e2017-08-04 12:48:24 -04001832<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001833
1834---
1835
1836# <a name="Color_Methods"></a> Color Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04001837<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 -04001838or stroked shape in a
183932-bit value. Each component occupies 8-bits, ranging from zero: no contribution;
1840to 255: full intensity. All values in any combination are valid.
1841
Cary Clarkce101242017-09-01 15:51:02 -04001842<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>;
Cary Clark8cc16c72017-08-25 11:51:49 -04001843<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 -04001844
Cary Clark8cc16c72017-08-25 11:51:49 -04001845The 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 -04001846on the output device, which may have more or fewer bits, and may have a different arrangement.
1847
Cary Clark8cc16c72017-08-25 11:51:49 -04001848| 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 -04001849| --- | --- | --- | --- | --- |
1850| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1851
1852### Example
1853
1854<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1855
Cary Clark493df1f2017-08-25 13:14:33 -04001856<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001857## getColor
1858
1859<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1860SkColor getColor() const
1861</pre>
1862
Cary Clarkce101242017-09-01 15:51:02 -04001863Retrieves <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 -04001864Use 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 -04001865a color component.
1866
1867### Return Value
1868
Cary Clarkce101242017-09-01 15:51:02 -04001869<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001870
1871### Example
1872
1873<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1874
1875#### Example Output
1876
1877~~~~
1878Yellow is 100% red, 100% green, and 0% blue.
1879~~~~
1880
1881</fiddle-embed></div>
1882
1883### See Also
1884
Cary Clark4c06f5e2017-08-04 12:48:24 -04001885<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001886
1887---
1888
Cary Clark493df1f2017-08-25 13:14:33 -04001889<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001890## setColor
1891
1892<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1893void setColor(SkColor color)
1894</pre>
1895
Cary Clarkce101242017-09-01 15:51:02 -04001896Sets <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,
1897<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 -04001898
1899### Parameters
1900
Cary Clark8cc16c72017-08-25 11:51:49 -04001901<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001902<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001903 </tr>
1904</table>
1905
1906### Example
1907
1908<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1909
1910#### Example Output
1911
1912~~~~
1913green1 == green2
1914~~~~
1915
1916</fiddle-embed></div>
1917
1918### See Also
1919
Cary Clark8cc16c72017-08-25 11:51:49 -04001920<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 -04001921
1922---
1923
1924## <a name="Alpha_Methods"></a> Alpha Methods
1925
Cary Clark8cc16c72017-08-25 11:51:49 -04001926<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 -04001927
Cary Clark493df1f2017-08-25 13:14:33 -04001928<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001929## getAlpha
1930
1931<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1932uint8_t getAlpha() const
1933</pre>
1934
Cary Clarkce101242017-09-01 15:51:02 -04001935Retrieves <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 -04001936
1937### Return Value
1938
Cary Clarkce101242017-09-01 15:51:02 -04001939<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001940
1941### Example
1942
1943<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1944
1945#### Example Output
1946
1947~~~~
1948255 == paint.getAlpha()
1949~~~~
1950
1951</fiddle-embed></div>
1952
1953---
1954
Cary Clark493df1f2017-08-25 13:14:33 -04001955<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001956## setAlpha
1957
1958<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1959void setAlpha(U8CPU a)
1960</pre>
1961
Cary Clarkce101242017-09-01 15:51:02 -04001962Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001963unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04001964build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
1965<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 -04001966fully opaque.
1967
1968### Parameters
1969
Cary Clark8cc16c72017-08-25 11:51:49 -04001970<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001971<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001972 </tr>
1973</table>
1974
1975### Example
1976
1977<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
1978
1979#### Example Output
1980
1981~~~~
19820x44112233 == paint.getColor()
1983~~~~
1984
1985</fiddle-embed></div>
1986
1987---
1988
Cary Clark493df1f2017-08-25 13:14:33 -04001989<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001990## setARGB
1991
1992<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
1993void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
1994</pre>
1995
Cary Clark4c06f5e2017-08-04 12:48:24 -04001996Sets <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 -04001997The 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 -04001998
1999### Parameters
2000
Cary Clark8cc16c72017-08-25 11:51:49 -04002001<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2002amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2003 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2004amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2005 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2006amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2007 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2008amount of <a href="#RGB_Blue">Color RGB Blue</a>, from no blue (0) to full blue (255)</td>
Cary Clark12799e12017-07-28 15:18:29 -04002009 </tr>
2010</table>
2011
2012### Example
2013
2014<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2015
2016#### Example Output
2017
2018~~~~
2019transRed1 == transRed2
2020~~~~
2021
2022</fiddle-embed></div>
2023
2024### See Also
2025
Cary Clark8cc16c72017-08-25 11:51:49 -04002026<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002027
2028---
2029
2030# <a name="Style"></a> Style
Cary Clark8cc16c72017-08-25 11:51:49 -04002031<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2032Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002033
Cary Clark8cc16c72017-08-25 11:51:49 -04002034Set <a href="#Style">Style</a> to <a href="#SkPaint_kFill_Style">kFill Style</a> to fill the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002035The fill covers the area inside the geometry for most shapes.
2036
Cary Clark8cc16c72017-08-25 11:51:49 -04002037Set <a href="#Style">Style</a> to <a href="#SkPaint_kStroke_Style">kStroke Style</a> to stroke the shape.
Cary Clark12799e12017-07-28 15:18:29 -04002038
2039## <a name="Fill"></a> Fill
2040
2041### See Also
2042
Cary Clark8cc16c72017-08-25 11:51:49 -04002043<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002044
2045## <a name="Stroke"></a> Stroke
2046
Cary Clarkbc5697d2017-10-04 14:31:33 -04002047The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002048<a href="#Stroke_Width">Stroke Width</a>. The area covered where the shape starts and stops is described by <a href="#Stroke_Cap">Stroke Cap</a>.
2049The area covered where the shape turns a corner is described by <a href="#Stroke_Join">Stroke Join</a>.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002050The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002051
Cary Clark8cc16c72017-08-25 11:51:49 -04002052As <a href="#Stroke_Width">Stroke Width</a> gets smaller, the drawn path frame is thinner. <a href="#Stroke_Width">Stroke Width</a> less than one
2053may have gaps, and if <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, <a href="#Alpha">Color Alpha</a> will increase to visually decrease coverage.
Cary Clark12799e12017-07-28 15:18:29 -04002054
2055## <a name="Hairline"></a> Hairline
2056
Cary Clark8cc16c72017-08-25 11:51:49 -04002057<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Hairline">Hairline</a>.
2058<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
Cary Clark12799e12017-07-28 15:18:29 -04002059flow horizontally, vertically,or diagonally.
2060
Cary Clark8cc16c72017-08-25 11:51:49 -04002061<a href="SkPath_Reference#Path">Path</a> drawing with <a href="#Hairline">Hairline</a> may hit the same pixel more than once. For instance, <a href="SkPath_Reference#Path">Path</a> containing
2062two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2063pixel. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clark4c06f5e2017-08-04 12:48:24 -04002064<a href="undocumented#GPU_backed">GPU-backed</a> implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002065while stroking.
2066
Cary Clark8cc16c72017-08-25 11:51:49 -04002067## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002068
Cary Clark154beea2017-10-26 07:58:48 -04002069<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002070enum <a href="#SkPaint_Style">Style</a> {
2071<a href="#SkPaint_kFill_Style">kFill Style</a>,
2072<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2073<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002074};</pre>
2075
Cary Clark8cc16c72017-08-25 11:51:49 -04002076Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002077The stroke and fill
2078share all paint attributes; for instance, they are drawn with the same color.
2079
Cary Clark8cc16c72017-08-25 11:51:49 -04002080Use <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> to avoid hitting the same pixels twice with a stroke draw and
Cary Clark12799e12017-07-28 15:18:29 -04002081a fill draw.
2082
2083### Constants
2084
2085<table>
2086 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002087 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002088Applies 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>.
2089<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 -04002090<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2091The <a href="#Fill_Type">Path Fill Type</a> specifies additional rules to fill the area outside the path edge,
Cary Clark12799e12017-07-28 15:18:29 -04002092and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002093<a href="#SkPaint_Style">Style</a> is set to <a href="#SkPaint_kFill_Style">kFill Style</a> by default.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002094 </tr>
2095 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002096 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clarkbc5697d2017-10-04 14:31:33 -04002097Applies 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 -04002098<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 -04002099and ignore the set <a href="#SkPaint_Style">Style</a>.
2100The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002101 </tr>
2102 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002103 <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 -04002104Applies 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 -04002105<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2106and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002107 </tr>
2108
2109</table>
2110
Cary Clark8cc16c72017-08-25 11:51:49 -04002111## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002112
Cary Clark154beea2017-10-26 07:58:48 -04002113<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002114enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002115<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002116};</pre>
2117
2118### Constants
2119
2120<table>
2121 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002122 <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.
2123May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002124 </tr>
2125
2126</table>
2127
Cary Clark493df1f2017-08-25 13:14:33 -04002128<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002129## getStyle
2130
2131<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2132Style getStyle() const
2133</pre>
2134
2135Whether the geometry is filled, stroked, or filled and stroked.
2136
2137### Return Value
2138
Cary Clark8cc16c72017-08-25 11:51:49 -04002139one 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 -04002140
2141### Example
2142
2143<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2144
2145#### Example Output
2146
2147~~~~
2148SkPaint::kFill_Style == paint.getStyle()
2149~~~~
2150
2151</fiddle-embed></div>
2152
2153### See Also
2154
Cary Clark8cc16c72017-08-25 11:51:49 -04002155<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002156
2157---
2158
Cary Clark493df1f2017-08-25 13:14:33 -04002159<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002160## setStyle
2161
2162<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2163void setStyle(Style style)
2164</pre>
2165
2166Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002167Has 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 -04002168
2169### Parameters
2170
Cary Clark8cc16c72017-08-25 11:51:49 -04002171<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2172one 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 -04002173 </tr>
2174</table>
2175
2176### Example
2177
2178<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2179
2180### See Also
2181
Cary Clark8cc16c72017-08-25 11:51:49 -04002182<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002183
2184---
2185
2186### See Also
2187
Cary Clark8cc16c72017-08-25 11:51:49 -04002188<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 -04002189
2190# <a name="Stroke_Width"></a> Stroke Width
Cary Clark8cc16c72017-08-25 11:51:49 -04002191<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clarkbc5697d2017-10-04 14:31:33 -04002192of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002193set 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 -04002194
2195When width is greater than zero, the stroke encompasses as many pixels partially
2196or fully as needed. When the width equals zero, the paint enables hairlines;
2197the stroke is always one pixel wide.
2198
Cary Clarkbc5697d2017-10-04 14:31:33 -04002199The stroke dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002200remains one pixel wide regardless of scaling.
2201
2202The default width for the paint is zero.
2203
2204### Example
2205
Cary Clarkce101242017-09-01 15:51:02 -04002206<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 -04002207line and the platform implementation.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002208
Cary Clark493df1f2017-08-25 13:14:33 -04002209<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002210## getStrokeWidth
2211
2212<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2213SkScalar getStrokeWidth() const
2214</pre>
2215
Cary Clark8cc16c72017-08-25 11:51:49 -04002216Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002217outline the shape.
2218
2219### Return Value
2220
Cary Clark8cc16c72017-08-25 11:51:49 -04002221zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002222
2223### Example
2224
2225<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2226
2227#### Example Output
2228
2229~~~~
22300 == paint.getStrokeWidth()
2231~~~~
2232
2233</fiddle-embed></div>
2234
2235---
2236
Cary Clark493df1f2017-08-25 13:14:33 -04002237<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002238## setStrokeWidth
2239
2240<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2241void setStrokeWidth(SkScalar width)
2242</pre>
2243
2244Sets the thickness of the pen used by the paint to
2245outline the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002246Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002247
2248### Parameters
2249
Cary Clark8cc16c72017-08-25 11:51:49 -04002250<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2251zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002252 </tr>
2253</table>
2254
2255### Example
2256
2257<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2258
2259#### Example Output
2260
2261~~~~
22625 == paint.getStrokeWidth()
2263~~~~
2264
2265</fiddle-embed></div>
2266
2267---
2268
2269# <a name="Miter_Limit"></a> Miter Limit
Cary Clark8cc16c72017-08-25 11:51:49 -04002270<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002271relative to the stroke width.
2272
Cary Clark8cc16c72017-08-25 11:51:49 -04002273<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2274is 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>
2275or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002276
Cary Clark8cc16c72017-08-25 11:51:49 -04002277If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2278is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002279
Cary Clark8cc16c72017-08-25 11:51:49 -04002280<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002281
Cary Clark8cc16c72017-08-25 11:51:49 -04002282miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002283The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clarkce101242017-09-01 15:51:02 -04002284in "<a href="undocumented#SkUserConfig">SkUserConfig</a>.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002285
2286Here are some miter limits and the angles that triggers them.
2287
2288| miter limit | angle in degrees |
2289| --- | --- |
2290| 10 | 11.48 |
2291| 9 | 12.76 |
2292| 8 | 14.36 |
2293| 7 | 16.43 |
2294| 6 | 19.19 |
2295| 5 | 23.07 |
2296| 4 | 28.96 |
2297| 3 | 38.94 |
2298| 2 | 60 |
2299| 1 | 180 |
2300
2301### Example
2302
2303<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2304When the miter limit is decreased slightly, the miter join is replaced
2305by a bevel join.</div></fiddle-embed></div>
2306
Cary Clark493df1f2017-08-25 13:14:33 -04002307<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002308## getStrokeMiter
2309
2310<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2311SkScalar getStrokeMiter() const
2312</pre>
2313
2314The limit at which a sharp corner is drawn beveled.
2315
2316### Return Value
2317
Cary Clark8cc16c72017-08-25 11:51:49 -04002318zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002319
2320### Example
2321
2322<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2323
2324#### Example Output
2325
2326~~~~
2327default miter limit == 4
2328~~~~
2329
2330</fiddle-embed></div>
2331
2332### See Also
2333
Cary Clark8cc16c72017-08-25 11:51:49 -04002334<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 -04002335
2336---
2337
Cary Clark493df1f2017-08-25 13:14:33 -04002338<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002339## setStrokeMiter
2340
2341<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2342void setStrokeMiter(SkScalar miter)
2343</pre>
2344
2345The limit at which a sharp corner is drawn beveled.
2346Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002347Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002348
2349### Parameters
2350
Cary Clark8cc16c72017-08-25 11:51:49 -04002351<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2352zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002353 </tr>
2354</table>
2355
2356### Example
2357
2358<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2359
2360#### Example Output
2361
2362~~~~
2363default miter limit == 8
2364~~~~
2365
2366</fiddle-embed></div>
2367
2368### See Also
2369
Cary Clark8cc16c72017-08-25 11:51:49 -04002370<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 -04002371
2372---
2373
2374# <a name="Stroke_Cap"></a> Stroke Cap
2375
Cary Clark8cc16c72017-08-25 11:51:49 -04002376## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002377
Cary Clark154beea2017-10-26 07:58:48 -04002378<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002379enum <a href="#SkPaint_Cap">Cap</a> {
2380<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2381<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2382<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002383
Cary Clark8cc16c72017-08-25 11:51:49 -04002384<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2385<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002386};
Cary Clark6fc50412017-09-21 12:31:06 -04002387
Cary Clark8cc16c72017-08-25 11:51:49 -04002388static constexpr int <a href="#SkPaint_kCapCount">kCapCount</a> = <a href="#SkPaint_kLast_Cap">kLast Cap</a> + 1;</pre>
Cary Clark12799e12017-07-28 15:18:29 -04002389
Cary Clark8cc16c72017-08-25 11:51:49 -04002390<a href="#Stroke_Cap">Stroke Cap</a> draws at the beginning and end of an open <a href="#Contour">Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002391
2392### Constants
2393
2394<table>
2395 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002396 <td><a name="SkPaint_kButt_Cap"> <code><strong>SkPaint::kButt_Cap </strong></code> </a></td><td>0</td><td>Does not extend the stroke past the beginning or the end.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002397 </tr>
2398 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002399 <td><a name="SkPaint_kRound_Cap"> <code><strong>SkPaint::kRound_Cap </strong></code> </a></td><td>1</td><td>Adds a circle with a diameter equal to <a href="#Stroke_Width">Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002400and end.</td>
2401 </tr>
2402 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002403 <td><a name="SkPaint_kSquare_Cap"> <code><strong>SkPaint::kSquare_Cap </strong></code> </a></td><td>2</td><td>Adds a square with sides equal to <a href="#Stroke_Width">Stroke Width</a> at the beginning
Cary Clark12799e12017-07-28 15:18:29 -04002404and end. The square sides are parallel to the initial and final direction
2405of the stroke.</td>
2406 </tr>
2407 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002408 <td><a name="SkPaint_kLast_Cap"> <code><strong>SkPaint::kLast_Cap </strong></code> </a></td><td>2</td><td>Equivalent to the largest value for <a href="#Stroke_Cap">Stroke Cap</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002409 </tr>
2410 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002411 <td><a name="SkPaint_kDefault_Cap"> <code><strong>SkPaint::kDefault_Cap </strong></code> </a></td><td>0</td><td>Equivalent to <a href="#SkPaint_kButt_Cap">kButt Cap</a>.
2412<a href="#Stroke_Cap">Stroke Cap</a> is set to <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002413 </tr>
2414 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002415 <td><a name="SkPaint_kCapCount"> <code><strong>SkPaint::kCapCount </strong></code> </a></td><td>3</td><td>The number of different <a href="#Stroke_Cap">Stroke Cap</a> values defined.
2416May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002417 </tr>
2418
Cary Clark8cc16c72017-08-25 11:51:49 -04002419Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002420follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002421
Cary Clark8cc16c72017-08-25 11:51:49 -04002422If the <a href="#Contour">Path Contour</a> is not terminated by <a href="#SkPath_kClose_Verb">SkPath::kClose Verb</a>, the contour has a
Cary Clark12799e12017-07-28 15:18:29 -04002423visible beginning and end.
2424
Cary Clark8cc16c72017-08-25 11:51:49 -04002425<a href="#Contour">Path Contour</a> may start and end at the same point; defining <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002426
Cary Clark8cc16c72017-08-25 11:51:49 -04002427<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> is not drawn.
2428<a href="#SkPaint_kRound_Cap">kRound Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> draws a circle of diameter <a href="#Stroke_Width">Stroke Width</a>
Cary Clark12799e12017-07-28 15:18:29 -04002429at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002430<a href="#SkPaint_kSquare_Cap">kSquare Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> draws an upright square with a side of
2431<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002432
Cary Clark8cc16c72017-08-25 11:51:49 -04002433<a href="#Stroke_Cap">Stroke Cap</a> is <a href="#SkPaint_kButt_Cap">kButt Cap</a> by default.
Cary Clark12799e12017-07-28 15:18:29 -04002434
2435</table>
2436
2437### Example
2438
2439<div><fiddle-embed name="3d92b449b298b4ce4004cfca6b91cee7"></fiddle-embed></div>
2440
Cary Clark493df1f2017-08-25 13:14:33 -04002441<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002442## getStrokeCap
2443
2444<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2445Cap getStrokeCap() const
2446</pre>
2447
2448The geometry drawn at the beginning and end of strokes.
2449
2450### Return Value
2451
Cary Clark8cc16c72017-08-25 11:51:49 -04002452one of: <a href="#SkPaint_kButt_Cap">kButt Cap</a>, <a href="#SkPaint_kRound_Cap">kRound Cap</a>, <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002453
2454### Example
2455
2456<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2457
2458#### Example Output
2459
2460~~~~
2461kButt_Cap == default stroke cap
2462~~~~
2463
2464</fiddle-embed></div>
2465
2466### See Also
2467
Cary Clark8cc16c72017-08-25 11:51:49 -04002468<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002469
2470---
2471
Cary Clark493df1f2017-08-25 13:14:33 -04002472<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002473## setStrokeCap
2474
2475<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2476void setStrokeCap(Cap cap)
2477</pre>
2478
2479The geometry drawn at the beginning and end of strokes.
2480
2481### Parameters
2482
Cary Clark8cc16c72017-08-25 11:51:49 -04002483<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2484one of: <a href="#SkPaint_kButt_Cap">kButt Cap</a>, <a href="#SkPaint_kRound_Cap">kRound Cap</a>, <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>;
2485has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002486 </tr>
2487</table>
2488
2489### Example
2490
2491<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2492
2493#### Example Output
2494
2495~~~~
2496kRound_Cap == paint.getStrokeCap()
2497~~~~
2498
2499</fiddle-embed></div>
2500
2501### See Also
2502
Cary Clark8cc16c72017-08-25 11:51:49 -04002503<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002504
2505---
2506
2507# <a name="Stroke_Join"></a> Stroke Join
Cary Clark8cc16c72017-08-25 11:51:49 -04002508<a href="#Stroke_Join">Stroke Join</a> draws at the sharp corners of an open or closed <a href="#Contour">Path Contour</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002509
Cary Clark8cc16c72017-08-25 11:51:49 -04002510Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002511follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002512
2513If the contour direction changes abruptly, because the tangent direction leading
2514to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002515the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002516
2517### Example
2518
2519<div><fiddle-embed name="4a4e41ed89a57d47eab5d1600c33b0e8"></fiddle-embed></div>
2520
Cary Clark8cc16c72017-08-25 11:51:49 -04002521## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002522
Cary Clark154beea2017-10-26 07:58:48 -04002523<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002524enum <a href="#SkPaint_Join">Join</a> {
2525<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2526<a href="#SkPaint_kRound_Join">kRound Join</a>,
2527<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002528
Cary Clark8cc16c72017-08-25 11:51:49 -04002529<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2530<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002531};
Cary Clark6fc50412017-09-21 12:31:06 -04002532
Cary Clark8cc16c72017-08-25 11:51:49 -04002533static 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 -04002534
Cary Clark8cc16c72017-08-25 11:51:49 -04002535<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 -04002536affects the four corners of a stroked rectangle, and the connected segments in a
2537stroked path.
2538
2539Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2540radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2541connect the thick strokes.
2542
2543The fill path constructed to describe the stroked path respects the join setting but may
2544not contain the actual join. For instance, a fill path constructed with round joins does
2545not necessarily include circles at each connected segment.
2546
2547### Constants
2548
2549<table>
2550 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002551 <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>.
2552If 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 -04002553 </tr>
2554 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002555 <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 -04002556 </tr>
2557 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002558 <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 -04002559 </tr>
2560 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002561 <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 -04002562 </tr>
2563 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002564 <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>.
2565<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 -04002566 </tr>
2567 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002568 <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.
2569May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002570 </tr>
2571</table>
2572
2573### Example
2574
2575<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2576
2577### See Also
2578
Cary Clark8cc16c72017-08-25 11:51:49 -04002579<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 -04002580
2581
2582
Cary Clark493df1f2017-08-25 13:14:33 -04002583<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002584## getStrokeJoin
2585
2586<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2587Join getStrokeJoin() const
2588</pre>
2589
2590The geometry drawn at the corners of strokes.
2591
2592### Return Value
2593
Cary Clark8cc16c72017-08-25 11:51:49 -04002594one 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 -04002595
2596### Example
2597
2598<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2599
2600#### Example Output
2601
2602~~~~
2603kMiter_Join == default stroke join
2604~~~~
2605
2606</fiddle-embed></div>
2607
2608### See Also
2609
Cary Clark8cc16c72017-08-25 11:51:49 -04002610<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002611
2612---
2613
Cary Clark493df1f2017-08-25 13:14:33 -04002614<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002615## setStrokeJoin
2616
2617<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2618void setStrokeJoin(Join join)
2619</pre>
2620
2621The geometry drawn at the corners of strokes.
2622
2623### Parameters
2624
Cary Clark8cc16c72017-08-25 11:51:49 -04002625<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2626one 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 -04002627otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002628 </tr>
2629</table>
2630
2631### Example
2632
2633<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2634
2635#### Example Output
2636
2637~~~~
2638kMiter_Join == paint.getStrokeJoin()
2639~~~~
2640
2641</fiddle-embed></div>
2642
2643### See Also
2644
Cary Clark8cc16c72017-08-25 11:51:49 -04002645<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002646
2647---
2648
2649### See Also
2650
Cary Clark8cc16c72017-08-25 11:51:49 -04002651<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002652
2653# <a name="Fill_Path"></a> Fill Path
Cary Clark8cc16c72017-08-25 11:51:49 -04002654<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 -04002655
Cary Clark8cc16c72017-08-25 11:51:49 -04002656If <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 -04002657replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2658destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002659
Cary Clark4c06f5e2017-08-04 12:48:24 -04002660Fill <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
2661the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002662
Cary Clark8cc16c72017-08-25 11:51:49 -04002663If <a href="#SkPaint_Style">Style</a> is <a href="#SkPaint_kStroke_Style">kStroke Style</a> or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
2664and <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>,
2665and <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 -04002666
Cary Clark8cc16c72017-08-25 11:51:49 -04002667Fill <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 -04002668
Cary Clark8cc16c72017-08-25 11:51:49 -04002669If 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>
2670returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002671
Cary Clark493df1f2017-08-25 13:14:33 -04002672<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002673## getFillPath
2674
2675<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2676bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect,
2677 SkScalar resScale = 1) const
2678</pre>
2679
2680The filled equivalent of the stroked path.
2681
2682### Parameters
2683
Cary Clark8cc16c72017-08-25 11:51:49 -04002684<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002685<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002686 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2687resulting <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>
2688 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002689optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002690 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002691if > 1, increase precision, else if (0 < res < 1) reduce precision
2692to favor speed and size</td>
2693 </tr>
2694</table>
2695
2696### Return Value
2697
Cary Clark8cc16c72017-08-25 11:51:49 -04002698true 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 -04002699
2700### Example
2701
Cary Clarkce101242017-09-01 15:51:02 -04002702<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.
2703At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002704At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2705
2706---
2707
2708<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2709bool getFillPath(const SkPath& src, SkPath* dst) const
2710</pre>
2711
2712The filled equivalent of the stroked path.
2713
Cary Clark8cc16c72017-08-25 11:51:49 -04002714Replaces <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>.
2715<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 -04002716
2717### Parameters
2718
Cary Clark8cc16c72017-08-25 11:51:49 -04002719<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002720<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002721 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2722resulting <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 -04002723 </tr>
2724</table>
2725
2726### Return Value
2727
Cary Clark8cc16c72017-08-25 11:51:49 -04002728true 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 -04002729
2730### Example
2731
2732<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2733
2734---
2735
2736### See Also
2737
Cary Clark8cc16c72017-08-25 11:51:49 -04002738<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 -04002739
2740# <a name="Shader_Methods"></a> Shader Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002741<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2742<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark8cc16c72017-08-25 11:51:49 -04002743If <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 -04002744
Cary Clark8cc16c72017-08-25 11:51:49 -04002745<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2746If <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 -04002747the fill.
2748
Cary Clark8cc16c72017-08-25 11:51:49 -04002749The 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 -04002750
2751### Example
2752
2753<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2754
Cary Clark8cc16c72017-08-25 11:51:49 -04002755If <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 -04002756
2757### Example
2758
2759<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2760
Cary Clark493df1f2017-08-25 13:14:33 -04002761<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002762## getShader
2763
2764<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2765SkShader* getShader() const
2766</pre>
2767
2768Optional colors used when filling a path, such as a gradient.
2769
Cary Clark4c06f5e2017-08-04 12:48:24 -04002770Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002771
2772### Return Value
2773
Cary Clark4c06f5e2017-08-04 12:48:24 -04002774<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002775
2776### Example
2777
2778<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2779
2780#### Example Output
2781
2782~~~~
2783nullptr == shader
2784nullptr != shader
2785~~~~
2786
2787</fiddle-embed></div>
2788
2789---
2790
Cary Clark493df1f2017-08-25 13:14:33 -04002791<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002792## refShader
2793
2794<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002795sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002796</pre>
2797
2798Optional colors used when filling a path, such as a gradient.
2799
Cary Clark4c06f5e2017-08-04 12:48:24 -04002800Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002801
2802### Return Value
2803
Cary Clark4c06f5e2017-08-04 12:48:24 -04002804<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002805
2806### Example
2807
2808<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2809
2810#### Example Output
2811
2812~~~~
2813shader unique: true
2814shader unique: false
2815~~~~
2816
2817</fiddle-embed></div>
2818
2819---
2820
Cary Clark493df1f2017-08-25 13:14:33 -04002821<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002822## setShader
2823
2824<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002825void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002826</pre>
2827
2828Optional colors used when filling a path, such as a gradient.
2829
Cary Clarkd0530ba2017-09-14 11:25:39 -04002830Sets <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 -04002831Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002832
2833### Parameters
2834
Cary Clark8cc16c72017-08-25 11:51:49 -04002835<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002836how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002837 </tr>
2838</table>
2839
2840### Example
2841
2842<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2843
2844---
2845
2846# <a name="Color_Filter_Methods"></a> Color Filter Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002847<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2848<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 -04002849If <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 -04002850
Cary Clark8cc16c72017-08-25 11:51:49 -04002851The 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 -04002852
2853### Example
2854
2855<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2856
Cary Clark493df1f2017-08-25 13:14:33 -04002857<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002858## getColorFilter
2859
2860<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2861SkColorFilter* getColorFilter() const
2862</pre>
2863
Cary Clark4c06f5e2017-08-04 12:48:24 -04002864Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2865Does 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 -04002866
2867### Return Value
2868
Cary Clark4c06f5e2017-08-04 12:48:24 -04002869<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002870
2871### Example
2872
2873<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2874
2875#### Example Output
2876
2877~~~~
2878nullptr == color filter
2879nullptr != color filter
2880~~~~
2881
2882</fiddle-embed></div>
2883
2884---
2885
Cary Clark493df1f2017-08-25 13:14:33 -04002886<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002887## refColorFilter
2888
2889<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002890sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002891</pre>
2892
Cary Clark4c06f5e2017-08-04 12:48:24 -04002893Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2894Increases <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 -04002895
2896### Return Value
2897
Cary Clark4c06f5e2017-08-04 12:48:24 -04002898<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002899
2900### Example
2901
2902<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2903
2904#### Example Output
2905
2906~~~~
2907color filter unique: true
2908color filter unique: false
2909~~~~
2910
2911</fiddle-embed></div>
2912
2913---
2914
Cary Clark493df1f2017-08-25 13:14:33 -04002915<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002916## setColorFilter
2917
2918<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002919void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002920</pre>
2921
Cary Clark6fc50412017-09-21 12:31:06 -04002922Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2923<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2924
2925Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002926
2927### Parameters
2928
Cary Clark8cc16c72017-08-25 11:51:49 -04002929<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002930<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002931 </tr>
2932</table>
2933
2934### Example
2935
2936<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2937
2938---
2939
2940# <a name="Blend_Mode_Methods"></a> Blend Mode Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04002941<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 -04002942The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002943over the destination color.
2944
2945### Example
2946
2947<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2948
2949### See Also
2950
Cary Clark4c06f5e2017-08-04 12:48:24 -04002951<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002952
Cary Clark493df1f2017-08-25 13:14:33 -04002953<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002954## getBlendMode
2955
2956<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2957SkBlendMode getBlendMode() const
2958</pre>
2959
Cary Clark4c06f5e2017-08-04 12:48:24 -04002960Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04002961By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002962
2963### Return Value
2964
2965mode used to combine source color with destination color
2966
2967### Example
2968
2969<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
2970
2971#### Example Output
2972
2973~~~~
2974kSrcOver == getBlendMode
2975kSrcOver != getBlendMode
2976~~~~
2977
2978</fiddle-embed></div>
2979
2980---
2981
Cary Clark493df1f2017-08-25 13:14:33 -04002982<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002983## isSrcOver
2984
2985<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
2986bool isSrcOver() const
2987</pre>
2988
Cary Clark8cc16c72017-08-25 11:51:49 -04002989Returns 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 -04002990
2991### Return Value
2992
Cary Clark8cc16c72017-08-25 11:51:49 -04002993true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04002994
2995### Example
2996
2997<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
2998
2999#### Example Output
3000
3001~~~~
3002isSrcOver == true
3003isSrcOver != true
3004~~~~
3005
3006</fiddle-embed></div>
3007
3008---
3009
Cary Clark493df1f2017-08-25 13:14:33 -04003010<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003011## setBlendMode
3012
3013<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3014void setBlendMode(SkBlendMode mode)
3015</pre>
3016
Cary Clark8cc16c72017-08-25 11:51:49 -04003017Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003018Does not check for valid input.
3019
3020### Parameters
3021
Cary Clark8cc16c72017-08-25 11:51:49 -04003022<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003023<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003024 </tr>
3025</table>
3026
3027### Example
3028
3029<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3030
3031#### Example Output
3032
3033~~~~
3034isSrcOver == true
3035isSrcOver != true
3036~~~~
3037
3038</fiddle-embed></div>
3039
3040---
3041
3042# <a name="Path_Effect_Methods"></a> Path Effect Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003043<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3044<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 -04003045If <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 -04003046
3047### Example
3048
3049<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3050
3051### See Also
3052
Cary Clark4c06f5e2017-08-04 12:48:24 -04003053<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003054
Cary Clark493df1f2017-08-25 13:14:33 -04003055<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003056## getPathEffect
3057
3058<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3059SkPathEffect* getPathEffect() const
3060</pre>
3061
Cary Clark4c06f5e2017-08-04 12:48:24 -04003062Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3063Does 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 -04003064
3065### Return Value
3066
Cary Clark4c06f5e2017-08-04 12:48:24 -04003067<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003068
3069### Example
3070
3071<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3072
3073#### Example Output
3074
3075~~~~
3076nullptr == path effect
3077nullptr != path effect
3078~~~~
3079
3080</fiddle-embed></div>
3081
3082---
3083
Cary Clark493df1f2017-08-25 13:14:33 -04003084<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003085## refPathEffect
3086
3087<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003088sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003089</pre>
3090
Cary Clark4c06f5e2017-08-04 12:48:24 -04003091Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3092Increases <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 -04003093
3094### Return Value
3095
Cary Clark4c06f5e2017-08-04 12:48:24 -04003096<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003097
3098### Example
3099
3100<div><fiddle-embed name="c55c74f8f581870bd2c18f2f99765579">
3101
3102#### Example Output
3103
3104~~~~
3105path effect unique: true
3106path effect unique: false
3107~~~~
3108
3109</fiddle-embed></div>
3110
3111---
3112
Cary Clark493df1f2017-08-25 13:14:33 -04003113<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003114## setPathEffect
3115
3116<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003117void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003118</pre>
3119
Cary Clark6fc50412017-09-21 12:31:06 -04003120Sets <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
3121<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3122
3123Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003124
3125### Parameters
3126
Cary Clark8cc16c72017-08-25 11:51:49 -04003127<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003128replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003129 </tr>
3130</table>
3131
3132### Example
3133
3134<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3135
3136---
3137
3138# <a name="Mask_Filter_Methods"></a> Mask Filter Methods
Cary Clarkce101242017-09-01 15:51:02 -04003139<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 -04003140<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>,
3141and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003142
3143<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3144creating 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
3145modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003146
3147### Example
3148
3149<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3150
Cary Clark493df1f2017-08-25 13:14:33 -04003151<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003152## getMaskFilter
3153
3154<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3155SkMaskFilter* getMaskFilter() const
3156</pre>
3157
Cary Clark4c06f5e2017-08-04 12:48:24 -04003158Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3159Does 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 -04003160
3161### Return Value
3162
Cary Clark4c06f5e2017-08-04 12:48:24 -04003163<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003164
3165### Example
3166
3167<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3168
3169#### Example Output
3170
3171~~~~
3172nullptr == mask filter
3173nullptr != mask filter
3174~~~~
3175
3176</fiddle-embed></div>
3177
3178---
3179
Cary Clark493df1f2017-08-25 13:14:33 -04003180<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003181## refMaskFilter
3182
3183<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003184sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003185</pre>
3186
Cary Clark4c06f5e2017-08-04 12:48:24 -04003187Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003188
Cary Clark4c06f5e2017-08-04 12:48:24 -04003189Increases <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 -04003190
3191### Return Value
3192
Cary Clark4c06f5e2017-08-04 12:48:24 -04003193<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003194
3195### Example
3196
3197<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3198
3199#### Example Output
3200
3201~~~~
3202mask filter unique: true
3203mask filter unique: false
3204~~~~
3205
3206</fiddle-embed></div>
3207
3208---
3209
Cary Clark493df1f2017-08-25 13:14:33 -04003210<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003211## setMaskFilter
3212
3213<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003214void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003215</pre>
3216
Cary Clark6fc50412017-09-21 12:31:06 -04003217Sets <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
3218<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
3219<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3220
Cary Clark4c06f5e2017-08-04 12:48:24 -04003221Does not affect <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003222Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003223
3224### Parameters
3225
Cary Clark8cc16c72017-08-25 11:51:49 -04003226<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003227modifies clipping mask generated from drawn geometry</td>
3228 </tr>
3229</table>
3230
3231### Example
3232
3233<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3234
3235---
3236
3237# <a name="Typeface_Methods"></a> Typeface Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003238<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3239<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3240The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003241implementation.
3242
3243### Example
3244
3245<div><fiddle-embed name="c18b1696b8c1649bebf7eb1f8b89e0b0"></fiddle-embed></div>
3246
Cary Clark493df1f2017-08-25 13:14:33 -04003247<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003248## getTypeface
3249
3250<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3251SkTypeface* getTypeface() const
3252</pre>
3253
Cary Clark4c06f5e2017-08-04 12:48:24 -04003254Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003255Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003256
3257### Return Value
3258
Cary Clark4c06f5e2017-08-04 12:48:24 -04003259<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003260
3261### Example
3262
3263<div><fiddle-embed name="4d9ffb5761b62a9e3bc9b0bca8787bce">
3264
3265#### Example Output
3266
3267~~~~
3268nullptr == typeface
3269nullptr != typeface
3270~~~~
3271
3272</fiddle-embed></div>
3273
3274---
3275
Cary Clark493df1f2017-08-25 13:14:33 -04003276<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003277## refTypeface
3278
3279<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003280sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003281</pre>
3282
Cary Clark4c06f5e2017-08-04 12:48:24 -04003283Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003284
3285### Return Value
3286
Cary Clark4c06f5e2017-08-04 12:48:24 -04003287<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003288
3289### Example
3290
3291<div><fiddle-embed name="c8edce7b36a3ffda8af4fe89d7187dbc">
3292
3293#### Example Output
3294
3295~~~~
3296typeface1 != typeface2
3297typeface1 == typeface2
3298~~~~
3299
3300</fiddle-embed></div>
3301
3302---
3303
Cary Clark493df1f2017-08-25 13:14:33 -04003304<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003305## setTypeface
3306
3307<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003308void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003309</pre>
3310
Cary Clark6fc50412017-09-21 12:31:06 -04003311Sets <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>.
3312Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3313<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003314
3315### Parameters
3316
Cary Clark8cc16c72017-08-25 11:51:49 -04003317<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003318font and style used to draw text</td>
3319 </tr>
3320</table>
3321
3322### Example
3323
3324<div><fiddle-embed name="3d2656ec4c555ed2c7ec086720124a2a"></fiddle-embed></div>
3325
3326---
3327
3328# <a name="Rasterizer_Methods"></a> Rasterizer Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003329<a href="undocumented#Rasterizer">Rasterizer</a> controls how shapes are converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
3330<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>,
3331and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003332
Cary Clark4c06f5e2017-08-04 12:48:24 -04003333<a href="undocumented#Rasterizer">Rasterizer</a> may change the geometry and transparency of the shape, such as
Cary Clark8cc16c72017-08-25 11:51:49 -04003334creating 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 -04003335creates effects like embossing and outlining.
Cary Clark6fc50412017-09-21 12:31:06 -04003336
Cary Clarkbc5697d2017-10-04 14:31:33 -04003337<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 -04003338<a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003339
3340### Example
3341
3342<div><fiddle-embed name="e63f8a50996699342a14c6e54d684108"></fiddle-embed></div>
3343
Cary Clark493df1f2017-08-25 13:14:33 -04003344<a name="SkPaint_getRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003345## getRasterizer
3346
3347<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3348SkRasterizer* getRasterizer() const
3349</pre>
3350
Cary Clark4c06f5e2017-08-04 12:48:24 -04003351Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3352Does not alter <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003353
3354### Return Value
3355
Cary Clark4c06f5e2017-08-04 12:48:24 -04003356<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003357
3358### Example
3359
3360<div><fiddle-embed name="0707d407c3a14388b107af8ae5873e55">
3361
3362#### Example Output
3363
3364~~~~
3365nullptr == rasterizer
3366nullptr != rasterizer
3367~~~~
3368
3369</fiddle-embed></div>
3370
3371---
3372
Cary Clark493df1f2017-08-25 13:14:33 -04003373<a name="SkPaint_refRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003374## refRasterizer
3375
3376<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003377sk_sp&lt;SkRasterizer&gt; refRasterizer() const
Cary Clark12799e12017-07-28 15:18:29 -04003378</pre>
3379
Cary Clark4c06f5e2017-08-04 12:48:24 -04003380Returns <a href="undocumented#Rasterizer">Rasterizer</a> if set, or nullptr.
3381Increases <a href="undocumented#Rasterizer">Rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003382
3383### Return Value
3384
Cary Clark4c06f5e2017-08-04 12:48:24 -04003385<a href="undocumented#Rasterizer">Rasterizer</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003386
3387### Example
3388
3389<div><fiddle-embed name="c0855ce19a33cb7e5747750ef341b7b3">
3390
3391#### Example Output
3392
3393~~~~
3394rasterizer unique: true
3395rasterizer unique: false
3396~~~~
3397
3398</fiddle-embed></div>
3399
3400---
3401
Cary Clark493df1f2017-08-25 13:14:33 -04003402<a name="SkPaint_setRasterizer"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003403## setRasterizer
3404
3405<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003406void setRasterizer(sk_sp&lt;SkRasterizer&gt; rasterizer)
Cary Clark12799e12017-07-28 15:18:29 -04003407</pre>
3408
Cary Clark6fc50412017-09-21 12:31:06 -04003409Sets <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
3410<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
3411<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3412
Cary Clark4c06f5e2017-08-04 12:48:24 -04003413Does not affect <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003414Increments <a href="#SkPaint_setRasterizer_rasterizer">rasterizer</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003415
3416### Parameters
3417
Cary Clark8cc16c72017-08-25 11:51:49 -04003418<table> <tr> <td><a name="SkPaint_setRasterizer_rasterizer"> <code><strong>rasterizer </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003419how geometry is converted to <a href="undocumented#Mask_Alpha">Mask Alpha</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003420 </tr>
3421</table>
3422
3423### Example
3424
3425<div><fiddle-embed name="aec8ed9296c1628073086a33039f62b7"></fiddle-embed></div>
3426
3427---
3428
3429# <a name="Image_Filter_Methods"></a> Image Filter Methods
Cary Clark8cc16c72017-08-25 11:51:49 -04003430<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3431with <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 -04003432which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003433
Cary Clark4c06f5e2017-08-04 12:48:24 -04003434<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 -04003435can 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 -04003436<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
3437<a href="undocumented#Mask_Filter">Mask Filter</a> and <a href="undocumented#Rasterizer">Rasterizer</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003438
3439### Example
3440
3441<div><fiddle-embed name="88804938b49eb4f7c7f01ad52f4db0d8"></fiddle-embed></div>
3442
Cary Clark493df1f2017-08-25 13:14:33 -04003443<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003444## getImageFilter
3445
3446<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3447SkImageFilter* getImageFilter() const
3448</pre>
3449
Cary Clark4c06f5e2017-08-04 12:48:24 -04003450Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3451Does 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 -04003452
3453### Return Value
3454
Cary Clark4c06f5e2017-08-04 12:48:24 -04003455<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003456
3457### Example
3458
3459<div><fiddle-embed name="38788d42772641606e08c60d9dd418a2">
3460
3461#### Example Output
3462
3463~~~~
3464nullptr == image filter
3465nullptr != image filter
3466~~~~
3467
3468</fiddle-embed></div>
3469
3470---
3471
Cary Clark493df1f2017-08-25 13:14:33 -04003472<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003473## refImageFilter
3474
3475<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003476sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003477</pre>
3478
Cary Clark4c06f5e2017-08-04 12:48:24 -04003479Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3480Increases <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 -04003481
3482### Return Value
3483
Cary Clark4c06f5e2017-08-04 12:48:24 -04003484<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003485
3486### Example
3487
3488<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3489
3490#### Example Output
3491
3492~~~~
3493image filter unique: true
3494image filter unique: false
3495~~~~
3496
3497</fiddle-embed></div>
3498
3499---
3500
Cary Clark493df1f2017-08-25 13:14:33 -04003501<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003502## setImageFilter
3503
3504<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003505void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003506</pre>
3507
Cary Clark6fc50412017-09-21 12:31:06 -04003508Sets <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
3509<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 -04003510on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003511
Cary Clark4c06f5e2017-08-04 12:48:24 -04003512Does not affect <a href="undocumented#Rasterizer">Rasterizer</a> or <a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003513Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003514
3515### Parameters
3516
Cary Clark8cc16c72017-08-25 11:51:49 -04003517<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003518how <a href="undocumented#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003519 </tr>
3520</table>
3521
3522### Example
3523
3524<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3525
3526---
3527
3528# <a name="Draw_Looper_Methods"></a> Draw Looper Methods
Cary Clark4c06f5e2017-08-04 12:48:24 -04003529<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 -04003530to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003531
Cary Clark4c06f5e2017-08-04 12:48:24 -04003532<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3533<a href="undocumented#Draw_Looper">Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
3534Set <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 -04003535
3536### Example
3537
3538<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3539
Cary Clark493df1f2017-08-25 13:14:33 -04003540<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003541## getDrawLooper
3542
3543<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3544SkDrawLooper* getDrawLooper() const
3545</pre>
3546
Cary Clark4c06f5e2017-08-04 12:48:24 -04003547Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3548Does 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 -04003549
3550### Return Value
3551
Cary Clark4c06f5e2017-08-04 12:48:24 -04003552<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003553
3554### Example
3555
3556<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3557
3558#### Example Output
3559
3560~~~~
3561nullptr == draw looper
3562nullptr != draw looper
3563~~~~
3564
3565</fiddle-embed></div>
3566
3567---
3568
Cary Clark493df1f2017-08-25 13:14:33 -04003569<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003570## refDrawLooper
3571
3572<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003573sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003574</pre>
3575
Cary Clark4c06f5e2017-08-04 12:48:24 -04003576Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3577Increases <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 -04003578
3579### Return Value
3580
Cary Clark4c06f5e2017-08-04 12:48:24 -04003581<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003582
3583### Example
3584
3585<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3586
3587#### Example Output
3588
3589~~~~
3590draw looper unique: true
3591draw looper unique: false
3592~~~~
3593
3594</fiddle-embed></div>
3595
3596---
3597
Cary Clark493df1f2017-08-25 13:14:33 -04003598<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003599## getLooper
3600
3601<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3602SkDrawLooper* getLooper() const
3603</pre>
3604
3605Deprecated.
3606
3607(see bug.skia.org/6259)
3608
3609### Return Value
3610
Cary Clark4c06f5e2017-08-04 12:48:24 -04003611<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003612
3613---
3614
Cary Clark493df1f2017-08-25 13:14:33 -04003615<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003616## setDrawLooper
3617
3618<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003619void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003620</pre>
3621
Cary Clark6fc50412017-09-21 12:31:06 -04003622Sets <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
3623<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
3624drawing unaltered.
3625
3626Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003627
3628### Parameters
3629
Cary Clark8cc16c72017-08-25 11:51:49 -04003630<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003631iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003632 </tr>
3633</table>
3634
3635### Example
3636
3637<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3638
3639---
3640
Cary Clark493df1f2017-08-25 13:14:33 -04003641<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003642## setLooper
3643
3644<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003645void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003646</pre>
3647
3648Deprecated.
3649
3650(see bug.skia.org/6259)
3651
3652### Parameters
3653
Cary Clark8cc16c72017-08-25 11:51:49 -04003654<table> <tr> <td><a name="SkPaint_setLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
3655sets <a href="undocumented#Draw_Looper">Draw Looper</a> to <a href="#SkPaint_setLooper_drawLooper">drawLooper</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003656 </tr>
3657
3658---
3659
3660</table>
3661
3662# <a name="Text_Align"></a> Text Align
3663
Cary Clark8cc16c72017-08-25 11:51:49 -04003664## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003665
Cary Clark154beea2017-10-26 07:58:48 -04003666<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003667enum <a href="#SkPaint_Align">Align</a> {
3668<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3669<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3670<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003671};</pre>
3672
Cary Clark8cc16c72017-08-25 11:51:49 -04003673<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003674<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 -04003675<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
3676<a href="#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
3677and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003678as 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 -04003679
3680The text position is set by the font for both horizontal and vertical text.
3681Typically, for horizontal text, the position is to the left side of the glyph on the
3682base line; and for vertical text, the position is the horizontal center of the glyph
3683at the caps height.
3684
Cary Clark8cc16c72017-08-25 11:51:49 -04003685<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 -04003686using the metrics returned by the font.
3687
Cary Clark8cc16c72017-08-25 11:51:49 -04003688<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003689
3690### Constants
3691
3692<table>
3693 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003694 <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 -04003695 </tr>
3696 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003697 <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
3698half 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 -04003699 </tr>
3700 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003701 <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,
3702and 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 -04003703 </tr>
3704
3705</table>
3706
Cary Clark8cc16c72017-08-25 11:51:49 -04003707## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003708
Cary Clark154beea2017-10-26 07:58:48 -04003709<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003710enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003711<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003712};</pre>
3713
3714### Constants
3715
3716<table>
3717 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003718 <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 -04003719 </tr>
3720
3721</table>
3722
3723### Example
3724
3725<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3726
3727### Example
3728
Cary Clark8cc16c72017-08-25 11:51:49 -04003729<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 -04003730
Cary Clark493df1f2017-08-25 13:14:33 -04003731<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003732## getTextAlign
3733
3734<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3735Align getTextAlign() const
3736</pre>
3737
Cary Clark8cc16c72017-08-25 11:51:49 -04003738Returns <a href="#Text_Align">Text Align</a>.
3739Returns <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 -04003740
3741### Return Value
3742
3743text placement relative to position
3744
3745### Example
3746
3747<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3748
3749#### Example Output
3750
3751~~~~
3752kLeft_Align == default
3753~~~~
3754
3755</fiddle-embed></div>
3756
3757---
3758
Cary Clark493df1f2017-08-25 13:14:33 -04003759<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003760## setTextAlign
3761
3762<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3763void setTextAlign(Align align)
3764</pre>
3765
Cary Clark8cc16c72017-08-25 11:51:49 -04003766Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3767Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003768
3769### Parameters
3770
Cary Clark8cc16c72017-08-25 11:51:49 -04003771<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003772text placement relative to position</td>
3773 </tr>
3774</table>
3775
3776### Example
3777
Cary Clark4c06f5e2017-08-04 12:48:24 -04003778<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 -04003779alignment out of range has no effect.</div></fiddle-embed></div>
3780
3781---
3782
3783# <a name="Text_Size"></a> Text Size
Cary Clark8cc16c72017-08-25 11:51:49 -04003784<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3785<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3786<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003787Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003788
3789### Example
3790
3791<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3792
Cary Clark493df1f2017-08-25 13:14:33 -04003793<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003794## getTextSize
3795
3796<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3797SkScalar getTextSize() const
3798</pre>
3799
Cary Clark8cc16c72017-08-25 11:51:49 -04003800Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003801
3802### Return Value
3803
3804typographic height of text
3805
3806### Example
3807
3808<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3809
3810---
3811
Cary Clark493df1f2017-08-25 13:14:33 -04003812<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003813## setTextSize
3814
3815<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3816void setTextSize(SkScalar textSize)
3817</pre>
3818
Cary Clark8cc16c72017-08-25 11:51:49 -04003819Sets <a href="#Text_Size">Text Size</a> in points.
3820Has 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 -04003821
3822### Parameters
3823
Cary Clark8cc16c72017-08-25 11:51:49 -04003824<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003825typographic height of text</td>
3826 </tr>
3827</table>
3828
3829### Example
3830
3831<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3832
3833---
3834
3835# <a name="Text_Scale_X"></a> Text Scale X
Cary Clark8cc16c72017-08-25 11:51:49 -04003836<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003837<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003838is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003839<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3840<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003841
3842### Example
3843
3844<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3845
Cary Clark493df1f2017-08-25 13:14:33 -04003846<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003847## getTextScaleX
3848
3849<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3850SkScalar getTextScaleX() const
3851</pre>
3852
Cary Clark8cc16c72017-08-25 11:51:49 -04003853Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003854Default value is 1.
3855
3856### Return Value
3857
3858text horizontal scale
3859
3860### Example
3861
3862<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3863
3864---
3865
Cary Clark493df1f2017-08-25 13:14:33 -04003866<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003867## setTextScaleX
3868
3869<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3870void setTextScaleX(SkScalar scaleX)
3871</pre>
3872
Cary Clark8cc16c72017-08-25 11:51:49 -04003873Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003874Default value is 1.
3875
3876### Parameters
3877
Cary Clark8cc16c72017-08-25 11:51:49 -04003878<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003879text horizontal scale</td>
3880 </tr>
3881</table>
3882
3883### Example
3884
3885<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3886
3887---
3888
3889# <a name="Text_Skew_X"></a> Text Skew X
Cary Clark8cc16c72017-08-25 11:51:49 -04003890<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003891<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003892is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003893<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3894<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003895
3896### Example
3897
3898<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3899
Cary Clark493df1f2017-08-25 13:14:33 -04003900<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003901## getTextSkewX
3902
3903<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3904SkScalar getTextSkewX() const
3905</pre>
3906
Cary Clark8cc16c72017-08-25 11:51:49 -04003907Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003908Default value is zero.
3909
3910### Return Value
3911
3912additional shear in x-axis relative to y-axis
3913
3914### Example
3915
3916<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3917
3918---
3919
Cary Clark493df1f2017-08-25 13:14:33 -04003920<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003921## setTextSkewX
3922
3923<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
3924void setTextSkewX(SkScalar skewX)
3925</pre>
3926
Cary Clark8cc16c72017-08-25 11:51:49 -04003927Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003928Default value is zero.
3929
3930### Parameters
3931
Cary Clark8cc16c72017-08-25 11:51:49 -04003932<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003933additional shear in x-axis relative to y-axis</td>
3934 </tr>
3935</table>
3936
3937### Example
3938
3939<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3940
3941---
3942
3943# <a name="Text_Encoding"></a> Text Encoding
3944
Cary Clark8cc16c72017-08-25 11:51:49 -04003945## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003946
Cary Clark154beea2017-10-26 07:58:48 -04003947<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003948enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3949<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3950<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3951<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3952<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003953};</pre>
3954
Cary Clark6fc50412017-09-21 12:31:06 -04003955<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clarkbc5697d2017-10-04 14:31:33 -04003956size, or glyph indices. Characters are encoded as specified by the<a href="undocumented#Unicode">Unicode</a> standard.
Cary Clark6fc50412017-09-21 12:31:06 -04003957
Cary Clark4c06f5e2017-08-04 12:48:24 -04003958Character 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 -04003959All character code formats are able to represent all of <a href="undocumented#Unicode">Unicode</a>, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003960in the total storage required.
3961
Cary Clark6fc50412017-09-21 12:31:06 -04003962<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.
3963
3964<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.
3965
3966<a href="undocumented#UTF_32">UTF-32</a>encodes each character as one 32-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003967
Cary Clark4c06f5e2017-08-04 12:48:24 -04003968<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 -04003969A glyph index is a 16-bit word.
3970
Cary Clark8cc16c72017-08-25 11:51:49 -04003971<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 -04003972
3973### Constants
3974
3975<table>
3976 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003977 <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 -04003978 </tr>
3979 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003980 <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 -04003981 </tr>
3982 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003983 <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 -04003984 </tr>
3985 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003986 <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 -04003987 </tr>
3988
3989</table>
3990
3991### Example
3992
Cary Clarkbc5697d2017-10-04 14:31:33 -04003993<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in <a href="undocumented#UTF_8">UTF-8</a>.
3994Second line is encoded in <a href="undocumented#UTF_16">UTF-16</a>.
3995Third line is encoded in <a href="undocumented#UTF_32">UTF-32</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003996Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
3997
Cary Clark493df1f2017-08-25 13:14:33 -04003998<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003999## getTextEncoding
4000
4001<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4002TextEncoding getTextEncoding() const
4003</pre>
4004
Cary Clark8cc16c72017-08-25 11:51:49 -04004005Returns <a href="#Text_Encoding">Text Encoding</a>.
4006<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 -04004007
4008### Return Value
4009
Cary Clark8cc16c72017-08-25 11:51:49 -04004010one 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
4011<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04004012
4013### Example
4014
4015<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
4016
4017#### Example Output
4018
4019~~~~
4020kUTF8_TextEncoding == text encoding
4021kGlyphID_TextEncoding == text encoding
4022~~~~
4023
4024</fiddle-embed></div>
4025
4026---
4027
Cary Clark493df1f2017-08-25 13:14:33 -04004028<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004029## setTextEncoding
4030
4031<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4032void setTextEncoding(TextEncoding encoding)
4033</pre>
4034
Cary Clark8cc16c72017-08-25 11:51:49 -04004035Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
4036<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
4037Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004038
4039### Parameters
4040
Cary Clark8cc16c72017-08-25 11:51:49 -04004041<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
4042one 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
4043<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004044 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04004045#
4046
Cary Clark12799e12017-07-28 15:18:29 -04004047</table>
4048
4049### Example
4050
4051<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
4052
4053#### Example Output
4054
4055~~~~
40564 != text encoding
4057~~~~
4058
4059</fiddle-embed></div>
4060
4061---
4062
4063# <a name="Font_Metrics"></a> Font Metrics
Cary Clarkce101242017-09-01 15:51:02 -04004064<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 -04004065The 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 -04004066<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04004067
Cary Clark4c06f5e2017-08-04 12:48:24 -04004068<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 -04004069X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4070are positive.
4071Y-axis values above the baseline are negative, and below the baseline are positive.
4072
4073### Example
4074
4075<div><fiddle-embed name="b5b76e0a15da0c3530071186a9006498"></fiddle-embed></div>
4076
Cary Clark8cc16c72017-08-25 11:51:49 -04004077# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004078
Cary Clark154beea2017-10-26 07:58:48 -04004079<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004080struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4081enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4082<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4083<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4084<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4085<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004086};
4087
Cary Clark8cc16c72017-08-25 11:51:49 -04004088uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4089<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4090<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4091<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4092<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4093<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4094<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4095<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4096<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4097<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4098<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4099<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4100<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4101<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4102<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4103<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004104
Cary Clark8cc16c72017-08-25 11:51:49 -04004105bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4106bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4107bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4108bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004109};</pre>
4110
Cary Clark154beea2017-10-26 07:58:48 -04004111<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
4112computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4113not available.
4114
4115<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
4116are valid, since their value may be zero.
4117<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
4118are valid, since their value may be zero.
4119
Cary Clark8cc16c72017-08-25 11:51:49 -04004120## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004121
Cary Clark154beea2017-10-26 07:58:48 -04004122<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004123enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4124<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4125<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4126<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4127<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004128};</pre>
4129
Cary Clark154beea2017-10-26 07:58:48 -04004130<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4131the underline or strikeout metric may be valid and zero.
4132Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4133
Cary Clark12799e12017-07-28 15:18:29 -04004134### Constants
4135
4136<table>
4137 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004138 <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 -04004139 </tr>
4140 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004141 <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 -04004142 </tr>
4143 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004144 <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 -04004145 </tr>
4146 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004147 <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 -04004148 </tr>
4149
4150</table>
4151
Cary Clark8cc16c72017-08-25 11:51:49 -04004152<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004153
Cary Clark8cc16c72017-08-25 11:51:49 -04004154<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004155
Cary Clark8cc16c72017-08-25 11:51:49 -04004156<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004157
4158Largest height for any glyph.
4159A measure from the baseline, and is less than or equal to zero.
4160
Cary Clark8cc16c72017-08-25 11:51:49 -04004161<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004162
4163Recommended distance above the baseline to reserve for a line of text.
4164A measure from the baseline, and is less than or equal to zero.
4165
Cary Clark8cc16c72017-08-25 11:51:49 -04004166<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004167
4168Recommended distance below the baseline to reserve for a line of text.
4169A measure from the baseline, and is greater than or equal to zero.
4170
Cary Clark8cc16c72017-08-25 11:51:49 -04004171<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004172
4173Greatest extent below the baseline for any glyph.
4174A measure from the baseline, and is greater than or equal to zero.
4175
Cary Clark8cc16c72017-08-25 11:51:49 -04004176<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004177
4178Recommended distance to add between lines of text.
4179Greater than or equal to zero.
4180
Cary Clark8cc16c72017-08-25 11:51:49 -04004181<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004182
4183Average character width, if it is available.
4184Zero if no average width is stored in the font.
4185
Cary Clark8cc16c72017-08-25 11:51:49 -04004186<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004187
4188Maximum character width.
4189
Cary Clark8cc16c72017-08-25 11:51:49 -04004190<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004191
Cary Clarkce101242017-09-01 15:51:02 -04004192Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004193Typically less than zero.
4194
Cary Clark8cc16c72017-08-25 11:51:49 -04004195<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004196
Cary Clarkce101242017-09-01 15:51:02 -04004197Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004198Typically greater than zero.
4199
Cary Clark8cc16c72017-08-25 11:51:49 -04004200<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004201
4202Height of a lower-case 'x'.
4203May be zero if no lower-case height is stored in the font.
4204
Cary Clark8cc16c72017-08-25 11:51:49 -04004205<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004206
4207Height of an upper-case letter.
4208May be zero if no upper-case height is stored in the font.
4209
Cary Clark8cc16c72017-08-25 11:51:49 -04004210<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004211
4212Underline thickness. If the metric
Cary Clark8cc16c72017-08-25 11:51:49 -04004213is valid, the <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4214If <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 -04004215
Cary Clark8cc16c72017-08-25 11:51:49 -04004216<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004217
4218Underline position relative to the baseline.
4219It may be negative, to draw the underline above the baseline, zero
4220to draw the underline on the baseline, or positive to draw the underline
4221below the baseline.
4222
Cary Clark8cc16c72017-08-25 11:51:49 -04004223If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4224If <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 -04004225
Cary Clark8cc16c72017-08-25 11:51:49 -04004226<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004227
4228Strikeout thickness. If the metric
Cary Clark8cc16c72017-08-25 11:51:49 -04004229is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4230If <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 -04004231
Cary Clark8cc16c72017-08-25 11:51:49 -04004232<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004233
4234Strikeout position relative to the baseline.
4235It may be negative, to draw the strikeout above the baseline, zero
4236to draw the strikeout on the baseline, or positive to draw the strikeout
4237below the baseline.
4238
Cary Clark8cc16c72017-08-25 11:51:49 -04004239If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4240If <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 -04004241
Cary Clark493df1f2017-08-25 13:14:33 -04004242<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004243## hasUnderlineThickness
4244
4245<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4246bool hasUnderlineThickness(SkScalar* thickness) const
4247</pre>
4248
Cary Clark8cc16c72017-08-25 11:51:49 -04004249If <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 -04004250<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,
4251return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004252
4253### Parameters
4254
Cary Clark8cc16c72017-08-25 11:51:49 -04004255<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004256storage for underline width</td>
4257 </tr>
4258</table>
4259
4260### Return Value
4261
4262true if font specifies underline width
4263
4264---
4265
Cary Clark493df1f2017-08-25 13:14:33 -04004266<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004267## hasUnderlinePosition
4268
4269<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4270bool hasUnderlinePosition(SkScalar* position) const
4271</pre>
4272
Cary Clark8cc16c72017-08-25 11:51:49 -04004273If <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 -04004274<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,
4275return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004276
4277### Parameters
4278
Cary Clark8cc16c72017-08-25 11:51:49 -04004279<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4280storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004281 </tr>
4282</table>
4283
4284### Return Value
4285
Cary Clark8cc16c72017-08-25 11:51:49 -04004286true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004287
4288---
4289
Cary Clark493df1f2017-08-25 13:14:33 -04004290<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004291## hasStrikeoutThickness
4292
4293<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4294bool hasStrikeoutThickness(SkScalar* thickness) const
4295</pre>
4296
Cary Clark8cc16c72017-08-25 11:51:49 -04004297If <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 -04004298<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,
4299return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004300
4301### Parameters
4302
Cary Clark8cc16c72017-08-25 11:51:49 -04004303<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004304storage for strikeout width</td>
4305 </tr>
4306</table>
4307
4308### Return Value
4309
4310true if font specifies strikeout width
4311
4312---
4313
Cary Clark493df1f2017-08-25 13:14:33 -04004314<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004315## hasStrikeoutPosition
4316
4317<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4318bool hasStrikeoutPosition(SkScalar* position) const
4319</pre>
4320
Cary Clark8cc16c72017-08-25 11:51:49 -04004321If <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 -04004322<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,
4323return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004324
4325### Parameters
4326
Cary Clark8cc16c72017-08-25 11:51:49 -04004327<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4328storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004329 </tr>
4330</table>
4331
4332### Return Value
4333
Cary Clark8cc16c72017-08-25 11:51:49 -04004334true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004335
4336---
4337
Cary Clark493df1f2017-08-25 13:14:33 -04004338<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004339## getFontMetrics
4340
4341<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4342SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4343</pre>
4344
Cary Clark8cc16c72017-08-25 11:51:49 -04004345Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4346The 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 -04004347descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004348If <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>.
4349Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4350dimensions 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>,
4351<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4352Results 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 -04004353is ignored.
4354
4355### Parameters
4356
Cary Clark8cc16c72017-08-25 11:51:49 -04004357<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4358storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4359 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004360additional multiplier for returned values</td>
4361 </tr>
4362</table>
4363
4364### Return Value
4365
4366recommended spacing between lines
4367
4368### Example
4369
4370<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4371
4372### See Also
4373
Cary Clark8cc16c72017-08-25 11:51:49 -04004374<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 -04004375
4376---
4377
Cary Clark493df1f2017-08-25 13:14:33 -04004378<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004379## getFontSpacing
4380
4381<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4382SkScalar getFontSpacing() const
4383</pre>
4384
4385Returns the recommended spacing between lines: the sum of metrics
4386descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004387Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004388dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004389Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004390
4391### Return Value
4392
4393recommended spacing between lines
4394
4395### Example
4396
4397<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4398
4399#### Example Output
4400
4401~~~~
4402textSize: 12 fontSpacing: 13.9688
4403textSize: 18 fontSpacing: 20.9531
4404textSize: 24 fontSpacing: 27.9375
4405textSize: 32 fontSpacing: 37.25
4406~~~~
4407
4408</fiddle-embed></div>
4409
4410---
4411
Cary Clark493df1f2017-08-25 13:14:33 -04004412<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004413## getFontBounds
4414
4415<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4416SkRect getFontBounds() const
4417</pre>
4418
Cary Clarkce101242017-09-01 15:51:02 -04004419Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004420Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004421ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4422and <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 -04004423
Cary Clark8cc16c72017-08-25 11:51:49 -04004424If <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,
4425returns the same bounds as <a href="#Font_Metrics">Font Metrics</a> { <a href="#SkPaint_FontMetrics_fXMin">FontMetrics::fXMin</a>,
4426<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 -04004427
4428### Return Value
4429
Cary Clarkce101242017-09-01 15:51:02 -04004430union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004431
4432### Example
4433
4434<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4435
4436#### Example Output
4437
4438~~~~
4439metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4440font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4441~~~~
4442
4443</fiddle-embed></div>
4444
4445---
4446
Cary Clark493df1f2017-08-25 13:14:33 -04004447<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004448## textToGlyphs
4449
4450<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4451int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4452</pre>
4453
Cary Clark8cc16c72017-08-25 11:51:49 -04004454Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4455Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4456<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>.
4457<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004458
Cary Clarkbc5697d2017-10-04 14:31:33 -04004459Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004460
Cary Clark8cc16c72017-08-25 11:51:49 -04004461If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4462If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004463
Cary Clark8cc16c72017-08-25 11:51:49 -04004464If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
4465<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 -04004466
4467### Parameters
4468
Cary Clark8cc16c72017-08-25 11:51:49 -04004469<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004470character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004471 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004472length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004473 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004474storage for glyph indices; may be nullptr</td>
4475 </tr>
4476</table>
4477
4478### Return Value
4479
Cary Clark8cc16c72017-08-25 11:51:49 -04004480number 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 -04004481
4482### Example
4483
4484<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4485
4486---
4487
Cary Clark493df1f2017-08-25 13:14:33 -04004488<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004489## countText
4490
4491<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4492int countText(const void* text, size_t byteLength) const
4493</pre>
4494
Cary Clarkce101242017-09-01 15:51:02 -04004495Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4496Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004497Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004498
4499### Parameters
4500
Cary Clark8cc16c72017-08-25 11:51:49 -04004501<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004502character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004503 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004504length of character storage in bytes</td>
4505 </tr>
4506</table>
4507
4508### Return Value
4509
Cary Clarkce101242017-09-01 15:51:02 -04004510number 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 -04004511
4512### Example
4513
4514<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4515
4516#### Example Output
4517
4518~~~~
4519count = 5
4520~~~~
4521
4522</fiddle-embed></div>
4523
4524---
4525
Cary Clark493df1f2017-08-25 13:14:33 -04004526<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004527## containsText
4528
4529<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4530bool containsText(const void* text, size_t byteLength) const
4531</pre>
4532
Cary Clark8cc16c72017-08-25 11:51:49 -04004533Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
4534Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004535<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004536
Cary Clark8cc16c72017-08-25 11:51:49 -04004537If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4538returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4539does 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 -04004540
Cary Clarkce101242017-09-01 15:51:02 -04004541Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004542
4543### Parameters
4544
Cary Clark8cc16c72017-08-25 11:51:49 -04004545<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004546array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004547 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4548number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004549 </tr>
4550</table>
4551
4552### Return Value
4553
Cary Clark8cc16c72017-08-25 11:51:49 -04004554true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004555
4556### Example
4557
Cary Clark8cc16c72017-08-25 11:51:49 -04004558<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 -04004559corresponding to the <a href="undocumented#Unicode">Unicode</a> surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004560
4561#### Example Output
4562
4563~~~~
45640x00b0 == has char
45650xd800 != has char
4566~~~~
4567
4568</fiddle-embed></div>
4569
4570### Example
4571
Cary Clark8cc16c72017-08-25 11:51:49 -04004572<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 -04004573that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004574
4575#### Example Output
4576
4577~~~~
45780x01ff == has glyph
45790x0000 != has glyph
45800xffff == has glyph
4581~~~~
4582
4583</fiddle-embed></div>
4584
4585### See Also
4586
Cary Clark8cc16c72017-08-25 11:51:49 -04004587<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004588
4589---
4590
Cary Clark493df1f2017-08-25 13:14:33 -04004591<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004592## glyphsToUnichars
4593
4594<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4595void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4596</pre>
4597
Cary Clark8cc16c72017-08-25 11:51:49 -04004598Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004599<a href="undocumented#Glyph">Glyph</a> values without direct <a href="undocumented#Unicode">Unicode</a> equivalents are mapped to zero.
4600Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004601by <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 -04004602
Cary Clark8cc16c72017-08-25 11:51:49 -04004603Only 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 -04004604
4605### Parameters
4606
Cary Clark8cc16c72017-08-25 11:51:49 -04004607<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004608array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004609 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004610length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004611 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004612storage for character codes, one per glyph</td>
4613 </tr>
4614</table>
4615
4616### Example
4617
Cary Clark8cc16c72017-08-25 11:51:49 -04004618<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 -04004619
4620---
4621
4622# <a name="Measure_Text"></a> Measure Text
4623
Cary Clark493df1f2017-08-25 13:14:33 -04004624<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004625## measureText
4626
4627<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4628SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4629</pre>
4630
Cary Clark8cc16c72017-08-25 11:51:49 -04004631Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4632and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4633The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4634Uses <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,
4635and <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
4636<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4637Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4638The 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 -04004639
4640### Parameters
4641
Cary Clark8cc16c72017-08-25 11:51:49 -04004642<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004643character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004644 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4645number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4646 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004647returns bounding box relative to (0, 0) if not nullptr</td>
4648 </tr>
4649</table>
4650
4651### Return Value
4652
4653advance width or height
4654
4655### Example
4656
4657<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4658
4659---
4660
4661<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4662SkScalar measureText(const void* text, size_t length) const
4663</pre>
4664
Cary Clark8cc16c72017-08-25 11:51:49 -04004665Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4666and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4667The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4668Uses <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,
4669and <a href="#Text_Size">Text Size</a> to scale the metrics.
4670Does 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 -04004671
4672### Parameters
4673
Cary Clark8cc16c72017-08-25 11:51:49 -04004674<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004675character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004676 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4677number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004678 </tr>
4679</table>
4680
4681### Return Value
4682
4683advance width or height
4684
4685### Example
4686
4687<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4688
4689#### Example Output
4690
4691~~~~
4692default width = 5
4693double width = 10
4694~~~~
4695
4696</fiddle-embed></div>
4697
4698---
4699
Cary Clark493df1f2017-08-25 13:14:33 -04004700<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004701## breakText
4702
4703<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4704size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004705 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004706</pre>
4707
Cary Clark8cc16c72017-08-25 11:51:49 -04004708Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4709If <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
4710equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4711If <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
4712equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4713Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4714Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4715Uses <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,
4716and <a href="#Text_Size">Text Size</a> to scale the metrics.
4717Does 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 -04004718
4719### Parameters
4720
Cary Clark8cc16c72017-08-25 11:51:49 -04004721<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004722character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004723 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4724number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4725 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4726advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4727 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4728returns 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 -04004729 </tr>
4730</table>
4731
4732### Return Value
4733
Cary Clark8cc16c72017-08-25 11:51:49 -04004734bytes 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 -04004735
4736### Example
4737
Cary Clark4c06f5e2017-08-04 12:48:24 -04004738<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 -04004739<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 -04004740
4741---
4742
Cary Clark493df1f2017-08-25 13:14:33 -04004743<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004744## getTextWidths
4745
4746<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4747int getTextWidths(const void* text, size_t byteLength, SkScalar widths[],
Cary Clark73fa9722017-08-29 17:36:51 -04004748 SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004749</pre>
4750
Cary Clark8cc16c72017-08-25 11:51:49 -04004751Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4752the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4753Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4754If <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.
4755if <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.
4756If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4757If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4758Uses <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,
4759and <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>.
4760Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4761Does 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 -04004762
4763### Parameters
4764
Cary Clark8cc16c72017-08-25 11:51:49 -04004765<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004766character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004767 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4768number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4769 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4770returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4771 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4772returns <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 -04004773 </tr>
4774</table>
4775
4776### Return Value
4777
Cary Clark8cc16c72017-08-25 11:51:49 -04004778glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004779
4780### Example
4781
Cary Clarkce101242017-09-01 15:51:02 -04004782<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 -04004783The 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 -04004784
4785---
4786
4787# <a name="Text_Path"></a> Text Path
Cary Clarkce101242017-09-01 15:51:02 -04004788<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 -04004789
Cary Clark493df1f2017-08-25 13:14:33 -04004790<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004791## getTextPath
4792
4793<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4794void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y,
4795 SkPath* path) const
4796</pre>
4797
Cary Clark8cc16c72017-08-25 11:51:49 -04004798Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4799Uses <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,
4800and <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.
4801All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4802Uses <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 -04004803
4804### Parameters
4805
Cary Clark8cc16c72017-08-25 11:51:49 -04004806<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004807character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004808 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4809number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4810 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
4811x-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
4812 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
4813y-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
4814 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004815geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004816 </tr>
4817</table>
4818
4819### Example
4820
Cary Clark4c06f5e2017-08-04 12:48:24 -04004821<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 -04004822the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4823
4824---
4825
Cary Clark493df1f2017-08-25 13:14:33 -04004826<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004827## getPosTextPath
4828
4829<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4830void getPosTextPath(const void* text, size_t length, const SkPoint pos[],
4831 SkPath* path) const
4832</pre>
4833
Cary Clark8cc16c72017-08-25 11:51:49 -04004834Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4835Uses <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,
4836and <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.
4837All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4838Uses <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>.
4839<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004840
4841### Parameters
4842
Cary Clark8cc16c72017-08-25 11:51:49 -04004843<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004844character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004845 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4846number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4847 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004848positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004849 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004850geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004851 </tr>
4852</table>
4853
4854### Example
4855
Cary Clarkce101242017-09-01 15:51:02 -04004856<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 -04004857
4858---
4859
4860# <a name="Text_Intercepts"></a> Text Intercepts
Cary Clarkce101242017-09-01 15:51:02 -04004861<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 -04004862of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clarkce101242017-09-01 15:51:02 -04004863underline that skips <a href="undocumented#Descenders">Descenders</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004864
Cary Clark493df1f2017-08-25 13:14:33 -04004865<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004866## getTextIntercepts
4867
4868<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4869int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4870 const SkScalar bounds[2], SkScalar* intervals) const
4871</pre>
4872
Cary Clark8cc16c72017-08-25 11:51:49 -04004873Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4874<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 -04004875The 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 -04004876the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004877Uses <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,
4878and <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.
4879Uses <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>.
4880Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4881<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004882
4883### Parameters
4884
Cary Clark8cc16c72017-08-25 11:51:49 -04004885<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004886character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004887 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4888number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4889 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
4890x-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4891 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
4892y-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4893 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004894lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004895 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004896returned intersections; may be nullptr</td>
4897 </tr>
4898</table>
4899
4900### Return Value
4901
4902number of intersections; may be zero
4903
4904### Example
4905
Cary Clarkce101242017-09-01 15:51:02 -04004906<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 -04004907
4908---
4909
Cary Clark493df1f2017-08-25 13:14:33 -04004910<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004911## getPosTextIntercepts
4912
4913<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4914int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4915 const SkScalar bounds[2], SkScalar* intervals) const
4916</pre>
4917
Cary Clark8cc16c72017-08-25 11:51:49 -04004918Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4919<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 -04004920The 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 -04004921the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004922Uses <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,
4923and <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.
4924Uses <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>.
4925Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4926<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004927
4928### Parameters
4929
Cary Clark8cc16c72017-08-25 11:51:49 -04004930<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004931character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004932 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4933number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4934 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004935positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004936 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004937lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004938 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004939returned intersections; may be nullptr</td>
4940 </tr>
4941</table>
4942
4943### Return Value
4944
Cary Clarka523d2d2017-08-30 08:58:10 -04004945number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004946
4947### Example
4948
Cary Clarkce101242017-09-01 15:51:02 -04004949<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 -04004950
4951---
4952
Cary Clark493df1f2017-08-25 13:14:33 -04004953<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004954## getPosTextHIntercepts
4955
4956<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
4957int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[],
4958 SkScalar constY, const SkScalar bounds[2],
4959 SkScalar* intervals) const
4960</pre>
4961
Cary Clark8cc16c72017-08-25 11:51:49 -04004962Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4963<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 -04004964The 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 -04004965the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004966Uses <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,
4967and <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.
4968Uses <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>.
4969Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4970<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004971
4972### Parameters
4973
Cary Clark8cc16c72017-08-25 11:51:49 -04004974<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004975character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004976 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4977number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4978 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004979positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004980 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004981position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004982 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004983lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004984 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004985returned intersections; may be nullptr</td>
4986 </tr>
4987</table>
4988
4989### Return Value
4990
4991number of intersections; may be zero
4992
4993### Example
4994
Cary Clark4c06f5e2017-08-04 12:48:24 -04004995<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 -04004996
4997---
4998
Cary Clark493df1f2017-08-25 13:14:33 -04004999<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005000## getTextBlobIntercepts
5001
5002<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5003int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2],
5004 SkScalar* intervals) const
5005</pre>
5006
Cary Clark8cc16c72017-08-25 11:51:49 -04005007Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
5008<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04005009The 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 -04005010the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04005011Uses <a href="#Text_Encoding">Text Encoding</a> to decode text, <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
5012and <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 -04005013Uses 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 -04005014Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
5015<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04005016
5017### Parameters
5018
Cary Clark8cc16c72017-08-25 11:51:49 -04005019<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005020<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005021 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005022lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005023 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005024returned intersections; may be nullptr</td>
5025 </tr>
5026</table>
5027
5028### Return Value
5029
5030number of intersections; may be zero
5031
5032### Example
5033
5034<div><fiddle-embed name="4961b05f4f26cf270ab4948a57876341"></fiddle-embed></div>
5035
5036---
5037
Cary Clark493df1f2017-08-25 13:14:33 -04005038<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005039## nothingToDraw
5040
5041<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5042bool nothingToDraw() const
5043</pre>
5044
Cary Clark8cc16c72017-08-25 11:51:49 -04005045Returns true if <a href="#Paint">Paint</a> prevents all drawing;
5046otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04005047
Cary Clarkce101242017-09-01 15:51:02 -04005048Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
5049new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04005050
5051### Return Value
5052
Cary Clark8cc16c72017-08-25 11:51:49 -04005053true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04005054
5055### Example
5056
5057<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
5058
5059#### Example Output
5060
5061~~~~
5062initial nothing to draw: false
5063blend dst nothing to draw: true
5064blend src over nothing to draw: false
5065alpha 0 nothing to draw: true
5066~~~~
5067
5068</fiddle-embed></div>
5069
5070---
5071
5072# <a name="Fast_Bounds"></a> Fast Bounds
Cary Clark8cc16c72017-08-25 11:51:49 -04005073<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5074<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005075
Cary Clark493df1f2017-08-25 13:14:33 -04005076<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005077## canComputeFastBounds
5078
5079<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5080bool canComputeFastBounds() const
5081</pre>
5082
Cary Clark8cc16c72017-08-25 11:51:49 -04005083Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5084to 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 -04005085always returns false.
5086
5087### Return Value
5088
Cary Clark8cc16c72017-08-25 11:51:49 -04005089true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005090
5091---
5092
Cary Clark493df1f2017-08-25 13:14:33 -04005093<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005094## computeFastBounds
5095
5096<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5097const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5098</pre>
5099
Cary Clark8cc16c72017-08-25 11:51:49 -04005100Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005101raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005102effects 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 -04005103parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005104for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005105
Cary Clarkbc5697d2017-10-04 14:31:33 -04005106The 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 -04005107should 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 -04005108use 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 -04005109<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005110
5111### Parameters
5112
Cary Clark8cc16c72017-08-25 11:51:49 -04005113<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5114geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5115 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005116computed bounds of geometry; may not be nullptr</td>
5117 </tr>
5118</table>
5119
5120### Return Value
5121
5122fast computed bounds
5123
5124---
5125
Cary Clark493df1f2017-08-25 13:14:33 -04005126<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005127## computeFastStrokeBounds
5128
5129<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5130const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5131</pre>
5132
5133### Parameters
5134
Cary Clark8cc16c72017-08-25 11:51:49 -04005135<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5136geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5137 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005138computed bounds of geometry</td>
5139 </tr>
5140</table>
5141
5142### Return Value
5143
5144fast computed bounds
5145
5146---
5147
Cary Clark493df1f2017-08-25 13:14:33 -04005148<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005149## doComputeFastBounds
5150
5151<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5152const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage,
5153 Style style) const
5154</pre>
5155
Cary Clarkce101242017-09-01 15:51:02 -04005156Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5157account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5158altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005159
5160### Parameters
5161
Cary Clark8cc16c72017-08-25 11:51:49 -04005162<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5163geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5164 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005165computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005166 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5167overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005168 </tr>
5169</table>
5170
5171### Return Value
5172
5173fast computed bounds
5174
5175---
5176
Cary Clark493df1f2017-08-25 13:14:33 -04005177<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005178## toString
5179
5180<pre style="padding: 1em 1em 1em 1em;width: 50em; background-color: #f0f0f0">
5181void toString(SkString* str) const;
5182</pre>
5183
Cary Clarkce101242017-09-01 15:51:02 -04005184Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5185internal debugging tools. The interface and implementation may be
5186suppressed by defining <a href="undocumented#SK_IGNORE_TO_STRING">SK IGNORE TO STRING</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005187
5188### Parameters
5189
Cary Clark8cc16c72017-08-25 11:51:49 -04005190<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005191storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005192 </tr>
5193</table>
5194
5195### Example
5196
5197<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5198
5199#### Example Output
5200
5201~~~~
5202text size = 12
5203~~~~
5204
5205</fiddle-embed></div>
5206
5207---
5208