blob: 635142d06ab272a7741a9747e28b89730ffdfafc [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
Cary Clark08895c42018-02-01 09:37:32 -05006## <a name="Overview"></a> Overview
7
Cary Clark4855f782018-02-06 09:41:53 -05008## <a name="Subtopic"></a> Subtopic
Cary Clark08895c42018-02-01 09:37:32 -05009
10| name | description |
11| --- | --- |
Cary Clark4855f782018-02-06 09:41:53 -050012| <a href="#Class_or_Struct">Class or Struct</a> | embedded struct and class members |
13| <a href="#Constant">Constant</a> | enum and enum class, const values |
14| <a href="#Constructor">Constructor</a> | functions that construct <a href="SkPaint_Reference#SkPaint">SkPaint</a> |
15| <a href="#Member_Function">Member Function</a> | static functions and member methods |
16| <a href="#Operator">Operator</a> | operator overloading methods |
17| <a href="#Related_Function">Related Function</a> | similar methods grouped together |
Cary Clark08895c42018-02-01 09:37:32 -050018
Cary Clarke4aa3712017-09-15 02:56:12 -040019# <a name="SkPaint"></a> Class SkPaint
Cary Clark8cc16c72017-08-25 11:51:49 -040020<a href="#Paint">Paint</a> controls options applied when drawing and measuring. <a href="#Paint">Paint</a> collects all
21options outside of the <a href="#Clip">Canvas Clip</a> and <a href="#Matrix">Canvas Matrix</a>.
Cary Clark12799e12017-07-28 15:18:29 -040022
Cary Clark7cfcbca2018-01-04 16:11:51 -050023Various options apply to text, strokes and fills, and images.
Cary Clark12799e12017-07-28 15:18:29 -040024
25Some options may not be implemented on all platforms; in these cases, setting
Cary Clark4c06f5e2017-08-04 12:48:24 -040026the option has no effect. Some options are conveniences that duplicate <a href="SkCanvas_Reference#Canvas">Canvas</a>
Cary Clark12799e12017-07-28 15:18:29 -040027functionality; for instance, text size is identical to matrix scale.
28
Cary Clark8cc16c72017-08-25 11:51:49 -040029<a href="#Paint">Paint</a> options are rarely exclusive; each option modifies a stage of the drawing
30pipeline and multiple pipeline stages may be affected by a single <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040031
Cary Clark7cfcbca2018-01-04 16:11:51 -050032<a href="#Paint">Paint</a> collects effects and filters that describe single-pass and multiple-pass
Cary Clark12799e12017-07-28 15:18:29 -040033algorithms that alter the drawing geometry, color, and transparency. For instance,
Cary Clark7cfcbca2018-01-04 16:11:51 -050034<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 -040035
Cary Clark8cc16c72017-08-25 11:51:49 -040036The 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 -040037to affect it. The implementation is free to defer computations associated with the
Cary Clark7cfcbca2018-01-04 16:11:51 -050038<a href="#Paint">Paint</a>, or ignore them altogether. For instance, some GPU implementations draw all
39<a href="SkPath_Reference#Path">Path</a> geometries with Anti-aliasing, regardless of how <a href="#SkPaint_kAntiAlias_Flag">SkPaint::kAntiAlias Flag</a>
Cary Clark8cc16c72017-08-25 11:51:49 -040040is set in <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040041
Cary Clark8cc16c72017-08-25 11:51:49 -040042<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 -040043Multiple colors are drawn either by using multiple paints or with objects like
Cary Clark8cc16c72017-08-25 11:51:49 -040044<a href="undocumented#Shader">Shader</a> attached to <a href="#Paint">Paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -040045
Cary Clark4855f782018-02-06 09:41:53 -050046## <a name="Related_Function"></a> Related Function
Cary Clark5081eed2018-01-22 07:55:48 -050047
48| name | description |
Cary Clark08895c42018-02-01 09:37:32 -050049| --- | --- |
50| <a href="#Alpha_Methods">Alpha Methods</a> | get and set <a href="#Alpha">Alpha</a> |
Cary Clark5081eed2018-01-22 07:55:48 -050051| Anti-alias | approximating coverage with transparency |
52| <a href="#Automatic_Hinting">Automatic Hinting</a> | always adjust glyph paths |
53| <a href="#Blend_Mode_Methods">Blend Mode Methods</a> | get and set <a href="undocumented#Blend_Mode">Blend Mode</a> |
54| <a href="#Color_Filter_Methods">Color Filter Methods</a> | get and set <a href="undocumented#Color_Filter">Color Filter</a> |
55| <a href="#Color_Methods">Color Methods</a> | get and set <a href="undocumented#Color">Color</a> |
Cary Clark5081eed2018-01-22 07:55:48 -050056| <a href="#Device_Text">Device Text</a> | increase precision of glyph position |
57| <a href="#Dither">Dither</a> | distributing color error |
58| <a href="#Draw_Looper_Methods">Draw Looper Methods</a> | get and set <a href="undocumented#Draw_Looper">Draw Looper</a> |
59| <a href="#Fake_Bold">Fake Bold</a> | approximate font styles |
60| <a href="#Fast_Bounds">Fast Bounds</a> | approximate area required by <a href="#Paint">Paint</a> |
Cary Clark08895c42018-02-01 09:37:32 -050061| Fill | fill and stroke |
Cary Clark5081eed2018-01-22 07:55:48 -050062| <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 |
63| <a href="#Filter_Quality_Methods">Filter Quality Methods</a> | get and set <a href="undocumented#Filter_Quality">Filter Quality</a> |
64| <a href="#SkPaint_Flags">Flags</a> | attributes represented by single bits |
65| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | custom sized bitmap <a href="#Glyph">Glyphs</a> |
66| <a href="#Font_Metrics">Font Metrics</a> | common glyph dimensions |
67| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | glyph spacing affected by hinting |
Cary Clark08895c42018-02-01 09:37:32 -050068| <a href="#Hairline">Hairline</a> | lines and curves with minimal width |
Cary Clark5081eed2018-01-22 07:55:48 -050069| <a href="#SkPaint_Hinting">Hinting</a> | glyph outline adjustment |
70| <a href="#Image_Filter_Methods">Image Filter Methods</a> | get and set <a href="undocumented#Image_Filter">Image Filter</a> |
71| <a href="#Initializers">Initializers</a> | constructors and initialization |
Cary Clark08895c42018-02-01 09:37:32 -050072| <a href="SkPaint_Reference#LCD_Text">LCD Text</a> | text relying on the order of <a href="#RGB">Color RGB</a> stripes |
73| <a href="SkPaint_Reference#Linear_Text">Linear Text</a> | selects text rendering as <a href="undocumented#Glyph">Glyph</a> or <a href="SkPath_Reference#Path">Path</a> |
Cary Clark5081eed2018-01-22 07:55:48 -050074| <a href="#Management">Management</a> | paint copying, moving, comparing |
75| <a href="#Mask_Filter_Methods">Mask Filter Methods</a> | get and set <a href="undocumented#Mask_Filter">Mask Filter</a> |
76| <a href="#Measure_Text">Measure Text</a> | width, height, bounds of text |
77| <a href="#Miter_Limit">Miter Limit</a> | maximum length of stroked corners |
78| <a href="#Path_Effect_Methods">Path Effect Methods</a> | get and set <a href="undocumented#Path_Effect">Path Effect</a> |
79| <a href="#Shader_Methods">Shader Methods</a> | get and set <a href="undocumented#Shader">Shader</a> |
Cary Clark08895c42018-02-01 09:37:32 -050080| Stroke | lines and curves with width |
Cary Clark5081eed2018-01-22 07:55:48 -050081| <a href="#Stroke_Cap">Stroke Cap</a> | decorations at ends of open strokes |
82| <a href="#Stroke_Join">Stroke Join</a> | decoration at corners of strokes |
83| <a href="#Stroke_Width">Stroke Width</a> | thickness perpendicular to geometry |
84| <a href="#SkPaint_Style">Style</a> | geometry filling, stroking |
Cary Clark08895c42018-02-01 09:37:32 -050085| <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> | uses pixel transparency to represent fractional offset |
Cary Clark5081eed2018-01-22 07:55:48 -050086| <a href="#Text_Align">Text Align</a> | text placement relative to position |
87| <a href="#Text_Encoding">Text Encoding</a> | text encoded as characters or <a href="#Glyph">Glyphs</a> |
88| <a href="#Text_Intercepts">Text Intercepts</a> | advanced underline, strike through |
89| <a href="#Text_Path">Text Path</a> | geometry of <a href="#Glyph">Glyphs</a> |
90| <a href="#Text_Scale_X">Text Scale X</a> | text horizontal scale |
91| <a href="#Text_Size">Text Size</a> | overall height in points |
92| <a href="#Text_Skew_X">Text Skew X</a> | text horizontal slant |
93| <a href="#Typeface_Methods">Typeface Methods</a> | get and set <a href="undocumented#Typeface">Typeface</a> |
94| <a href="#Vertical_Text">Vertical Text</a> | orient text from top to bottom |
Cary Clark12799e12017-07-28 15:18:29 -040095
Cary Clark4855f782018-02-06 09:41:53 -050096## <a name="Constant"></a> Constant
Cary Clark12799e12017-07-28 15:18:29 -040097
Cary Clark5081eed2018-01-22 07:55:48 -050098| name | description |
Cary Clark08895c42018-02-01 09:37:32 -050099| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500100| <a href="#SkPaint_Align">Align</a> | glyph locations relative to text position |
101| <a href="#SkPaint_Cap">Cap</a> | start and end geometry on stroked shapes |
102| <a href="#SkPaint_Flags">Flags</a> | values described by bits and masks |
Cary Clark5081eed2018-01-22 07:55:48 -0500103| <a href="#SkPaint_Hinting">Hinting</a> | level of glyph outline adjustment |
104| <a href="#SkPaint_Join">Join</a> | corner geometry on stroked shapes |
105| <a href="#SkPaint_Style">Style</a> | stroke, fill, or both |
106| <a href="#SkPaint_TextEncoding">TextEncoding</a> | character or glyph encoded size |
Cary Clark08895c42018-02-01 09:37:32 -0500107| _anonymous | number of <a href="#SkPaint_Style">Style</a> defines |
108| _anonymous_2 | number of <a href="#Text_Align">Text Align</a> values |
Cary Clark12799e12017-07-28 15:18:29 -0400109
Cary Clark4855f782018-02-06 09:41:53 -0500110## <a name="Class_or_Struct"></a> Class or Struct
Cary Clark12799e12017-07-28 15:18:29 -0400111
Cary Clark5081eed2018-01-22 07:55:48 -0500112| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500113| --- | --- |
114| <a href="#SkPaint_FontMetrics">FontMetrics</a> | values computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a> |
Cary Clark12799e12017-07-28 15:18:29 -0400115
Cary Clark4855f782018-02-06 09:41:53 -0500116## <a name="Constructor"></a> Constructor
Cary Clark12799e12017-07-28 15:18:29 -0400117
Cary Clark5081eed2018-01-22 07:55:48 -0500118| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500119| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500120| <a href="#SkPaint_empty_constructor">SkPaint()</a> | constructs with default values |
121| <a href="#SkPaint_move_SkPaint">SkPaint(SkPaint&& paint)</a> | moves paint without copying it |
122| <a href="#SkPaint_copy_const_SkPaint">SkPaint(const SkPaint& paint)</a> | makes a shallow copy |
Cary Clark08895c42018-02-01 09:37:32 -0500123| <a href="#SkPaint_destructor">~SkPaint()</a> | decreases <a href="undocumented#Reference_Count">Reference Count</a> of owned objects |
Cary Clark12799e12017-07-28 15:18:29 -0400124
Cary Clark4855f782018-02-06 09:41:53 -0500125## <a name="Operator"></a> Operator
Cary Clark12799e12017-07-28 15:18:29 -0400126
Cary Clark5081eed2018-01-22 07:55:48 -0500127| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500128| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500129| <a href="#SkPaint_notequal_operator">operator!=(const SkPaint& a, const SkPaint& b)</a> | compares paints for inequality |
130| <a href="#SkPaint_move_operator">operator=(SkPaint&& paint)</a> | moves paint without copying it |
131| <a href="#SkPaint_copy_operator">operator=(const SkPaint& paint)</a> | makes a shallow copy |
132| <a href="#SkPaint_equal_operator">operator==(const SkPaint& a, const SkPaint& b)</a> | compares paints for equality |
Cary Clark12799e12017-07-28 15:18:29 -0400133
Cary Clark4855f782018-02-06 09:41:53 -0500134## <a name="Member_Function"></a> Member Function
Cary Clark12799e12017-07-28 15:18:29 -0400135
Cary Clark5081eed2018-01-22 07:55:48 -0500136| name | description |
Cary Clark08895c42018-02-01 09:37:32 -0500137| --- | --- |
Cary Clark5081eed2018-01-22 07:55:48 -0500138| <a href="#SkPaint_breakText">breakText</a> | returns text that fits in a width |
139| <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> | returns true if settings allow for fast bounds computation |
140| <a href="#SkPaint_computeFastBounds">computeFastBounds</a> | returns fill bounds for quick reject tests |
141| <a href="#SkPaint_computeFastStrokeBounds">computeFastStrokeBounds</a> | returns stroke bounds for quick reject tests |
142| <a href="#SkPaint_containsText">containsText</a> | returns if all text corresponds to <a href="#Glyph">Glyphs</a> |
143| <a href="#SkPaint_countText">countText</a> | returns number of <a href="#Glyph">Glyphs</a> in text |
144| <a href="#SkPaint_doComputeFastBounds">doComputeFastBounds</a> | returns bounds for quick reject tests |
145| <a href="#SkPaint_flatten">flatten</a> | serializes into a buffer |
146| <a href="#SkPaint_getAlpha">getAlpha</a> | returns <a href="#Alpha">Color Alpha</a>, color opacity |
147| <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> |
148| <a href="#SkPaint_getColor">getColor</a> | returns <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color |
149| <a href="#SkPaint_getColorFilter">getColorFilter</a> | returns <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered |
150| <a href="#SkPaint_getDrawLooper">getDrawLooper</a> | returns <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
151| <a href="#SkPaint_getFillPath">getFillPath</a> | returns fill path equivalent to stroke |
152| <a href="#SkPaint_getFilterQuality">getFilterQuality</a> | returns <a href="undocumented#Filter_Quality">Filter Quality</a>, image filtering level |
153| <a href="#SkPaint_getFlags">getFlags</a> | returns <a href="#SkPaint_Flags">Flags</a> stored in a bit field |
154| <a href="#SkPaint_getFontBounds">getFontBounds</a> | returns union all glyph bounds |
155| <a href="#SkPaint_getFontMetrics">getFontMetrics</a> | returns <a href="undocumented#Typeface">Typeface</a> metrics scaled by text size |
156| <a href="#SkPaint_getFontSpacing">getFontSpacing</a> | returns recommended spacing between lines |
157| <a href="#SkPaint_getHash">getHash</a> | returns a shallow hash for equality checks |
158| <a href="#SkPaint_getHinting">getHinting</a> | returns <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level |
159| <a href="#SkPaint_getImageFilter">getImageFilter</a> | returns <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
160| <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> |
161| <a href="#SkPaint_getPathEffect">getPathEffect</a> | returns <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
162| <a href="#SkPaint_getPosTextHIntercepts">getPosTextHIntercepts</a> | returns where lines intersect horizontally positioned text; underlines |
163| <a href="#SkPaint_getPosTextIntercepts">getPosTextIntercepts</a> | returns where lines intersect positioned text; underlines |
164| <a href="#SkPaint_getPosTextPath">getPosTextPath</a> | returns <a href="SkPath_Reference#Path">Path</a> equivalent to positioned text |
165| <a href="#SkPaint_getShader">getShader</a> | returns <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
166| <a href="#SkPaint_getStrokeCap">getStrokeCap</a> | returns <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends |
167| <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a> | returns <a href="#SkPaint_Join">Join</a>, geometry on path corners |
168| <a href="#SkPaint_getStrokeMiter">getStrokeMiter</a> | returns <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners |
169| <a href="#SkPaint_getStrokeWidth">getStrokeWidth</a> | returns thickness of the stroke |
170| <a href="#SkPaint_getStyle">getStyle</a> | returns <a href="#SkPaint_Style">Style</a>: stroke, fill, or both |
171| <a href="#SkPaint_getTextAlign">getTextAlign</a> | returns <a href="#SkPaint_Align">Align</a>: left, center, or right |
172| <a href="#SkPaint_getTextBlobIntercepts">getTextBlobIntercepts</a> | returns where lines intersect <a href="undocumented#Text_Blob">Text Blob</a>; underlines |
173| <a href="#SkPaint_getTextEncoding">getTextEncoding</a> | returns character or glyph encoded size |
174| <a href="#SkPaint_getTextIntercepts">getTextIntercepts</a> | returns where lines intersect text; underlines |
175| <a href="#SkPaint_getTextPath">getTextPath</a> | returns <a href="SkPath_Reference#Path">Path</a> equivalent to text |
176| <a href="#SkPaint_getTextScaleX">getTextScaleX</a> | returns the text horizontal scale; condensed text |
177| <a href="#SkPaint_getTextSize">getTextSize</a> | returns text size in points |
178| <a href="#SkPaint_getTextSkewX">getTextSkewX</a> | returns the text horizontal skew; oblique text |
179| <a href="#SkPaint_getTextWidths">getTextWidths</a> | returns advance and bounds for each glyph in text |
180| <a href="#SkPaint_getTypeface">getTypeface</a> | returns <a href="undocumented#Typeface">Typeface</a>, font description |
181| <a href="#SkPaint_glyphsToUnichars">glyphsToUnichars</a> | converts <a href="#Glyph">Glyphs</a> into text |
182| <a href="#SkPaint_isAntiAlias">isAntiAlias</a> | returns true if Anti-alias is set |
183| <a href="#SkPaint_isAutohinted">isAutohinted</a> | returns true if <a href="#Glyph">Glyphs</a> are always hinted |
184| <a href="#SkPaint_isDevKernText">isDevKernText</a> | returns true if <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is set |
185| <a href="#SkPaint_isDither">isDither</a> | returns true if <a href="#Dither">Dither</a> is set |
186| <a href="#SkPaint_isEmbeddedBitmapText">isEmbeddedBitmapText</a> | returns true if <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is set |
187| <a href="#SkPaint_isFakeBoldText">isFakeBoldText</a> | returns true if <a href="#Fake_Bold">Fake Bold</a> is set |
188| <a href="#SkPaint_isLCDRenderText">isLCDRenderText</a> | returns true if <a href="SkPaint_Reference#LCD_Text">LCD Text</a> is set |
Cary Clark08895c42018-02-01 09:37:32 -0500189| <a href="#SkPaint_isLinearText">isLinearText</a> | returns true if text is converted to <a href="SkPath_Reference#Path">Path</a> |
Cary Clark5081eed2018-01-22 07:55:48 -0500190| <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> |
191| <a href="#SkPaint_isSubpixelText">isSubpixelText</a> | returns true if <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is set |
192| <a href="#SkPaint_isVerticalText">isVerticalText</a> | returns true if <a href="#Vertical_Text">Vertical Text</a> is set |
193| <a href="#SkPaint_measureText">measureText</a> | returns advance width and bounds of text |
194| <a href="#SkPaint_nothingToDraw">nothingToDraw</a> | returns true if <a href="#Paint">Paint</a> prevents all drawing |
195| <a href="#SkPaint_refColorFilter">refColorFilter</a> | references <a href="undocumented#Color_Filter">Color Filter</a>, how colors are altered |
196| <a href="#SkPaint_refDrawLooper">refDrawLooper</a> | references <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
197| <a href="#SkPaint_refImageFilter">refImageFilter</a> | references <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
198| <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> |
199| <a href="#SkPaint_refPathEffect">refPathEffect</a> | references <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
200| <a href="#SkPaint_refShader">refShader</a> | references <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
201| <a href="#SkPaint_refTypeface">refTypeface</a> | references <a href="undocumented#Typeface">Typeface</a>, font description |
202| <a href="#SkPaint_reset">reset</a> | sets to default values |
203| <a href="#SkPaint_setARGB">setARGB</a> | sets color by component |
204| <a href="#SkPaint_setAlpha">setAlpha</a> | sets <a href="#Alpha">Color Alpha</a>, color opacity |
205| <a href="#SkPaint_setAntiAlias">setAntiAlias</a> | sets or clears Anti-alias |
206| <a href="#SkPaint_setAutohinted">setAutohinted</a> | sets <a href="#Glyph">Glyphs</a> to always be hinted |
207| <a href="#SkPaint_setBlendMode">setBlendMode</a> | sets <a href="undocumented#Blend_Mode">Blend Mode</a>, how colors combine with destination |
208| <a href="#SkPaint_setColor">setColor</a> | sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color |
209| <a href="#SkPaint_setColorFilter">setColorFilter</a> | sets <a href="undocumented#Color_Filter">Color Filter</a>, alters color |
210| <a href="#SkPaint_setDevKernText">setDevKernText</a> | sets or clears <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> |
211| <a href="#SkPaint_setDither">setDither</a> | sets or clears <a href="#Dither">Dither</a> |
212| <a href="#SkPaint_setDrawLooper">setDrawLooper</a> | sets <a href="undocumented#Draw_Looper">Draw Looper</a>, multiple layers |
213| <a href="#SkPaint_setEmbeddedBitmapText">setEmbeddedBitmapText</a> | sets or clears <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> |
214| <a href="#SkPaint_setFakeBoldText">setFakeBoldText</a> | sets or clears <a href="#Fake_Bold">Fake Bold</a> |
215| <a href="#SkPaint_setFilterQuality">setFilterQuality</a> | sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level |
216| <a href="#SkPaint_setFlags">setFlags</a> | sets multiple <a href="#SkPaint_Flags">Flags</a> in a bit field |
217| <a href="#SkPaint_setHinting">setHinting</a> | sets <a href="#SkPaint_Hinting">Hinting</a>, glyph outline adjustment level |
218| <a href="#SkPaint_setImageFilter">setImageFilter</a> | sets <a href="undocumented#Image_Filter">Image Filter</a>, alter pixels; blur |
219| <a href="#SkPaint_setLCDRenderText">setLCDRenderText</a> | sets or clears <a href="SkPaint_Reference#LCD_Text">LCD Text</a> |
Cary Clark08895c42018-02-01 09:37:32 -0500220| <a href="#SkPaint_setLinearText">setLinearText</a> | converts to <a href="SkPath_Reference#Path">Path</a> before draw or measure |
Cary Clark5081eed2018-01-22 07:55:48 -0500221| <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> |
222| <a href="#SkPaint_setPathEffect">setPathEffect</a> | sets <a href="undocumented#Path_Effect">Path Effect</a>, modifications to path geometry; dashing |
223| <a href="#SkPaint_setShader">setShader</a> | sets <a href="undocumented#Shader">Shader</a>, multiple drawing colors; gradients |
224| <a href="#SkPaint_setStrokeCap">setStrokeCap</a> | sets <a href="#SkPaint_Cap">Cap</a>, the area drawn at path ends |
225| <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a> | sets <a href="#SkPaint_Join">Join</a>, geometry on path corners |
226| <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> | sets <a href="#Miter_Limit">Miter Limit</a>, angles with sharp corners |
227| <a href="#SkPaint_setStrokeWidth">setStrokeWidth</a> | sets thickness of the stroke |
228| <a href="#SkPaint_setStyle">setStyle</a> | sets <a href="#SkPaint_Style">Style</a>: stroke, fill, or both |
229| <a href="#SkPaint_setSubpixelText">setSubpixelText</a> | sets or clears <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> |
230| <a href="#SkPaint_setTextAlign">setTextAlign</a> | sets <a href="#SkPaint_Align">Align</a>: left, center, or right |
231| <a href="#SkPaint_setTextEncoding">setTextEncoding</a> | sets character or glyph encoded size |
232| <a href="#SkPaint_setTextScaleX">setTextScaleX</a> | sets the text horizontal scale; condensed text |
233| <a href="#SkPaint_setTextSize">setTextSize</a> | sets text size in points |
234| <a href="#SkPaint_setTextSkewX">setTextSkewX</a> | sets the text horizontal skew; oblique text |
235| <a href="#SkPaint_setTypeface">setTypeface</a> | sets <a href="undocumented#Typeface">Typeface</a>, font description |
236| <a href="#SkPaint_setVerticalText">setVerticalText</a> | sets or clears <a href="#Vertical_Text">Vertical Text</a> |
237| <a href="#SkPaint_textToGlyphs">textToGlyphs</a> | converts text into glyph indices |
238| <a href="#SkPaint_toString">toString</a> | converts <a href="#Paint">Paint</a> to machine readable form |
239| <a href="#SkPaint_unflatten">unflatten</a> | populates from a serialized stream |
Cary Clark12799e12017-07-28 15:18:29 -0400240
Cary Clark08895c42018-02-01 09:37:32 -0500241## <a name="Initializers"></a> Initializers
Cary Clark12799e12017-07-28 15:18:29 -0400242
Cary Clark493df1f2017-08-25 13:14:33 -0400243<a name="SkPaint_empty_constructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400244## SkPaint
245
Cary Clarka560c472017-11-27 10:44:06 -0500246<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400247SkPaint()
248</pre>
249
Cary Clark8cc16c72017-08-25 11:51:49 -0400250Constructs <a href="#Paint">Paint</a> with default values.
Cary Clark12799e12017-07-28 15:18:29 -0400251
252| attribute | default value |
253| --- | --- |
Cary Clarka560c472017-11-27 10:44:06 -0500254| Anti-alias | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400255| <a href="undocumented#Blend_Mode">Blend Mode</a> | <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400256| <a href="undocumented#Color">Color</a> | <a href="undocumented#SK_ColorBLACK">SK ColorBLACK</a> |
Cary Clark8cc16c72017-08-25 11:51:49 -0400257| <a href="#Alpha">Color Alpha</a> | 255 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400258| <a href="undocumented#Color_Filter">Color Filter</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400259| <a href="#Dither">Dither</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400260| <a href="undocumented#Draw_Looper">Draw Looper</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400261| <a href="#Fake_Bold">Fake Bold</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400262| <a href="undocumented#Filter_Quality">Filter Quality</a> | <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a> |
263| <a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400264| <a href="#Automatic_Hinting">Automatic Hinting</a> | false |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400265| <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400266| <a href="#SkPaint_Hinting">Hinting</a> | <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400267| <a href="undocumented#Image_Filter">Image Filter</a> | nullptr |
268| <a href="SkPaint_Reference#LCD_Text">LCD Text</a> | false |
269| <a href="SkPaint_Reference#Linear_Text">Linear Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400270| <a href="#Miter_Limit">Miter Limit</a> | 4 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400271| <a href="undocumented#Mask_Filter">Mask Filter</a> | nullptr |
272| <a href="undocumented#Path_Effect">Path Effect</a> | nullptr |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400273| <a href="undocumented#Shader">Shader</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400274| <a href="#SkPaint_Style">Style</a> | <a href="#SkPaint_kFill_Style">kFill Style</a> |
275| <a href="#Text_Align">Text Align</a> | <a href="#SkPaint_kLeft_Align">kLeft Align</a> |
276| <a href="#Text_Encoding">Text Encoding</a> | <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> |
277| <a href="#Text_Scale_X">Text Scale X</a> | 1 |
278| <a href="#Text_Size">Text Size</a> | 12 |
279| <a href="#Text_Skew_X">Text Skew X</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400280| <a href="undocumented#Typeface">Typeface</a> | nullptr |
Cary Clark8cc16c72017-08-25 11:51:49 -0400281| <a href="#Stroke_Cap">Stroke Cap</a> | <a href="#SkPaint_kButt_Cap">kButt Cap</a> |
282| <a href="#Stroke_Join">Stroke Join</a> | <a href="#SkPaint_kMiter_Join">kMiter Join</a> |
283| <a href="#Stroke_Width">Stroke Width</a> | 0 |
Cary Clark4c06f5e2017-08-04 12:48:24 -0400284| <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> | false |
Cary Clark8cc16c72017-08-25 11:51:49 -0400285| <a href="#Vertical_Text">Vertical Text</a> | false |
Cary Clark12799e12017-07-28 15:18:29 -0400286
287The flags, text size, hinting, and miter limit may be overridden at compile time by defining
Cary Clark7cfcbca2018-01-04 16:11:51 -0500288paint default values. The overrides may be included in "SkUserConfig.h" or predefined by the
Cary Clark12799e12017-07-28 15:18:29 -0400289build system.
290
291### Return Value
292
Cary Clark8cc16c72017-08-25 11:51:49 -0400293default initialized <a href="#Paint">Paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400294
295### Example
296
297<div><fiddle-embed name="c4b2186d85c142a481298f7144295ffd"></fiddle-embed></div>
298
299---
300
Cary Clark73fa9722017-08-29 17:36:51 -0400301<a name="SkPaint_copy_const_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400302## SkPaint
303
Cary Clarka560c472017-11-27 10:44:06 -0500304<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400305SkPaint(const SkPaint& paint)
306</pre>
307
Cary Clark8cc16c72017-08-25 11:51:49 -0400308Makes a shallow copy of <a href="#Paint">Paint</a>. <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>,
Update Docs949cfd42018-01-22 05:50:26 +0000309<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clark73fa9722017-08-29 17:36:51 -0400310between 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 -0400311their references by one.
Cary Clark12799e12017-07-28 15:18:29 -0400312
Update Docs949cfd42018-01-22 05:50:26 +0000313The referenced objects <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400314<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 -0400315This 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 -0400316
317### Parameters
318
Cary Clark73fa9722017-08-29 17:36:51 -0400319<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 -0400320original to copy</td>
321 </tr>
322</table>
323
324### Return Value
325
Cary Clark73fa9722017-08-29 17:36:51 -0400326shallow copy of <a href="#SkPaint_copy_const_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400327
328### Example
329
330<div><fiddle-embed name="b99971ad0ef243d617925289d963b62d">
331
332#### Example Output
333
334~~~~
335SK_ColorRED == paint1.getColor()
336SK_ColorBLUE == paint2.getColor()
337~~~~
338
339</fiddle-embed></div>
340
341---
342
Cary Clark73fa9722017-08-29 17:36:51 -0400343<a name="SkPaint_move_SkPaint"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400344## SkPaint
345
Cary Clarka560c472017-11-27 10:44:06 -0500346<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400347SkPaint(SkPaint&& paint)
348</pre>
349
Cary Clarkd0530ba2017-09-14 11:25:39 -0400350Implements a move constructor to avoid increasing the reference counts
Cary Clark73fa9722017-08-29 17:36:51 -0400351of objects referenced by the <a href="#SkPaint_move_SkPaint_paint">paint</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400352
Cary Clark73fa9722017-08-29 17:36:51 -0400353After the call, <a href="#SkPaint_move_SkPaint_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400354
355### Parameters
356
Cary Clark73fa9722017-08-29 17:36:51 -0400357<table> <tr> <td><a name="SkPaint_move_SkPaint_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400358original to move</td>
359 </tr>
360</table>
361
362### Return Value
363
Cary Clark73fa9722017-08-29 17:36:51 -0400364content of <a href="#SkPaint_move_SkPaint_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400365
366### Example
367
368<div><fiddle-embed name="8ed1488a503cd5282b86a51614aa90b1">
369
370#### Example Output
371
372~~~~
373path effect unique: true
374~~~~
375
376</fiddle-embed></div>
377
378---
379
Cary Clark493df1f2017-08-25 13:14:33 -0400380<a name="SkPaint_reset"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400381## reset
382
Cary Clarka560c472017-11-27 10:44:06 -0500383<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400384void reset()
385</pre>
386
Cary Clarkbc5697d2017-10-04 14:31:33 -0400387Sets all <a href="#Paint">Paint</a> contents to their initial values. This is equivalent to replacing
388<a href="#Paint">Paint</a> with the result of <a href="#SkPaint_empty_constructor">SkPaint()</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400389
390### Example
391
392<div><fiddle-embed name="ef269937ade7e7353635121d9a64f9f7">
393
394#### Example Output
395
396~~~~
397paint1 == paint2
398~~~~
399
400</fiddle-embed></div>
401
402---
403
Cary Clark493df1f2017-08-25 13:14:33 -0400404<a name="SkPaint_destructor"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400405## ~SkPaint
406
Cary Clarka560c472017-11-27 10:44:06 -0500407<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400408~SkPaint()
409</pre>
410
Cary Clark8cc16c72017-08-25 11:51:49 -0400411Decreases <a href="#Paint">Paint</a> <a href="undocumented#Reference_Count">Reference Count</a> of owned objects: <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>,
Update Docs949cfd42018-01-22 05:50:26 +0000412<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a>. If the
Cary Clark4c06f5e2017-08-04 12:48:24 -0400413objects containing <a href="undocumented#Reference_Count">Reference Count</a> go to zero, they are deleted.
Cary Clark12799e12017-07-28 15:18:29 -0400414
415---
416
Cary Clark08895c42018-02-01 09:37:32 -0500417## <a name="Management"></a> Management
Cary Clark12799e12017-07-28 15:18:29 -0400418
Cary Clarka560c472017-11-27 10:44:06 -0500419<a name="SkPaint_copy_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400420## operator=
421
Cary Clarka560c472017-11-27 10:44:06 -0500422<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400423SkPaint& operator=(const SkPaint& paint)
424</pre>
425
Cary Clark8cc16c72017-08-25 11:51:49 -0400426Makes a shallow copy of <a href="#Paint">Paint</a>. <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>,
Update Docs949cfd42018-01-22 05:50:26 +0000427<a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>, <a href="undocumented#Draw_Looper">Draw Looper</a>, and <a href="undocumented#Image_Filter">Image Filter</a> are shared
Cary Clarka560c472017-11-27 10:44:06 -0500428between the original <a href="#SkPaint_copy_operator_paint">paint</a> and the copy. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clark12799e12017-07-28 15:18:29 -0400429prior destination are decreased by one, and the referenced objects are deleted if the
Cary Clarka560c472017-11-27 10:44:06 -0500430resulting count is zero. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the parameter <a href="#SkPaint_copy_operator_paint">paint</a>
431are increased by one. <a href="#SkPaint_copy_operator_paint">paint</a> is unmodified.
Cary Clark12799e12017-07-28 15:18:29 -0400432
433### Parameters
434
Cary Clarka560c472017-11-27 10:44:06 -0500435<table> <tr> <td><a name="SkPaint_copy_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400436original to copy</td>
437 </tr>
438</table>
439
440### Return Value
441
Cary Clarka560c472017-11-27 10:44:06 -0500442content of <a href="#SkPaint_copy_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400443
444### Example
445
446<div><fiddle-embed name="b476a9088f80dece176ed577807d3992">
447
448#### Example Output
449
450~~~~
451SK_ColorRED == paint1.getColor()
452SK_ColorRED == paint2.getColor()
453~~~~
454
455</fiddle-embed></div>
456
457---
458
Cary Clarka560c472017-11-27 10:44:06 -0500459<a name="SkPaint_move_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400460## operator=
461
Cary Clarka560c472017-11-27 10:44:06 -0500462<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400463SkPaint& operator=(SkPaint&& paint)
464</pre>
465
Cary Clarka560c472017-11-27 10:44:06 -0500466Moves the <a href="#SkPaint_move_operator_paint">paint</a> to avoid increasing the reference counts
467of objects referenced by the <a href="#SkPaint_move_operator_paint">paint</a> parameter. Objects containing <a href="undocumented#Reference_Count">Reference Count</a> in the
Cary Clarkbad5ad72017-08-03 17:14:08 -0400468prior destination are decreased by one; those objects are deleted if the resulting count
469is zero.
Cary Clark12799e12017-07-28 15:18:29 -0400470
Cary Clarka560c472017-11-27 10:44:06 -0500471After the call, <a href="#SkPaint_move_operator_paint">paint</a> is undefined, and can be safely destructed.
Cary Clark12799e12017-07-28 15:18:29 -0400472
473### Parameters
474
Cary Clarka560c472017-11-27 10:44:06 -0500475<table> <tr> <td><a name="SkPaint_move_operator_paint"> <code><strong>paint </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -0400476original to move</td>
477 </tr>
478</table>
479
480### Return Value
481
Cary Clarka560c472017-11-27 10:44:06 -0500482content of <a href="#SkPaint_move_operator_paint">paint</a>
Cary Clark12799e12017-07-28 15:18:29 -0400483
484### Example
485
486<div><fiddle-embed name="9fb7459b097d713f5f1fe5675afe14f5">
487
488#### Example Output
489
490~~~~
491SK_ColorRED == paint2.getColor()
492~~~~
493
494</fiddle-embed></div>
495
496---
497
Cary Clark493df1f2017-08-25 13:14:33 -0400498<a name="SkPaint_equal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400499## operator==
500
Cary Clarka560c472017-11-27 10:44:06 -0500501<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400502bool operator==(const SkPaint& a, const SkPaint& b)
503</pre>
504
Cary Clark8cc16c72017-08-25 11:51:49 -0400505Compares <a href="#SkPaint_equal_operator_a">a</a> and <a href="#SkPaint_equal_operator_b">b</a>, and returns true if <a href="#SkPaint_equal_operator_a">a</a> and <a href="#SkPaint_equal_operator_b">b</a> are equivalent. May return false
Update Docs949cfd42018-01-22 05:50:26 +0000506if <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400507<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 -0400508
509### Parameters
510
Cary Clark8cc16c72017-08-25 11:51:49 -0400511<table> <tr> <td><a name="SkPaint_equal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
512<a href="#Paint">Paint</a> to compare</td>
513 </tr> <tr> <td><a name="SkPaint_equal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
514<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400515 </tr>
516</table>
517
518### Return Value
519
Cary Clark8cc16c72017-08-25 11:51:49 -0400520true if <a href="#Paint">Paint</a> pair are equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400521
522### Example
523
524<div><fiddle-embed name="7481a948e34672720337a631830586dd">
525
526#### Example Output
527
528~~~~
529paint1 == paint2
530paint1 != paint2
531~~~~
532
533</fiddle-embed></div>
534
535---
536
Cary Clarka560c472017-11-27 10:44:06 -0500537<a name="SkPaint_notequal_operator"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400538## operator!=
539
Cary Clarka560c472017-11-27 10:44:06 -0500540<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400541bool operator!=(const SkPaint& a, const SkPaint& b)
542</pre>
543
Cary Clarka560c472017-11-27 10:44:06 -0500544Compares <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a>, and returns true if <a href="#SkPaint_notequal_operator_a">a</a> and <a href="#SkPaint_notequal_operator_b">b</a> are not equivalent. May return true
Update Docs949cfd42018-01-22 05:50:26 +0000545if <a href="undocumented#Typeface">Typeface</a>, <a href="undocumented#Path_Effect">Path Effect</a>, <a href="undocumented#Shader">Shader</a>, <a href="undocumented#Mask_Filter">Mask Filter</a>, <a href="undocumented#Color_Filter">Color Filter</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -0400546<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 -0400547
548### Parameters
549
Cary Clarka560c472017-11-27 10:44:06 -0500550<table> <tr> <td><a name="SkPaint_notequal_operator_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400551<a href="#Paint">Paint</a> to compare</td>
Cary Clarka560c472017-11-27 10:44:06 -0500552 </tr> <tr> <td><a name="SkPaint_notequal_operator_b"> <code><strong>b </strong></code> </a></td> <td>
Cary Clark8cc16c72017-08-25 11:51:49 -0400553<a href="#Paint">Paint</a> to compare</td>
Cary Clark12799e12017-07-28 15:18:29 -0400554 </tr>
555</table>
556
557### Return Value
558
Cary Clark8cc16c72017-08-25 11:51:49 -0400559true if <a href="#Paint">Paint</a> pair are not equivalent
Cary Clark12799e12017-07-28 15:18:29 -0400560
561### Example
562
563<div><fiddle-embed name="b6c8484b1187f555b435ad5369833be4">
564
565#### Example Output
566
567~~~~
568paint1 == paint2
569paint1 == paint2
570~~~~
571
572</fiddle-embed></div>
573
574---
575
Cary Clark493df1f2017-08-25 13:14:33 -0400576<a name="SkPaint_getHash"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400577## getHash
578
Cary Clarka560c472017-11-27 10:44:06 -0500579<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400580uint32_t getHash() const
581</pre>
582
Cary Clark8cc16c72017-08-25 11:51:49 -0400583Returns a hash generated from <a href="#Paint">Paint</a> values and pointers.
Cary Clark12799e12017-07-28 15:18:29 -0400584Identical hashes guarantee that the paints are
585equivalent, but differing hashes do not guarantee that the paints have differing
586contents.
587
Cary Clark8cc16c72017-08-25 11:51:49 -0400588If <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 -0400589their hashes are also equal.
590
591The hash returned is platform and implementation specific.
592
593### Return Value
594
595a shallow hash
596
597### Example
598
599<div><fiddle-embed name="7f7e1b701361912b344f90ae6b530393">
600
601#### Example Output
602
603~~~~
604paint1 == paint2
605paint1.getHash() == paint2.getHash()
606~~~~
607
608</fiddle-embed></div>
609
610---
611
Cary Clark493df1f2017-08-25 13:14:33 -0400612<a name="SkPaint_flatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400613## flatten
614
Cary Clarka560c472017-11-27 10:44:06 -0500615<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400616void flatten(SkWriteBuffer& buffer) const
617</pre>
618
Cary Clark8cc16c72017-08-25 11:51:49 -0400619Serializes <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 -0400620can reconstitute the paint at a later time.
621
622### Parameters
623
Cary Clark8cc16c72017-08-25 11:51:49 -0400624<table> <tr> <td><a name="SkPaint_flatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
625<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 -0400626 </tr>
627</table>
628
Cary Clark12799e12017-07-28 15:18:29 -0400629---
630
Cary Clark493df1f2017-08-25 13:14:33 -0400631<a name="SkPaint_unflatten"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400632## unflatten
633
Cary Clarka560c472017-11-27 10:44:06 -0500634<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Update Docsad2cd562018-01-19 05:52:02 +0000635bool unflatten(SkReadBuffer& buffer)
Cary Clark12799e12017-07-28 15:18:29 -0400636</pre>
637
Cary Clark8cc16c72017-08-25 11:51:49 -0400638Populates <a href="#Paint">Paint</a>, typically from a serialized stream, created by calling
639<a href="#SkPaint_flatten">flatten</a> at an earlier time.
Cary Clark12799e12017-07-28 15:18:29 -0400640
Cary Clark8cc16c72017-08-25 11:51:49 -0400641<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 -0400642by the client.
643
644### Parameters
645
Cary Clark8cc16c72017-08-25 11:51:49 -0400646<table> <tr> <td><a name="SkPaint_unflatten_buffer"> <code><strong>buffer </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -0400647serialized data describing <a href="#Paint">Paint</a> content</td>
Cary Clark12799e12017-07-28 15:18:29 -0400648 </tr>
649</table>
650
Update Docsad2cd562018-01-19 05:52:02 +0000651### Return Value
652
Cary Clark5081eed2018-01-22 07:55:48 -0500653false if the <a href="#SkPaint_unflatten_buffer">buffer</a> contains invalid data
654
Cary Clark2ade9972017-11-02 17:49:34 -0400655### See Also
656
657<a href="undocumented#SkReadBuffer">SkReadBuffer</a>
658
Cary Clark12799e12017-07-28 15:18:29 -0400659---
660
Cary Clark08895c42018-02-01 09:37:32 -0500661## <a name="Hinting"></a> Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400662
Cary Clark8cc16c72017-08-25 11:51:49 -0400663## <a name="SkPaint_Hinting"></a> Enum SkPaint::Hinting
Cary Clark12799e12017-07-28 15:18:29 -0400664
Cary Clarka560c472017-11-27 10:44:06 -0500665<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400666enum <a href="#Hinting">Hinting</a> {
667<a href="#SkPaint_kNo_Hinting">kNo Hinting</a> = 0,
668<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> = 1,
669<a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> = 2,
670<a href="#SkPaint_kFull_Hinting">kFull Hinting</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -0400671};</pre>
672
Cary Clark8cc16c72017-08-25 11:51:49 -0400673<a href="#Hinting">Hinting</a> adjusts the glyph outlines so that the shape provides a uniform
674look 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 -0400675muted effect or no effect at all depending on the platform.
676
Cary Clark7cfcbca2018-01-04 16:11:51 -0500677The four levels roughly control corresponding features on platforms that use FreeType
Cary Clark8cc16c72017-08-25 11:51:49 -0400678as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400679
680### Constants
681
682<table>
683 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400684 <td><a name="SkPaint_kNo_Hinting"> <code><strong>SkPaint::kNo_Hinting </strong></code> </a></td><td>0</td><td>Leaves glyph outlines unchanged from their native representation.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500685With FreeType, this is equivalent to the FT_LOAD_NO_HINTING
686bit-field constant supplied to FT_Load_Glyph, which indicates that the vector
Cary Clark12799e12017-07-28 15:18:29 -0400687outline being loaded should not be fitted to the pixel grid but simply scaled
688to 26.6 fractional pixels.</td>
689 </tr>
690 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400691 <td><a name="SkPaint_kSlight_Hinting"> <code><strong>SkPaint::kSlight_Hinting </strong></code> </a></td><td>1</td><td>Modifies glyph outlines minimally to improve constrast.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500692With FreeType, this is equivalent in spirit to the
693FT_LOAD_TARGET_LIGHT value supplied to FT_Load_Glyph. It chooses a
Cary Clark12799e12017-07-28 15:18:29 -0400694lighter hinting algorithm for non-monochrome modes.
Cary Clarkce101242017-09-01 15:51:02 -0400695Generated <a href="#Glyph">Glyphs</a> may be fuzzy but better resemble their original shape.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400696 </tr>
697 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400698 <td><a name="SkPaint_kNormal_Hinting"> <code><strong>SkPaint::kNormal_Hinting </strong></code> </a></td><td>2</td><td>Modifies glyph outlines to improve constrast. This is the default.
Cary Clark7cfcbca2018-01-04 16:11:51 -0500699With FreeType, this supplies FT_LOAD_TARGET_NORMAL to FT_Load_Glyph,
700choosing the default hinting algorithm, which is optimized for standard
Cary Clark12799e12017-07-28 15:18:29 -0400701gray-level rendering.</td>
702 </tr>
703 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -0500704 <td><a name="SkPaint_kFull_Hinting"> <code><strong>SkPaint::kFull_Hinting </strong></code> </a></td><td>3</td><td>Modifies glyph outlines for maxiumum constrast. With FreeType, this selects
705FT_LOAD_TARGET_LCD or FT_LOAD_TARGET_LCD_V if <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> is set.
706FT_LOAD_TARGET_LCD is a variant of FT_LOAD_TARGET_NORMAL optimized for
707horizontally decimated LCD displays; FT_LOAD_TARGET_LCD_V is a
708variant of FT_LOAD_TARGET_NORMAL optimized for vertically decimated LCD displays.</td>
Cary Clark12799e12017-07-28 15:18:29 -0400709 </tr>
710</table>
711
Cary Clark7cfcbca2018-01-04 16:11:51 -0500712On Windows with DirectWrite, <a href="#Hinting">Hinting</a> has no effect.
Cary Clark12799e12017-07-28 15:18:29 -0400713
Cary Clark8cc16c72017-08-25 11:51:49 -0400714<a href="#Hinting">Hinting</a> defaults to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a>.
Cary Clark4c06f5e2017-08-04 12:48:24 -0400715Set <a href="undocumented#SkPaintDefaults_Hinting">SkPaintDefaults Hinting</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -0400716
717
718
Cary Clark493df1f2017-08-25 13:14:33 -0400719<a name="SkPaint_getHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400720## getHinting
721
Cary Clarka560c472017-11-27 10:44:06 -0500722<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400723Hinting getHinting() const
724</pre>
725
726Returns level of glyph outline adjustment.
727
728### Return Value
729
Cary Clark8cc16c72017-08-25 11:51:49 -0400730one 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 -0400731
732### Example
733
734<div><fiddle-embed name="329e2e5a5919ac431e1c58878a5b99e0">
735
736#### Example Output
737
738~~~~
739SkPaint::kNormal_Hinting == paint.getHinting()
740~~~~
741
742</fiddle-embed></div>
743
744---
745
Cary Clark493df1f2017-08-25 13:14:33 -0400746<a name="SkPaint_setHinting"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400747## setHinting
748
Cary Clarka560c472017-11-27 10:44:06 -0500749<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400750void setHinting(Hinting hintingLevel)
751</pre>
752
753Sets level of glyph outline adjustment.
Cary Clark8cc16c72017-08-25 11:51:49 -0400754Does not check for valid values of <a href="#SkPaint_setHinting_hintingLevel">hintingLevel</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400755
Cary Clark8cc16c72017-08-25 11:51:49 -0400756| <a href="#Hinting">Hinting</a> | value | effect on generated glyph outlines |
Cary Clark12799e12017-07-28 15:18:29 -0400757| --- | --- | --- |
Cary Clark8cc16c72017-08-25 11:51:49 -0400758| <a href="#SkPaint_kNo_Hinting">kNo Hinting</a> | 0 | leaves glyph outlines unchanged from their native representation |
Cary Clarkce101242017-09-01 15:51:02 -0400759| <a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a> | 1 | modifies glyph outlines minimally to improve contrast |
760| <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> | 2 | modifies glyph outlines to improve contrast |
761| <a href="#SkPaint_kFull_Hinting">kFull Hinting</a> | 3 | modifies glyph outlines for maximum contrast |
Cary Clark12799e12017-07-28 15:18:29 -0400762
763### Parameters
764
Cary Clark8cc16c72017-08-25 11:51:49 -0400765<table> <tr> <td><a name="SkPaint_setHinting_hintingLevel"> <code><strong>hintingLevel </strong></code> </a></td> <td>
766one 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 -0400767 </tr>
768</table>
769
770### Example
771
772<div><fiddle-embed name="78153fbd3f1000cb33b97bbe831ed34e">
773
774#### Example Output
775
776~~~~
777paint1 == paint2
778~~~~
779
780</fiddle-embed></div>
781
782---
783
Cary Clark08895c42018-02-01 09:37:32 -0500784## <a name="Flags"></a> Flags
Cary Clark12799e12017-07-28 15:18:29 -0400785
Cary Clark8cc16c72017-08-25 11:51:49 -0400786## <a name="SkPaint_Flags"></a> Enum SkPaint::Flags
Cary Clark12799e12017-07-28 15:18:29 -0400787
Cary Clarka560c472017-11-27 10:44:06 -0500788<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400789enum <a href="#Flags">Flags</a> {
790<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> = 0x01,
791<a href="#SkPaint_kDither_Flag">kDither Flag</a> = 0x04,
792<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> = 0x20,
793<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> = 0x40,
794<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> = 0x80,
795<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> = 0x100,
796<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> = 0x200,
797<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> = 0x400,
798<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> = 0x800,
799<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> = 0x1000,
800<a href="#SkPaint_kGenA8FromLCD_Flag">kGenA8FromLCD Flag</a> = 0x2000,
Cary Clark12799e12017-07-28 15:18:29 -0400801
Cary Clark8cc16c72017-08-25 11:51:49 -0400802<a href="#SkPaint_kAllFlags">kAllFlags</a> = 0xFFFF,
Cary Clark12799e12017-07-28 15:18:29 -0400803};
804</pre>
805
Cary Clark8cc16c72017-08-25 11:51:49 -0400806The bit values stored in <a href="#Flags">Flags</a>.
807The default value for <a href="#Flags">Flags</a>, normally zero, can be changed at compile time
Cary Clark4c06f5e2017-08-04 12:48:24 -0400808with a custom definition of <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -0400809All flags can be read and written explicitly; <a href="#Flags">Flags</a> allows manipulating
Cary Clark12799e12017-07-28 15:18:29 -0400810multiple settings at once.
811
812### Constants
813
814<table>
815 <tr>
Cary Clarka560c472017-11-27 10:44:06 -0500816 <td><a name="SkPaint_kAntiAlias_Flag"> <code><strong>SkPaint::kAntiAlias_Flag </strong></code> </a></td><td>0x0001 </td><td>mask for setting Anti-alias</td>
Cary Clark12799e12017-07-28 15:18:29 -0400817 </tr>
818 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400819 <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 -0400820 </tr>
821 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400822 <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 -0400823 </tr>
824 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400825 <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 -0400826 </tr>
827 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400828 <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 -0400829 </tr>
830 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400831 <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 -0400832 </tr>
833 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400834 <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 -0400835 </tr>
836 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400837 <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 -0400838 </tr>
839 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400840 <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 -0400841 </tr>
842 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400843 <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 -0400844 </tr>
845 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400846 <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 -0400847 </tr>
848 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400849 <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 -0400850 </tr>
Cary Clark8cc16c72017-08-25 11:51:49 -0400851<a href="#Flags">Flags</a> default to all flags clear, disabling the associated feature.
Cary Clark12799e12017-07-28 15:18:29 -0400852
853</table>
854
Cary Clark8cc16c72017-08-25 11:51:49 -0400855## <a name="SkPaint_ReserveFlags"></a> Enum SkPaint::ReserveFlags
Cary Clark12799e12017-07-28 15:18:29 -0400856
Cary Clark4855f782018-02-06 09:41:53 -0500857soonOnly valid for Android framework.
858
Cary Clarka560c472017-11-27 10:44:06 -0500859<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -0400860enum <a href="#SkPaint_ReserveFlags">ReserveFlags</a> {
861<a href="#SkPaint_kUnderlineText_ReserveFlag">kUnderlineText ReserveFlag</a> = 0x08,
862<a href="#SkPaint_kStrikeThruText_ReserveFlag">kStrikeThruText ReserveFlag</a> = 0x10,
Cary Clark12799e12017-07-28 15:18:29 -0400863};</pre>
864
865### Constants
866
867<table>
868 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500869 <td><a name="SkPaint_kUnderlineText_ReserveFlag"> <code><strong>SkPaint::kUnderlineText_ReserveFlag </strong></code> </a></td><td>0x0008</td><td>soon</td>
Cary Clark12799e12017-07-28 15:18:29 -0400870 </tr>
871 <tr>
Cary Clark4855f782018-02-06 09:41:53 -0500872 <td><a name="SkPaint_kStrikeThruText_ReserveFlag"> <code><strong>SkPaint::kStrikeThruText_ReserveFlag </strong></code> </a></td><td>0x0010</td><td>soon</td>
Cary Clark12799e12017-07-28 15:18:29 -0400873 </tr>
Cary Clark4855f782018-02-06 09:41:53 -0500874
Cary Clark12799e12017-07-28 15:18:29 -0400875</table>
876
Cary Clark493df1f2017-08-25 13:14:33 -0400877<a name="SkPaint_getFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400878## getFlags
879
Cary Clarka560c472017-11-27 10:44:06 -0500880<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400881uint32_t getFlags() const
882</pre>
883
Cary Clark8cc16c72017-08-25 11:51:49 -0400884Returns paint settings described by <a href="#Flags">Flags</a>. Each setting uses one
885bit, and can be tested with <a href="#Flags">Flags</a> members.
Cary Clark12799e12017-07-28 15:18:29 -0400886
887### Return Value
888
Cary Clark8cc16c72017-08-25 11:51:49 -0400889zero, one, or more bits described by <a href="#Flags">Flags</a>
Cary Clark12799e12017-07-28 15:18:29 -0400890
891### Example
892
893<div><fiddle-embed name="8a3f8c309533388b01aa66e1267f322d">
894
895#### Example Output
896
897~~~~
898(SkPaint::kAntiAlias_Flag & paint.getFlags()) != 0
899~~~~
900
901</fiddle-embed></div>
902
903---
904
Cary Clark493df1f2017-08-25 13:14:33 -0400905<a name="SkPaint_setFlags"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400906## setFlags
907
Cary Clarka560c472017-11-27 10:44:06 -0500908<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400909void setFlags(uint32_t flags)
910</pre>
911
Cary Clark8cc16c72017-08-25 11:51:49 -0400912Replaces <a href="#Flags">Flags</a> with <a href="#SkPaint_setFlags_flags">flags</a>, the union of the <a href="#Flags">Flags</a> members.
913All <a href="#Flags">Flags</a> members may be cleared, or one or more may be set.
Cary Clark12799e12017-07-28 15:18:29 -0400914
915### Parameters
916
Cary Clark8cc16c72017-08-25 11:51:49 -0400917<table> <tr> <td><a name="SkPaint_setFlags_flags"> <code><strong>flags </strong></code> </a></td> <td>
918union of <a href="#Flags">Flags</a> for <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -0400919 </tr>
920</table>
921
922### Example
923
924<div><fiddle-embed name="54baed3f6bc4b9c31ba664e27767fdc7">
925
926#### Example Output
927
928~~~~
929paint.isAntiAlias()
930paint.isDither()
931~~~~
932
933</fiddle-embed></div>
934
935---
936
Cary Clark08895c42018-02-01 09:37:32 -0500937## <a name="Anti-alias"></a> Anti-alias
938
Cary Clarka560c472017-11-27 10:44:06 -0500939Anti-alias drawing approximates partial pixel coverage with transparency.
Cary Clark8cc16c72017-08-25 11:51:49 -0400940If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, pixel centers contained by the shape edge are drawn opaque.
941If <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 -0400942
Cary Clark7cfcbca2018-01-04 16:11:51 -0500943The rule for <a href="#Alias">Aliased</a> pixels is inconsistent across platforms. A shape edge
Cary Clark12799e12017-07-28 15:18:29 -0400944passing through the pixel center may, but is not required to, draw the pixel.
945
Cary Clarkce101242017-09-01 15:51:02 -0400946<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 -0400947active <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 -0400948
Cary Clark7cfcbca2018-01-04 16:11:51 -0500949A platform may only support Anti-aliased drawing. Some GPU-backed platforms use
Cary Clarka560c472017-11-27 10:44:06 -0500950<a href="undocumented#Supersampling">Supersampling</a> to Anti-alias all drawing, and have no mechanism to selectively
Cary Clarkce101242017-09-01 15:51:02 -0400951<a href="undocumented#Alias">Alias</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400952
Cary Clarka560c472017-11-27 10:44:06 -0500953The amount of coverage computed for Anti-aliased pixels also varies across platforms.
Cary Clark12799e12017-07-28 15:18:29 -0400954
Cary Clarka560c472017-11-27 10:44:06 -0500955Anti-alias is disabled by default.
956Anti-alias can be enabled by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>
Cary Clark12799e12017-07-28 15:18:29 -0400957at compile time.
958
959### Example
960
961<div><fiddle-embed name="a6575a49467ce8d28bb01cc7638fa04d"><div>A red line is drawn with transparency on the edges to make it look smoother.
962A blue line draws only where the pixel centers are contained.
Cary Clarkbc5697d2017-10-04 14:31:33 -0400963The lines are drawn into <a href="SkBitmap_Reference#Bitmap">Bitmap</a>, then drawn magnified to make the
Cary Clarkce101242017-09-01 15:51:02 -0400964<a href="#Alias">Aliasing</a> easier to see.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -0400965
Cary Clark493df1f2017-08-25 13:14:33 -0400966<a name="SkPaint_isAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400967## isAntiAlias
968
Cary Clarka560c472017-11-27 10:44:06 -0500969<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -0400970bool isAntiAlias() const
971</pre>
972
Cary Clark4c06f5e2017-08-04 12:48:24 -0400973If 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 -0400974
Cary Clark8cc16c72017-08-25 11:51:49 -0400975Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -0400976
977### Return Value
978
Cary Clark8cc16c72017-08-25 11:51:49 -0400979<a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -0400980
981### Example
982
983<div><fiddle-embed name="d7d5f4f7da7acd5104a652f490c6f7b8">
984
985#### Example Output
986
987~~~~
988paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
989paint.isAntiAlias() == !!(paint.getFlags() & SkPaint::kAntiAlias_Flag)
990~~~~
991
992</fiddle-embed></div>
993
994---
995
Cary Clark493df1f2017-08-25 13:14:33 -0400996<a name="SkPaint_setAntiAlias"></a>
Cary Clark12799e12017-07-28 15:18:29 -0400997## setAntiAlias
998
Cary Clarka560c472017-11-27 10:44:06 -0500999<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001000void setAntiAlias(bool aa)
1001</pre>
1002
Cary Clark4c06f5e2017-08-04 12:48:24 -04001003Requests, 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 -04001004partial transparency.
1005
Cary Clark8cc16c72017-08-25 11:51:49 -04001006Sets <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> if <a href="#SkPaint_setAntiAlias_aa">aa</a> is true.
1007Clears <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 -04001008
1009### Parameters
1010
Cary Clark8cc16c72017-08-25 11:51:49 -04001011<table> <tr> <td><a name="SkPaint_setAntiAlias_aa"> <code><strong>aa </strong></code> </a></td> <td>
1012setting for <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001013 </tr>
1014</table>
1015
1016### Example
1017
1018<div><fiddle-embed name="c2ff148374d01cbef845b223e725905c">
1019
1020#### Example Output
1021
1022~~~~
1023paint1 == paint2
1024~~~~
1025
1026</fiddle-embed></div>
1027
1028---
1029
Cary Clark08895c42018-02-01 09:37:32 -05001030## <a name="Dither"></a> Dither
1031
Cary Clark7cfcbca2018-01-04 16:11:51 -05001032<a href="#Dither">Dither</a> increases fidelity by adjusting the color of adjacent pixels.
Cary Clark12799e12017-07-28 15:18:29 -04001033This can help to smooth color transitions and reducing banding in gradients.
Cary Clark2dc84ad2018-01-26 12:56:22 -05001034Dithering lessens visible banding from <a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a>
1035and <a href="SkImageInfo_Reference#SkColorType">kRGBA 8888 SkColorType</a> gradients,
1036and improves rendering into a <a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001037
1038Dithering is always enabled for linear gradients drawing into
Cary Clark2dc84ad2018-01-26 12:56:22 -05001039<a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and <a href="SkImageInfo_Reference#SkColorType">kRGBA 8888 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
1040<a href="#Dither">Dither</a> cannot be enabled for <a href="SkImageInfo_Reference#SkColorType">kAlpha 8 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a> and
1041<a href="SkImageInfo_Reference#SkColorType">kRGBA F16 SkColorType</a> <a href="SkSurface_Reference#Surface">Surface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001042
Cary Clark8cc16c72017-08-25 11:51:49 -04001043<a href="#Dither">Dither</a> is disabled by default.
1044<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 -04001045at compile time.
1046
Cary Clark8cc16c72017-08-25 11:51:49 -04001047Some 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 -04001048
1049### Example
1050
1051<div><fiddle-embed name="8b26507690b71462f44642b911890bbf"><div>Dithering in the bottom half more closely approximates the requested color by
1052alternating nearby colors from pixel to pixel.</div></fiddle-embed></div>
1053
1054### Example
1055
1056<div><fiddle-embed name="76d4d4a7931a48495e4d5f54e073be53"><div>Dithering introduces subtle adjustments to color to smooth gradients.
Cary Clark8cc16c72017-08-25 11:51:49 -04001057Drawing the gradient repeatedly with <a href="#SkBlendMode_kPlus">SkBlendMode::kPlus</a> exaggerates the
Cary Clark12799e12017-07-28 15:18:29 -04001058dither, making it easier to see.</div></fiddle-embed></div>
1059
Cary Clark493df1f2017-08-25 13:14:33 -04001060<a name="SkPaint_isDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001061## isDither
1062
Cary Clarka560c472017-11-27 10:44:06 -05001063<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001064bool isDither() const
1065</pre>
1066
1067If true, color error may be distributed to smooth color transition.
Cary Clark8cc16c72017-08-25 11:51:49 -04001068Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDither_Flag">kDither Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001069
1070### Return Value
1071
Cary Clark8cc16c72017-08-25 11:51:49 -04001072<a href="#SkPaint_kDither_Flag">kDither Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001073
1074### Example
1075
1076<div><fiddle-embed name="f4ce93f6c5e7335436a985377fd980c0">
1077
1078#### Example Output
1079
1080~~~~
1081paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1082paint.isDither() == !!(paint.getFlags() & SkPaint::kDither_Flag)
1083~~~~
1084
1085</fiddle-embed></div>
1086
1087---
1088
Cary Clark493df1f2017-08-25 13:14:33 -04001089<a name="SkPaint_setDither"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001090## setDither
1091
Cary Clarka560c472017-11-27 10:44:06 -05001092<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001093void setDither(bool dither)
1094</pre>
1095
1096Requests, but does not require, to distribute color error.
1097
Cary Clark8cc16c72017-08-25 11:51:49 -04001098Sets <a href="#SkPaint_kDither_Flag">kDither Flag</a> if <a href="#SkPaint_setDither_dither">dither</a> is true.
1099Clears <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 -04001100
1101### Parameters
1102
Cary Clark8cc16c72017-08-25 11:51:49 -04001103<table> <tr> <td><a name="SkPaint_setDither_dither"> <code><strong>dither </strong></code> </a></td> <td>
1104setting for <a href="#SkPaint_kDither_Flag">kDither Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001105 </tr>
1106</table>
1107
1108### Example
1109
1110<div><fiddle-embed name="69b7162e8324d9239dd02dd9ada2bdff">
1111
1112#### Example Output
1113
1114~~~~
1115paint1 == paint2
1116~~~~
1117
1118</fiddle-embed></div>
1119
1120### See Also
1121
Cary Clark2dc84ad2018-01-26 12:56:22 -05001122<a href="SkImageInfo_Reference#SkColorType">kRGB 565 SkColorType</a>
Cary Clark12799e12017-07-28 15:18:29 -04001123
1124---
1125
1126### See Also
1127
Cary Clarka560c472017-11-27 10:44:06 -05001128Gradient <a href="#RGB">Color RGB</a>-565
Cary Clark12799e12017-07-28 15:18:29 -04001129
Cary Clark08895c42018-02-01 09:37:32 -05001130## <a name="Device_Text"></a> Device Text
1131
Cary Clark4c06f5e2017-08-04 12:48:24 -04001132<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 -04001133
Cary Clark7cfcbca2018-01-04 16:11:51 -05001134When 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 -04001135create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001136on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001137<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 -04001138the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001139
Cary Clark7cfcbca2018-01-04 16:11:51 -05001140<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 -04001141As the opaqueness
1142of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1143
1144Either or both techniques can be enabled.
Cary Clark8cc16c72017-08-25 11:51:49 -04001145<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> and <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> are clear by default.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001146<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 -04001147<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 -04001148
1149### Example
1150
Cary Clark4c06f5e2017-08-04 12:48:24 -04001151<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 -04001152When <a href="SkPaint_Reference#Subpixel_Text">Subpixel Text</a> is disabled, the comma <a href="#Glyph">Glyphs</a> are identical, but not evenly spaced.
1153When <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 -04001154
1155## <a name="Linear_Text"></a> Linear Text
1156
Cary Clark4c06f5e2017-08-04 12:48:24 -04001157<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 -04001158If <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 -04001159If <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 -04001160
Cary Clark493df1f2017-08-25 13:14:33 -04001161<a name="SkPaint_isLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001162## isLinearText
1163
Cary Clarka560c472017-11-27 10:44:06 -05001164<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001165bool isLinearText() const
1166</pre>
1167
Cary Clark4c06f5e2017-08-04 12:48:24 -04001168If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark12799e12017-07-28 15:18:29 -04001169
Cary Clark8cc16c72017-08-25 11:51:49 -04001170Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001171
1172### Return Value
1173
Cary Clark8cc16c72017-08-25 11:51:49 -04001174<a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001175
1176### Example
1177
1178<div><fiddle-embed name="2890ad644f980637837e6fcb386fb462"></fiddle-embed></div>
1179
1180### See Also
1181
Cary Clark8cc16c72017-08-25 11:51:49 -04001182<a href="#SkPaint_setLinearText">setLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001183
1184---
1185
Cary Clark493df1f2017-08-25 13:14:33 -04001186<a name="SkPaint_setLinearText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001187## setLinearText
1188
Cary Clarka560c472017-11-27 10:44:06 -05001189<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001190void setLinearText(bool linearText)
1191</pre>
1192
Cary Clark4c06f5e2017-08-04 12:48:24 -04001193If true, text is converted to <a href="SkPath_Reference#Path">Path</a> before drawing and measuring.
Cary Clark8cc16c72017-08-25 11:51:49 -04001194By default, <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> is clear.
Cary Clark12799e12017-07-28 15:18:29 -04001195
Cary Clark8cc16c72017-08-25 11:51:49 -04001196Sets <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a> if <a href="#SkPaint_setLinearText_linearText">linearText</a> is true.
1197Clears <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 -04001198
1199### Parameters
1200
Cary Clark8cc16c72017-08-25 11:51:49 -04001201<table> <tr> <td><a name="SkPaint_setLinearText_linearText"> <code><strong>linearText </strong></code> </a></td> <td>
1202setting for <a href="#SkPaint_kLinearText_Flag">kLinearText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001203 </tr>
1204</table>
1205
1206### Example
1207
1208<div><fiddle-embed name="c93bb912f3bddfb4d96d3ad70ada552b"></fiddle-embed></div>
1209
1210### See Also
1211
Cary Clark8cc16c72017-08-25 11:51:49 -04001212<a href="#SkPaint_isLinearText">isLinearText</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001213
1214---
1215
1216## <a name="Subpixel_Text"></a> Subpixel Text
1217
Cary Clark7cfcbca2018-01-04 16:11:51 -05001218<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 -04001219As the opaqueness
1220of the color increases, the edge of the glyph appears to move towards the outside of the pixel.
1221
Cary Clark493df1f2017-08-25 13:14:33 -04001222<a name="SkPaint_isSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001223## isSubpixelText
1224
Cary Clarka560c472017-11-27 10:44:06 -05001225<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001226bool isSubpixelText() const
1227</pre>
1228
Cary Clarkce101242017-09-01 15:51:02 -04001229If true, <a href="#Glyph">Glyphs</a> at different sub-pixel positions may differ on pixel edge coverage.
Cary Clark12799e12017-07-28 15:18:29 -04001230
Cary Clark8cc16c72017-08-25 11:51:49 -04001231Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001232
1233### Return Value
1234
Cary Clark8cc16c72017-08-25 11:51:49 -04001235<a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001236
1237### Example
1238
1239<div><fiddle-embed name="abe9afc0932e2199324ae6cbb396e67c">
1240
1241#### Example Output
1242
1243~~~~
1244paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1245paint.isSubpixelText() == !!(paint.getFlags() & SkPaint::kSubpixelText_Flag)
1246~~~~
1247
1248</fiddle-embed></div>
1249
1250---
1251
Cary Clark493df1f2017-08-25 13:14:33 -04001252<a name="SkPaint_setSubpixelText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001253## setSubpixelText
1254
Cary Clarka560c472017-11-27 10:44:06 -05001255<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001256void setSubpixelText(bool subpixelText)
1257</pre>
1258
Cary Clarkce101242017-09-01 15:51:02 -04001259Requests, but does not require, that <a href="#Glyph">Glyphs</a> respect sub-pixel positioning.
Cary Clark12799e12017-07-28 15:18:29 -04001260
Cary Clark8cc16c72017-08-25 11:51:49 -04001261Sets <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a> if <a href="#SkPaint_setSubpixelText_subpixelText">subpixelText</a> is true.
1262Clears <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 -04001263
1264### Parameters
1265
Cary Clark8cc16c72017-08-25 11:51:49 -04001266<table> <tr> <td><a name="SkPaint_setSubpixelText_subpixelText"> <code><strong>subpixelText </strong></code> </a></td> <td>
1267setting for <a href="#SkPaint_kSubpixelText_Flag">kSubpixelText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001268 </tr>
1269</table>
1270
1271### Example
1272
1273<div><fiddle-embed name="a77bbc1a4e3be9a8ab0f842f877c5ee4">
1274
1275#### Example Output
1276
1277~~~~
1278paint1 == paint2
1279~~~~
1280
1281</fiddle-embed></div>
1282
1283---
1284
1285## <a name="LCD_Text"></a> LCD Text
1286
Cary Clark7cfcbca2018-01-04 16:11:51 -05001287When 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 -04001288create a color, and relies
Cary Clarkce101242017-09-01 15:51:02 -04001289on the small size of the stripe and visual perception to make the color fringing imperceptible.
Cary Clark4c06f5e2017-08-04 12:48:24 -04001290<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 -04001291the color components as <a href="#RGB">Color RGB</a> or <a href="#RBG">Color RBG</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001292
Cary Clark493df1f2017-08-25 13:14:33 -04001293<a name="SkPaint_isLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001294## isLCDRenderText
1295
Cary Clarka560c472017-11-27 10:44:06 -05001296<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001297bool isLCDRenderText() const
1298</pre>
1299
Cary Clark7cfcbca2018-01-04 16:11:51 -05001300If true, <a href="#Glyph">Glyphs</a> may use LCD striping to improve glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001301
Cary Clark8cc16c72017-08-25 11:51:49 -04001302Returns 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 -04001303
1304### Return Value
1305
Cary Clark8cc16c72017-08-25 11:51:49 -04001306<a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001307
1308### Example
1309
1310<div><fiddle-embed name="68e1fd95dd2fd06a333899d2bd2396b9">
1311
1312#### Example Output
1313
1314~~~~
1315paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1316paint.isLCDRenderText() == !!(paint.getFlags() & SkPaint::kLCDRenderText_Flag)
1317~~~~
1318
1319</fiddle-embed></div>
1320
1321---
1322
Cary Clark493df1f2017-08-25 13:14:33 -04001323<a name="SkPaint_setLCDRenderText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001324## setLCDRenderText
1325
Cary Clarka560c472017-11-27 10:44:06 -05001326<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001327void setLCDRenderText(bool lcdText)
1328</pre>
1329
Cary Clark7cfcbca2018-01-04 16:11:51 -05001330Requests, but does not require, that <a href="#Glyph">Glyphs</a> use LCD striping for glyph edges.
Cary Clark12799e12017-07-28 15:18:29 -04001331
Cary Clark8cc16c72017-08-25 11:51:49 -04001332Sets <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a> if <a href="#SkPaint_setLCDRenderText_lcdText">lcdText</a> is true.
1333Clears <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 -04001334
1335### Parameters
1336
Cary Clark8cc16c72017-08-25 11:51:49 -04001337<table> <tr> <td><a name="SkPaint_setLCDRenderText_lcdText"> <code><strong>lcdText </strong></code> </a></td> <td>
1338setting for <a href="#SkPaint_kLCDRenderText_Flag">kLCDRenderText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001339 </tr>
1340</table>
1341
1342### Example
1343
1344<div><fiddle-embed name="50dedf8450159571a3edaf4f0050defe">
1345
1346#### Example Output
1347
1348~~~~
1349paint1 == paint2
1350~~~~
1351
1352</fiddle-embed></div>
1353
1354---
1355
Cary Clark08895c42018-02-01 09:37:32 -05001356## <a name="Font_Embedded_Bitmaps"></a> Font Embedded Bitmaps
1357
Cary Clarkce101242017-09-01 15:51:02 -04001358<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 -04001359<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> when set chooses an embedded bitmap glyph over an outline contained
Cary Clark7cfcbca2018-01-04 16:11:51 -05001360in a font if the platform supports this option.
Cary Clark12799e12017-07-28 15:18:29 -04001361
Cary Clark7cfcbca2018-01-04 16:11:51 -05001362FreeType selects the bitmap glyph if available when <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is set, and selects
Cary Clark8cc16c72017-08-25 11:51:49 -04001363the outline glyph if <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> is clear.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001364Windows may select the bitmap glyph but is not required to do so.
1365<a href="undocumented#OS_X">OS X</a> and iOS do not support this option.
Cary Clark12799e12017-07-28 15:18:29 -04001366
Cary Clark4c06f5e2017-08-04 12:48:24 -04001367<a href="SkPaint_Reference#Font_Embedded_Bitmaps">Font Embedded Bitmaps</a> is disabled by default.
1368<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 -04001369<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001370
1371### Example
1372
Cary Clarka560c472017-11-27 10:44:06 -05001373<pre style="padding: 1em 1em 1em 1em; font-size: 13px width: 62.5em; background-color: #f0f0f0">
1374void draw(SkCanvas* canvas) {<div>The "hintgasp" TrueType font in the Skia resources/fonts directory
1375 includes an embedded bitmap Glyph at odd font sizes. This example works
1376 on platforms that use FreeType as their Font_Engine.
1377 Windows may, but is not required to, return a bitmap glyph if
1378 kEmbeddedBitmapText_Flag is set.</div>SkBitmap bitmap;
1379 bitmap.allocN32Pixels(30, 15);
1380 bitmap.eraseColor(0);
1381 SkCanvas offscreen(bitmap);
1382 SkPaint paint;
1383 paint.setAntiAlias(true);
1384 paint.setTextSize(13);
Hal Canary53e5e7d2017-12-08 14:25:14 -05001385 paint.setTypeface(MakeResourceAsTypeface("fonts/hintgasp.ttf"));
Cary Clarka560c472017-11-27 10:44:06 -05001386 for (bool embedded : { false, true}) {
1387 paint.setEmbeddedBitmapText(embedded);
1388 offscreen.drawString("A", embedded ? 5 : 15, 15, paint);
1389 }
1390 canvas->drawBitmap(bitmap, 0, 0);
1391 canvas->scale(10, 10);
1392 canvas->drawBitmap(bitmap, -2, 1);
1393}
1394</pre>
Cary Clark12799e12017-07-28 15:18:29 -04001395
Cary Clark493df1f2017-08-25 13:14:33 -04001396<a name="SkPaint_isEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001397## isEmbeddedBitmapText
1398
Cary Clarka560c472017-11-27 10:44:06 -05001399<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001400bool isEmbeddedBitmapText() const
1401</pre>
1402
Cary Clarkce101242017-09-01 15:51:02 -04001403If 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 -04001404
Cary Clark8cc16c72017-08-25 11:51:49 -04001405Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001406
1407### Return Value
1408
Cary Clark8cc16c72017-08-25 11:51:49 -04001409<a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001410
1411### Example
1412
1413<div><fiddle-embed name="eba10b27b790e87183ae451b3fc5c4b1">
1414
1415#### Example Output
1416
1417~~~~
1418paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1419paint.isEmbeddedBitmapText() == !!(paint.getFlags() & SkPaint::kEmbeddedBitmapText_Flag)
1420~~~~
1421
1422</fiddle-embed></div>
1423
1424---
1425
Cary Clark493df1f2017-08-25 13:14:33 -04001426<a name="SkPaint_setEmbeddedBitmapText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001427## setEmbeddedBitmapText
1428
Cary Clarka560c472017-11-27 10:44:06 -05001429<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001430void setEmbeddedBitmapText(bool useEmbeddedBitmapText)
1431</pre>
1432
1433Requests, but does not require, to use bitmaps in fonts instead of outlines.
1434
Cary Clark8cc16c72017-08-25 11:51:49 -04001435Sets <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a> if <a href="#SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText">useEmbeddedBitmapText</a> is true.
1436Clears <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 -04001437
1438### Parameters
1439
Cary Clark8cc16c72017-08-25 11:51:49 -04001440<table> <tr> <td><a name="SkPaint_setEmbeddedBitmapText_useEmbeddedBitmapText"> <code><strong>useEmbeddedBitmapText </strong></code> </a></td> <td>
1441setting for <a href="#SkPaint_kEmbeddedBitmapText_Flag">kEmbeddedBitmapText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001442 </tr>
1443</table>
1444
1445### Example
1446
1447<div><fiddle-embed name="246dffdd93a484ba4ad7ecf71198a5d4">
1448
1449#### Example Output
1450
1451~~~~
1452paint1 == paint2
1453~~~~
1454
1455</fiddle-embed></div>
1456
1457---
1458
Cary Clark08895c42018-02-01 09:37:32 -05001459## <a name="Automatic_Hinting"></a> Automatic Hinting
1460
Cary Clark8cc16c72017-08-25 11:51:49 -04001461If <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 -04001462instructs the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001463<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
1464<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001465
Cary Clark7cfcbca2018-01-04 16:11:51 -05001466<a href="#Automatic_Hinting">Automatic Hinting</a> only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001467
Cary Clark493df1f2017-08-25 13:14:33 -04001468<a name="SkPaint_isAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001469## isAutohinted
1470
Cary Clarka560c472017-11-27 10:44:06 -05001471<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001472bool isAutohinted() const
1473</pre>
1474
Cary Clark8cc16c72017-08-25 11:51:49 -04001475If true, and if <a href="#SkPaint_Hinting">Hinting</a> is set to <a href="#SkPaint_kNormal_Hinting">kNormal Hinting</a> or <a href="#SkPaint_kFull_Hinting">kFull Hinting</a>, and if
Cary Clark7cfcbca2018-01-04 16:11:51 -05001476platform uses FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>, instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint
Cary Clarkce101242017-09-01 15:51:02 -04001477<a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001478
Cary Clark8cc16c72017-08-25 11:51:49 -04001479Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001480
1481### Return Value
1482
Cary Clark8cc16c72017-08-25 11:51:49 -04001483<a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001484
1485### Example
1486
1487<div><fiddle-embed name="aa4781afbe3b90e7ef56a287e5b9ce1e">
1488
1489#### Example Output
1490
1491~~~~
1492paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1493paint.isAutohinted() == !!(paint.getFlags() & SkPaint::kAutoHinting_Flag)
1494~~~~
1495
1496</fiddle-embed></div>
1497
1498### See Also
1499
Cary Clark8cc16c72017-08-25 11:51:49 -04001500<a href="#SkPaint_setAutohinted">setAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001501
1502---
1503
Cary Clark493df1f2017-08-25 13:14:33 -04001504<a name="SkPaint_setAutohinted"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001505## setAutohinted
1506
Cary Clarka560c472017-11-27 10:44:06 -05001507<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001508void setAutohinted(bool useAutohinter)
1509</pre>
1510
Cary Clark8cc16c72017-08-25 11:51:49 -04001511If <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 -04001512instruct the <a href="undocumented#Font_Manager">Font Manager</a> to always hint <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04001513<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
1514<a href="#SkPaint_kSlight_Hinting">kSlight Hinting</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001515
Cary Clark7cfcbca2018-01-04 16:11:51 -05001516Only affects platforms that use FreeType as the <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001517
Cary Clark8cc16c72017-08-25 11:51:49 -04001518Sets <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a> if <a href="#SkPaint_setAutohinted_useAutohinter">useAutohinter</a> is true.
1519Clears <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 -04001520
1521### Parameters
1522
Cary Clark8cc16c72017-08-25 11:51:49 -04001523<table> <tr> <td><a name="SkPaint_setAutohinted_useAutohinter"> <code><strong>useAutohinter </strong></code> </a></td> <td>
1524setting for <a href="#SkPaint_kAutoHinting_Flag">kAutoHinting Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001525 </tr>
1526</table>
1527
1528### Example
1529
1530<div><fiddle-embed name="4e185306d7de9390fe8445eed0139309"></fiddle-embed></div>
1531
1532### See Also
1533
Cary Clark8cc16c72017-08-25 11:51:49 -04001534<a href="#SkPaint_isAutohinted">isAutohinted</a> <a href="#SkPaint_Hinting">Hinting</a>
Cary Clark12799e12017-07-28 15:18:29 -04001535
1536---
1537
Cary Clark08895c42018-02-01 09:37:32 -05001538## <a name="Vertical_Text"></a> Vertical Text
1539
Cary Clark4c06f5e2017-08-04 12:48:24 -04001540<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 -04001541using <a href="#Advance">Font Advance</a> to position subsequent <a href="#Glyph">Glyphs</a>. By default, each successive glyph
1542is positioned to the right of the preceding glyph. <a href="#Vertical_Text">Vertical Text</a> sets successive
1543<a href="#Glyph">Glyphs</a> to position below the preceding glyph.
Cary Clark12799e12017-07-28 15:18:29 -04001544
Cary Clark7cfcbca2018-01-04 16:11:51 -05001545Skia can translate text character codes as a series of <a href="#Glyph">Glyphs</a>, but does not implement
1546font substitution,
1547textual substitution, line layout, or contextual spacing like Kerning pairs. Use
1548a text shaping engine like <a href="http://harfbuzz.org/">HarfBuzz</a> to translate text runs
Cary Clark12799e12017-07-28 15:18:29 -04001549into glyph series.
1550
Cary Clark8cc16c72017-08-25 11:51:49 -04001551<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 -04001552
Cary Clark8cc16c72017-08-25 11:51:49 -04001553<a href="#SkPaint_Flags">Flags</a> <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if clear draws text left to right.
1554<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 -04001555
Cary Clark8cc16c72017-08-25 11:51:49 -04001556<a href="#Vertical_Text">Vertical Text</a> is clear by default.
1557<a href="#Vertical_Text">Vertical Text</a> can be set by default by setting <a href="undocumented#SkPaintDefaults_Flags">SkPaintDefaults Flags</a> to
1558<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> at compile time.
Cary Clark12799e12017-07-28 15:18:29 -04001559
1560### Example
1561
1562<div><fiddle-embed name="8df5800819311b71373d9abb669b49b8"></fiddle-embed></div>
1563
Cary Clark493df1f2017-08-25 13:14:33 -04001564<a name="SkPaint_isVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001565## isVerticalText
1566
Cary Clarka560c472017-11-27 10:44:06 -05001567<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001568bool isVerticalText() const
1569</pre>
1570
Cary Clarkce101242017-09-01 15:51:02 -04001571If true, <a href="#Glyph">Glyphs</a> are drawn top to bottom instead of left to right.
Cary Clark12799e12017-07-28 15:18:29 -04001572
Cary Clark8cc16c72017-08-25 11:51:49 -04001573Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001574
1575### Return Value
1576
Cary Clark8cc16c72017-08-25 11:51:49 -04001577<a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001578
1579### Example
1580
1581<div><fiddle-embed name="4a269b16e644d473870ffa873396f139">
1582
1583#### Example Output
1584
1585~~~~
1586paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1587paint.isVerticalText() == !!(paint.getFlags() & SkPaint::kVerticalText_Flag)
1588~~~~
1589
1590</fiddle-embed></div>
1591
1592---
1593
Cary Clark493df1f2017-08-25 13:14:33 -04001594<a name="SkPaint_setVerticalText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001595## setVerticalText
1596
Cary Clarka560c472017-11-27 10:44:06 -05001597<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001598void setVerticalText(bool verticalText)
1599</pre>
1600
1601If true, text advance positions the next glyph below the previous glyph instead of to the
1602right of previous glyph.
1603
Cary Clark8cc16c72017-08-25 11:51:49 -04001604Sets <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is true.
1605Clears <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> if vertical is false.
Cary Clark12799e12017-07-28 15:18:29 -04001606
1607### Parameters
1608
Cary Clark8cc16c72017-08-25 11:51:49 -04001609<table> <tr> <td><a name="SkPaint_setVerticalText_verticalText"> <code><strong>verticalText </strong></code> </a></td> <td>
1610setting for <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001611 </tr>
1612</table>
1613
1614### Example
1615
1616<div><fiddle-embed name="6fbd7e9e1a346cb8d7f537786009c736">
1617
1618#### Example Output
1619
1620~~~~
1621paint1 == paint2
1622~~~~
1623
1624</fiddle-embed></div>
1625
1626---
1627
Cary Clark08895c42018-02-01 09:37:32 -05001628## <a name="Fake_Bold"></a> Fake Bold
1629
Cary Clark8cc16c72017-08-25 11:51:49 -04001630<a href="#Fake_Bold">Fake Bold</a> approximates the bold font style accompanying a normal font when a bold font face
Cary Clark7cfcbca2018-01-04 16:11:51 -05001631is not available. Skia does not provide font substitution; it is up to the client to find the
Cary Clarkbc5697d2017-10-04 14:31:33 -04001632bold font face using the platform <a href="undocumented#Font_Manager">Font Manager</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001633
Cary Clark7cfcbca2018-01-04 16:11:51 -05001634Use <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 -04001635is not available.
1636
Cary Clark7cfcbca2018-01-04 16:11:51 -05001637A FreeType based port may define SK_USE_FREETYPE_EMBOLDEN at compile time to direct
Cary Clarkce101242017-09-01 15:51:02 -04001638the font engine to create the bold <a href="#Glyph">Glyphs</a>. Otherwise, the extra bold is computed
Cary Clark7cfcbca2018-01-04 16:11:51 -05001639by 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 -04001640
Cary Clark8cc16c72017-08-25 11:51:49 -04001641<a href="#Fake_Bold">Fake Bold</a> is disabled by default.
Cary Clark12799e12017-07-28 15:18:29 -04001642
1643### Example
1644
1645<div><fiddle-embed name="e811f4829a2daaaeaad3795504a7e02a"></fiddle-embed></div>
1646
Cary Clark493df1f2017-08-25 13:14:33 -04001647<a name="SkPaint_isFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001648## isFakeBoldText
1649
Cary Clarka560c472017-11-27 10:44:06 -05001650<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001651bool isFakeBoldText() const
1652</pre>
1653
1654If true, approximate bold by increasing the stroke width when creating glyph bitmaps
1655from outlines.
1656
Cary Clark8cc16c72017-08-25 11:51:49 -04001657Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001658
1659### Return Value
1660
Cary Clark8cc16c72017-08-25 11:51:49 -04001661<a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001662
1663### Example
1664
1665<div><fiddle-embed name="f54d1f85b16073b80b9eef2e1a1d151d">
1666
1667#### Example Output
1668
1669~~~~
1670paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1671paint.isFakeBoldText() == !!(paint.getFlags() & SkPaint::kFakeBoldText_Flag)
1672~~~~
1673
1674</fiddle-embed></div>
1675
1676---
1677
Cary Clark493df1f2017-08-25 13:14:33 -04001678<a name="SkPaint_setFakeBoldText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001679## setFakeBoldText
1680
Cary Clarka560c472017-11-27 10:44:06 -05001681<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001682void setFakeBoldText(bool fakeBoldText)
1683</pre>
1684
Cary Clarkce101242017-09-01 15:51:02 -04001685Use increased stroke width when creating glyph bitmaps to approximate a bold typeface.
Cary Clark12799e12017-07-28 15:18:29 -04001686
Cary Clark8cc16c72017-08-25 11:51:49 -04001687Sets <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a> if <a href="#SkPaint_setFakeBoldText_fakeBoldText">fakeBoldText</a> is true.
1688Clears <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 -04001689
1690### Parameters
1691
Cary Clark8cc16c72017-08-25 11:51:49 -04001692<table> <tr> <td><a name="SkPaint_setFakeBoldText_fakeBoldText"> <code><strong>fakeBoldText </strong></code> </a></td> <td>
1693setting for <a href="#SkPaint_kFakeBoldText_Flag">kFakeBoldText Flag</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001694 </tr>
1695</table>
1696
1697### Example
1698
1699<div><fiddle-embed name="594d47858eb11028cb626515a520910a">
1700
1701#### Example Output
1702
1703~~~~
1704paint1 == paint2
1705~~~~
1706
1707</fiddle-embed></div>
1708
1709---
1710
Cary Clark08895c42018-02-01 09:37:32 -05001711## <a name="Full_Hinting_Spacing"></a> Full Hinting Spacing
1712
Cary Clarkce101242017-09-01 15:51:02 -04001713if <a href="#SkPaint_Hinting">Hinting</a> is set to <a href="#SkPaint_kFull_Hinting">kFull Hinting</a>, <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> adjusts the character
Cary Clark7cfcbca2018-01-04 16:11:51 -05001714spacing by the difference of the hinted and Unhinted <a href="undocumented#Left_Side_Bearing">Left Side Bearing</a> and
Cary Clarkce101242017-09-01 15:51:02 -04001715<a href="undocumented#Right_Side_Bearing">Right Side Bearing</a>. <a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> only applies to platforms that use
Cary Clark7cfcbca2018-01-04 16:11:51 -05001716FreeType as their <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001717
Cary Clark7cfcbca2018-01-04 16:11:51 -05001718<a href="SkPaint_Reference#Full_Hinting_Spacing">Full Hinting Spacing</a> is not related to text Kerning, where the space between
1719a specific pair of characters is adjusted using data in the font Kerning tables.
Cary Clark12799e12017-07-28 15:18:29 -04001720
Cary Clark493df1f2017-08-25 13:14:33 -04001721<a name="SkPaint_isDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001722## isDevKernText
1723
Cary Clarka560c472017-11-27 10:44:06 -05001724<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001725bool isDevKernText() const
1726</pre>
1727
1728Returns if character spacing may be adjusted by the hinting difference.
1729
Cary Clark8cc16c72017-08-25 11:51:49 -04001730Equivalent to <a href="#SkPaint_getFlags">getFlags</a> masked with <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001731
1732### Return Value
1733
Cary Clark8cc16c72017-08-25 11:51:49 -04001734<a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> state
Cary Clark12799e12017-07-28 15:18:29 -04001735
1736### Example
1737
1738<div><fiddle-embed name="4f69a84b2505b12809c30b0cc09c5157"></fiddle-embed></div>
1739
1740---
1741
Cary Clark493df1f2017-08-25 13:14:33 -04001742<a name="SkPaint_setDevKernText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001743## setDevKernText
1744
Cary Clarka560c472017-11-27 10:44:06 -05001745<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001746void setDevKernText(bool devKernText)
1747</pre>
1748
1749Requests, but does not require, to use hinting to adjust glyph spacing.
1750
Cary Clark8cc16c72017-08-25 11:51:49 -04001751Sets <a href="#SkPaint_kDevKernText_Flag">kDevKernText Flag</a> if <a href="#SkPaint_setDevKernText_devKernText">devKernText</a> is true.
1752Clears <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 -04001753
1754### Parameters
1755
Cary Clark8cc16c72017-08-25 11:51:49 -04001756<table> <tr> <td><a name="SkPaint_setDevKernText_devKernText"> <code><strong>devKernText </strong></code> </a></td> <td>
1757setting for <a href="#SkPaint_setDevKernText_devKernText">devKernText</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001758 </tr>
1759</table>
1760
1761### Example
1762
1763<div><fiddle-embed name="2b718a059072908bf68942503f264797">
1764
1765#### Example Output
1766
1767~~~~
1768paint1 == paint2
1769~~~~
1770
1771</fiddle-embed></div>
1772
1773---
1774
Cary Clark08895c42018-02-01 09:37:32 -05001775## <a name="Filter_Quality_Methods"></a> Filter Quality Methods
1776
Cary Clark4c06f5e2017-08-04 12:48:24 -04001777<a href="undocumented#Filter_Quality">Filter Quality</a> trades speed for image filtering when the image is scaled.
1778A lower <a href="undocumented#Filter_Quality">Filter Quality</a> draws faster, but has less fidelity.
1779A higher <a href="undocumented#Filter_Quality">Filter Quality</a> draws slower, but looks better.
Cary Clarkce101242017-09-01 15:51:02 -04001780If the image is drawn without scaling, the <a href="undocumented#Filter_Quality">Filter Quality</a> choice will not result
1781in a noticeable difference.
Cary Clark12799e12017-07-28 15:18:29 -04001782
Cary Clark8cc16c72017-08-25 11:51:49 -04001783<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 -04001784
1785<table> <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04001786 <td><a href="#SkCanvas_drawBitmap">SkCanvas::drawBitmap</a></td> </tr> <tr>
1787 <td><a href="#SkCanvas_drawBitmapRect">SkCanvas::drawBitmapRect</a></td> </tr> <tr>
1788 <td><a href="#SkCanvas_drawImage">SkCanvas::drawImage</a></td> </tr> <tr>
1789 <td><a href="#SkCanvas_drawImageRect">SkCanvas::drawImageRect</a></td> </tr>
Cary Clark12799e12017-07-28 15:18:29 -04001790</table>
1791
Cary Clarka560c472017-11-27 10:44:06 -05001792and when <a href="#Paint">Paint</a> has a <a href="undocumented#Shader">Shader</a> specialization that uses <a href="SkImage_Reference#Image">Image</a> or <a href="SkBitmap_Reference#Bitmap">Bitmap</a>.
Cary Clark12799e12017-07-28 15:18:29 -04001793
Cary Clark4c06f5e2017-08-04 12:48:24 -04001794<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 -04001795
1796### Example
1797
1798<div><fiddle-embed name="ee77f83f7291e07ae0d89f1380c7d67c"></fiddle-embed></div>
1799
Cary Clark493df1f2017-08-25 13:14:33 -04001800<a name="SkPaint_getFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001801## getFilterQuality
1802
Cary Clarka560c472017-11-27 10:44:06 -05001803<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001804SkFilterQuality getFilterQuality() const
1805</pre>
1806
Cary Clark4c06f5e2017-08-04 12:48:24 -04001807Returns <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001808draws faster; a higher setting looks better when the image is scaled.
1809
1810### Return Value
1811
Cary Clark7cfcbca2018-01-04 16:11:51 -05001812one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001813<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a>
Cary Clark12799e12017-07-28 15:18:29 -04001814
1815### Example
1816
1817<div><fiddle-embed name="d4ca1f23809b6835c4ba46ea98a86900">
1818
1819#### Example Output
1820
1821~~~~
1822kNone_SkFilterQuality == paint.getFilterQuality()
1823~~~~
1824
1825</fiddle-embed></div>
1826
1827---
1828
Cary Clark493df1f2017-08-25 13:14:33 -04001829<a name="SkPaint_setFilterQuality"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001830## setFilterQuality
1831
Cary Clarka560c472017-11-27 10:44:06 -05001832<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001833void setFilterQuality(SkFilterQuality quality)
1834</pre>
1835
Cary Clark4c06f5e2017-08-04 12:48:24 -04001836Sets <a href="undocumented#Filter_Quality">Filter Quality</a>, the image filtering level. A lower setting
Cary Clark12799e12017-07-28 15:18:29 -04001837draws faster; a higher setting looks better when the image is scaled.
Cary Clark7cfcbca2018-01-04 16:11:51 -05001838Does not check to see if <a href="#SkPaint_setFilterQuality_quality">quality</a> is valid.
Cary Clark12799e12017-07-28 15:18:29 -04001839
1840### Parameters
1841
Cary Clark8cc16c72017-08-25 11:51:49 -04001842<table> <tr> <td><a name="SkPaint_setFilterQuality_quality"> <code><strong>quality </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05001843one of: <a href="undocumented#SkFilterQuality">kNone SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kLow SkFilterQuality</a>,
Cary Clark4c06f5e2017-08-04 12:48:24 -04001844<a href="undocumented#SkFilterQuality">kMedium SkFilterQuality</a>, <a href="undocumented#SkFilterQuality">kHigh SkFilterQuality</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001845 </tr>
1846</table>
1847
1848### Example
1849
1850<div><fiddle-embed name="e4288fabf24ee60b645e8bb6ea0afadf">
1851
1852#### Example Output
1853
1854~~~~
1855kHigh_SkFilterQuality == paint.getFilterQuality()
1856~~~~
1857
1858</fiddle-embed></div>
1859
1860### See Also
1861
Cary Clark4c06f5e2017-08-04 12:48:24 -04001862<a href="undocumented#SkFilterQuality">SkFilterQuality</a> <a href="undocumented#Image_Scaling">Image Scaling</a>
Cary Clark12799e12017-07-28 15:18:29 -04001863
1864---
1865
Cary Clark08895c42018-02-01 09:37:32 -05001866## <a name="Color_Methods"></a> Color Methods
Cary Clark12799e12017-07-28 15:18:29 -04001867
Cary Clarkab2621d2018-01-30 10:08:57 -05001868| name | description |
1869| --- | --- |
1870| <a href="#SkPaint_getColor">getColor</a> | returns <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color |
1871| <a href="#SkPaint_setColor">setColor</a> | sets <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a>, one drawing color |
Cary Clark12799e12017-07-28 15:18:29 -04001872
Cary Clarkab2621d2018-01-30 10:08:57 -05001873<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>
1874values used to draw a filled or stroked shape in a 32-bit value. Each component
1875occupies 8-bits, ranging from zero: no contribution; to 255: full intensity.
1876All values in any combination are valid.
1877
1878<a href="undocumented#Color">Color</a> is not <a href="#Premultiply">Premultiplied</a>; <a href="#Alpha">Color Alpha</a> sets the transparency independent of
1879<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>.
1880
1881The bit positions of <a href="#Alpha">Color Alpha</a> and <a href="#RGB">Color RGB</a> are independent of the bit
1882positions on the output device, which may have more or fewer bits, and may have
1883a different arrangement.
Cary Clark12799e12017-07-28 15:18:29 -04001884
Cary Clark8cc16c72017-08-25 11:51:49 -04001885| 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 -04001886| --- | --- | --- | --- | --- |
1887| | 31 - 24 | 23 - 16 | 15 - 8 | 7 - 0 |
1888
1889### Example
1890
1891<div><fiddle-embed name="214b559d75c65a7bef6ef4be1f860053"></fiddle-embed></div>
1892
Cary Clark493df1f2017-08-25 13:14:33 -04001893<a name="SkPaint_getColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001894## getColor
1895
Cary Clarka560c472017-11-27 10:44:06 -05001896<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001897SkColor getColor() const
1898</pre>
1899
Cary Clarkce101242017-09-01 15:51:02 -04001900Retrieves <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 -04001901Use 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 -04001902a color component.
1903
1904### Return Value
1905
Cary Clarkce101242017-09-01 15:51:02 -04001906<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04001907
1908### Example
1909
1910<div><fiddle-embed name="72d41f890203109a41f589a7403acae9">
1911
1912#### Example Output
1913
1914~~~~
1915Yellow is 100% red, 100% green, and 0% blue.
1916~~~~
1917
1918</fiddle-embed></div>
1919
1920### See Also
1921
Cary Clark4c06f5e2017-08-04 12:48:24 -04001922<a href="undocumented#SkColor">SkColor</a>
Cary Clark12799e12017-07-28 15:18:29 -04001923
1924---
1925
Cary Clark493df1f2017-08-25 13:14:33 -04001926<a name="SkPaint_setColor"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001927## setColor
1928
Cary Clarka560c472017-11-27 10:44:06 -05001929<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001930void setColor(SkColor color)
1931</pre>
1932
Cary Clarkce101242017-09-01 15:51:02 -04001933Sets <a href="#Alpha">Alpha</a> and <a href="#RGB">Color RGB</a> used when stroking and filling. The <a href="#SkPaint_setColor_color">color</a> is a 32-bit value,
Cary Clark7cfcbca2018-01-04 16:11:51 -05001934<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 -04001935
1936### Parameters
1937
Cary Clark8cc16c72017-08-25 11:51:49 -04001938<table> <tr> <td><a name="SkPaint_setColor_color"> <code><strong>color </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04001939<a href="#Unpremultiply">Unpremultiplied</a> <a href="#ARGB">Color ARGB</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04001940 </tr>
1941</table>
1942
1943### Example
1944
1945<div><fiddle-embed name="6e70f18300bd676a3c056ceb6b62f8df">
1946
1947#### Example Output
1948
1949~~~~
1950green1 == green2
1951~~~~
1952
1953</fiddle-embed></div>
1954
1955### See Also
1956
Cary Clark8cc16c72017-08-25 11:51:49 -04001957<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 -04001958
1959---
1960
1961## <a name="Alpha_Methods"></a> Alpha Methods
1962
Cary Clark8cc16c72017-08-25 11:51:49 -04001963<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 -04001964
Cary Clark493df1f2017-08-25 13:14:33 -04001965<a name="SkPaint_getAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001966## getAlpha
1967
Cary Clarka560c472017-11-27 10:44:06 -05001968<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001969uint8_t getAlpha() const
1970</pre>
1971
Cary Clarkce101242017-09-01 15:51:02 -04001972Retrieves <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 -04001973
1974### Return Value
1975
Cary Clarkce101242017-09-01 15:51:02 -04001976<a href="#Alpha">Alpha</a> ranging from zero, fully transparent, to 255, fully opaque
Cary Clark12799e12017-07-28 15:18:29 -04001977
1978### Example
1979
1980<div><fiddle-embed name="9a85bb62fe3d877b18fb7f952c4fa7f7">
1981
1982#### Example Output
1983
1984~~~~
1985255 == paint.getAlpha()
1986~~~~
1987
1988</fiddle-embed></div>
1989
1990---
1991
Cary Clark493df1f2017-08-25 13:14:33 -04001992<a name="SkPaint_setAlpha"></a>
Cary Clark12799e12017-07-28 15:18:29 -04001993## setAlpha
1994
Cary Clarka560c472017-11-27 10:44:06 -05001995<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04001996void setAlpha(U8CPU a)
1997</pre>
1998
Cary Clark7cfcbca2018-01-04 16:11:51 -05001999Replaces <a href="#Alpha">Alpha</a>, leaving <a href="#RGB">Color RGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002000unchanged. An out of range value triggers an assert in the debug
Cary Clark8cc16c72017-08-25 11:51:49 -04002001build. <a href="#SkPaint_setAlpha_a">a</a> is <a href="#SkPaint_setAlpha_a">a</a> value from zero to 255.
2002<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 -04002003fully opaque.
2004
2005### Parameters
2006
Cary Clark8cc16c72017-08-25 11:51:49 -04002007<table> <tr> <td><a name="SkPaint_setAlpha_a"> <code><strong>a </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04002008<a href="#Alpha">Alpha</a> component of <a href="undocumented#Color">Color</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002009 </tr>
2010</table>
2011
2012### Example
2013
2014<div><fiddle-embed name="6ddc0360512dfb9947e75c17e6a8103d">
2015
2016#### Example Output
2017
2018~~~~
20190x44112233 == paint.getColor()
2020~~~~
2021
2022</fiddle-embed></div>
2023
2024---
2025
Cary Clark493df1f2017-08-25 13:14:33 -04002026<a name="SkPaint_setARGB"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002027## setARGB
2028
Cary Clarka560c472017-11-27 10:44:06 -05002029<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002030void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
2031</pre>
2032
Cary Clark4c06f5e2017-08-04 12:48:24 -04002033Sets <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 -04002034The 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 -04002035
2036### Parameters
2037
Cary Clark8cc16c72017-08-25 11:51:49 -04002038<table> <tr> <td><a name="SkPaint_setARGB_a"> <code><strong>a </strong></code> </a></td> <td>
2039amount of <a href="#Alpha">Color Alpha</a>, from fully transparent (0) to fully opaque (255)</td>
2040 </tr> <tr> <td><a name="SkPaint_setARGB_r"> <code><strong>r </strong></code> </a></td> <td>
2041amount of <a href="#RGB_Red">Color RGB Red</a>, from no red (0) to full red (255)</td>
2042 </tr> <tr> <td><a name="SkPaint_setARGB_g"> <code><strong>g </strong></code> </a></td> <td>
2043amount of <a href="#RGB_Green">Color RGB Green</a>, from no green (0) to full green (255)</td>
2044 </tr> <tr> <td><a name="SkPaint_setARGB_b"> <code><strong>b </strong></code> </a></td> <td>
2045amount 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 -04002046 </tr>
2047</table>
2048
2049### Example
2050
2051<div><fiddle-embed name="cb62e4755789ed32f7120dc55984959d">
2052
2053#### Example Output
2054
2055~~~~
2056transRed1 == transRed2
2057~~~~
2058
2059</fiddle-embed></div>
2060
2061### See Also
2062
Cary Clark8cc16c72017-08-25 11:51:49 -04002063<a href="#SkPaint_setColor">setColor</a> <a href="undocumented#SkColorSetARGB">SkColorSetARGB</a>
Cary Clark12799e12017-07-28 15:18:29 -04002064
2065---
2066
Cary Clark08895c42018-02-01 09:37:32 -05002067## <a name="Style"></a> Style
2068
Cary Clark8cc16c72017-08-25 11:51:49 -04002069<a href="#Style">Style</a> specifies if the geometry is filled, stroked, or both filled and stroked.
2070Some shapes ignore <a href="#Style">Style</a> and are always drawn filled or stroked.
Cary Clark12799e12017-07-28 15:18:29 -04002071
Cary Clark8cc16c72017-08-25 11:51:49 -04002072Set <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 -04002073The fill covers the area inside the geometry for most shapes.
2074
Cary Clark8cc16c72017-08-25 11:51:49 -04002075Set <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 -04002076
2077## <a name="Fill"></a> Fill
2078
2079### See Also
2080
Cary Clark8cc16c72017-08-25 11:51:49 -04002081<a href="#Fill_Type">Path Fill Type</a>
Cary Clark12799e12017-07-28 15:18:29 -04002082
2083## <a name="Stroke"></a> Stroke
2084
Cary Clarkbc5697d2017-10-04 14:31:33 -04002085The stroke covers the area described by following the shape edge with a pen or brush of
Cary Clark8cc16c72017-08-25 11:51:49 -04002086<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>.
2087The 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 -04002088The stroke is centered on the shape; it extends equally on either side of the shape edge.
Cary Clark12799e12017-07-28 15:18:29 -04002089
Cary Clark8cc16c72017-08-25 11:51:49 -04002090As <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
2091may 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 -04002092
2093## <a name="Hairline"></a> Hairline
2094
Cary Clark8cc16c72017-08-25 11:51:49 -04002095<a href="#Stroke_Width">Stroke Width</a> of zero has a special meaning and switches drawing to use <a href="#Hairline">Hairline</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002096<a href="#Hairline">Hairline</a> draws the thinnest continuous frame. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is clear, adjacent pixels
2097flow horizontally, vertically,or diagonally.
Cary Clark12799e12017-07-28 15:18:29 -04002098
Cary Clark8cc16c72017-08-25 11:51:49 -04002099<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
2100two lines in one <a href="#Contour">Path Contour</a> will draw the corner point once, but may both lines may draw the adjacent
2101pixel. If <a href="#SkPaint_kAntiAlias_Flag">kAntiAlias Flag</a> is set, transparency is applied twice, resulting in a darker pixel. Some
Cary Clark7cfcbca2018-01-04 16:11:51 -05002102GPU-backed implementations apply transparency at a later drawing stage, avoiding double hit pixels
Cary Clark12799e12017-07-28 15:18:29 -04002103while stroking.
2104
Cary Clark8cc16c72017-08-25 11:51:49 -04002105## <a name="SkPaint_Style"></a> Enum SkPaint::Style
Cary Clark12799e12017-07-28 15:18:29 -04002106
Cary Clarka560c472017-11-27 10:44:06 -05002107<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002108enum <a href="#SkPaint_Style">Style</a> {
2109<a href="#SkPaint_kFill_Style">kFill Style</a>,
2110<a href="#SkPaint_kStroke_Style">kStroke Style</a>,
2111<a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002112};</pre>
2113
Cary Clark8cc16c72017-08-25 11:51:49 -04002114Set <a href="#SkPaint_Style">Style</a> to fill, stroke, or both fill and stroke geometry.
Cary Clark12799e12017-07-28 15:18:29 -04002115The stroke and fill
2116share all paint attributes; for instance, they are drawn with the same color.
2117
Cary Clark8cc16c72017-08-25 11:51:49 -04002118Use <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 -04002119a fill draw.
2120
2121### Constants
2122
2123<table>
2124 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002125 <td><a name="SkPaint_kFill_Style"> <code><strong>SkPaint::kFill_Style </strong></code> </a></td><td>0</td><td>Set to fill geometry.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002126Applies to <a href="SkRect_Reference#Rect">Rect</a>, <a href="undocumented#Region">Region</a>, <a href="undocumented#Round_Rect">Round Rect</a>, <a href="#Circle">Circles</a>, <a href="#Oval">Ovals</a>, <a href="SkPath_Reference#Path">Path</a>, and <a href="undocumented#Text">Text</a>.
Cary Clarka560c472017-11-27 10:44:06 -05002127<a href="SkBitmap_Reference#Bitmap">Bitmap</a>, <a href="SkImage_Reference#Image">Image</a>, <a href="#Patch">Patches</a>, <a href="undocumented#Region">Region</a>, <a href="#Sprite">Sprites</a>, and <a href="undocumented#Vertices">Vertices</a> are painted as if
Cary Clark8cc16c72017-08-25 11:51:49 -04002128<a href="#SkPaint_kFill_Style">kFill Style</a> is set, and ignore the set <a href="#SkPaint_Style">Style</a>.
2129The <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 -04002130and to create an unfilled hole inside the shape.
Cary Clark8cc16c72017-08-25 11:51:49 -04002131<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 -04002132 </tr>
2133 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002134 <td><a name="SkPaint_kStroke_Style"> <code><strong>SkPaint::kStroke_Style </strong></code> </a></td><td>1</td><td>Set to stroke geometry.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002135Applies 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 -04002136<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 -04002137and ignore the set <a href="#SkPaint_Style">Style</a>.
2138The stroke construction is unaffected by the <a href="#Fill_Type">Path Fill Type</a>.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002139 </tr>
2140 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002141 <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 -04002142Applies 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 -04002143<a href="SkPath_Reference#Path">Path</a> is treated as if it is set to <a href="#SkPath_kWinding_FillType">SkPath::kWinding FillType</a>,
2144and the set <a href="#Fill_Type">Path Fill Type</a> is ignored.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002145 </tr>
2146
2147</table>
2148
Cary Clark8cc16c72017-08-25 11:51:49 -04002149## <a name="SkPaint__anonymous"></a> Enum SkPaint::_anonymous
Cary Clark12799e12017-07-28 15:18:29 -04002150
Cary Clarka560c472017-11-27 10:44:06 -05002151<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002152enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04002153<a href="#SkPaint_kStyleCount">kStyleCount</a> = <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a> + 1,
Cary Clark12799e12017-07-28 15:18:29 -04002154};</pre>
2155
2156### Constants
2157
2158<table>
2159 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002160 <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.
2161May be used to verify that <a href="#SkPaint_Style">Style</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002162 </tr>
2163
2164</table>
2165
Cary Clark493df1f2017-08-25 13:14:33 -04002166<a name="SkPaint_getStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002167## getStyle
2168
Cary Clarka560c472017-11-27 10:44:06 -05002169<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002170Style getStyle() const
2171</pre>
2172
2173Whether the geometry is filled, stroked, or filled and stroked.
2174
2175### Return Value
2176
Cary Clark8cc16c72017-08-25 11:51:49 -04002177one 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 -04002178
2179### Example
2180
2181<div><fiddle-embed name="1c5e18c3c0102d2dac86a78ba8c8ce01">
2182
2183#### Example Output
2184
2185~~~~
2186SkPaint::kFill_Style == paint.getStyle()
2187~~~~
2188
2189</fiddle-embed></div>
2190
2191### See Also
2192
Cary Clark8cc16c72017-08-25 11:51:49 -04002193<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_setStyle">setStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002194
2195---
2196
Cary Clark493df1f2017-08-25 13:14:33 -04002197<a name="SkPaint_setStyle"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002198## setStyle
2199
Cary Clarka560c472017-11-27 10:44:06 -05002200<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002201void setStyle(Style style)
2202</pre>
2203
2204Sets whether the geometry is filled, stroked, or filled and stroked.
Cary Clark8cc16c72017-08-25 11:51:49 -04002205Has 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 -04002206
2207### Parameters
2208
Cary Clark8cc16c72017-08-25 11:51:49 -04002209<table> <tr> <td><a name="SkPaint_setStyle_style"> <code><strong>style </strong></code> </a></td> <td>
2210one 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 -04002211 </tr>
2212</table>
2213
2214### Example
2215
2216<div><fiddle-embed name="c7bb6248e4735b8d1a32d02fba40d344"></fiddle-embed></div>
2217
2218### See Also
2219
Cary Clark8cc16c72017-08-25 11:51:49 -04002220<a href="#SkPaint_Style">Style</a> <a href="#SkPaint_getStyle">getStyle</a>
Cary Clark12799e12017-07-28 15:18:29 -04002221
2222---
2223
2224### See Also
2225
Cary Clark8cc16c72017-08-25 11:51:49 -04002226<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 -04002227
Cary Clark08895c42018-02-01 09:37:32 -05002228## <a name="Stroke_Width"></a> Stroke Width
2229
Cary Clark8cc16c72017-08-25 11:51:49 -04002230<a href="#Stroke_Width">Stroke Width</a> sets the width for stroking. The width is the thickness
Cary Clark7cfcbca2018-01-04 16:11:51 -05002231of the stroke perpendicular to the path direction when the paint style is
Cary Clark8cc16c72017-08-25 11:51:49 -04002232set 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 -04002233
2234When width is greater than zero, the stroke encompasses as many pixels partially
2235or fully as needed. When the width equals zero, the paint enables hairlines;
Cary Clark7cfcbca2018-01-04 16:11:51 -05002236the stroke is always one pixel wide.
Cary Clark12799e12017-07-28 15:18:29 -04002237
Cary Clarkbc5697d2017-10-04 14:31:33 -04002238The stroke dimensions are scaled by the canvas matrix, but <a href="#Hairline">Hairline</a> stroke
Cary Clark12799e12017-07-28 15:18:29 -04002239remains one pixel wide regardless of scaling.
2240
2241The default width for the paint is zero.
2242
2243### Example
2244
Cary Clark7cfcbca2018-01-04 16:11:51 -05002245<div><fiddle-embed name="01e3e08a3022a351628ff54e84887756" gpu="true"><div>The pixels hit to represent thin lines vary with the angle of the
Cary Clarkbc5697d2017-10-04 14:31:33 -04002246line and the platform implementation.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002247
Cary Clark493df1f2017-08-25 13:14:33 -04002248<a name="SkPaint_getStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002249## getStrokeWidth
2250
Cary Clarka560c472017-11-27 10:44:06 -05002251<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002252SkScalar getStrokeWidth() const
2253</pre>
2254
Cary Clark8cc16c72017-08-25 11:51:49 -04002255Returns the thickness of the pen used by <a href="#Paint">Paint</a> to
Cary Clark12799e12017-07-28 15:18:29 -04002256outline the shape.
2257
2258### Return Value
2259
Cary Clark8cc16c72017-08-25 11:51:49 -04002260zero for <a href="#Hairline">Hairline</a>, greater than zero for pen thickness
Cary Clark12799e12017-07-28 15:18:29 -04002261
2262### Example
2263
2264<div><fiddle-embed name="99aa73f64df8bbf06e656cd891a81b9e">
2265
2266#### Example Output
2267
2268~~~~
22690 == paint.getStrokeWidth()
2270~~~~
2271
2272</fiddle-embed></div>
2273
2274---
2275
Cary Clark493df1f2017-08-25 13:14:33 -04002276<a name="SkPaint_setStrokeWidth"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002277## setStrokeWidth
2278
Cary Clarka560c472017-11-27 10:44:06 -05002279<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002280void setStrokeWidth(SkScalar width)
2281</pre>
2282
2283Sets the thickness of the pen used by the paint to
Cary Clark7cfcbca2018-01-04 16:11:51 -05002284outline the shape.
2285Has no effect if <a href="#SkPaint_setStrokeWidth_width">width</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002286
2287### Parameters
2288
Cary Clark8cc16c72017-08-25 11:51:49 -04002289<table> <tr> <td><a name="SkPaint_setStrokeWidth_width"> <code><strong>width </strong></code> </a></td> <td>
2290zero thickness for <a href="#Hairline">Hairline</a>; greater than zero for pen thickness</td>
Cary Clark12799e12017-07-28 15:18:29 -04002291 </tr>
2292</table>
2293
2294### Example
2295
2296<div><fiddle-embed name="0c4446c0870b5c7b5a2efe77ff92afb8">
2297
2298#### Example Output
2299
2300~~~~
23015 == paint.getStrokeWidth()
2302~~~~
2303
2304</fiddle-embed></div>
2305
2306---
2307
Cary Clark08895c42018-02-01 09:37:32 -05002308## <a name="Miter_Limit"></a> Miter Limit
2309
Cary Clark8cc16c72017-08-25 11:51:49 -04002310<a href="#Miter_Limit">Miter Limit</a> specifies the maximum miter length,
Cary Clark12799e12017-07-28 15:18:29 -04002311relative to the stroke width.
2312
Cary Clark8cc16c72017-08-25 11:51:49 -04002313<a href="#Miter_Limit">Miter Limit</a> is used when the <a href="#Stroke_Join">Stroke Join</a>
2314is 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>
2315or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002316
Cary Clark8cc16c72017-08-25 11:51:49 -04002317If the miter at a corner exceeds this limit, <a href="#SkPaint_kMiter_Join">kMiter Join</a>
2318is replaced with <a href="#SkPaint_kBevel_Join">kBevel Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002319
Cary Clark8cc16c72017-08-25 11:51:49 -04002320<a href="#Miter_Limit">Miter Limit</a> can be computed from the corner angle:
Cary Clark12799e12017-07-28 15:18:29 -04002321
Cary Clark8cc16c72017-08-25 11:51:49 -04002322miter limit = 1 / sin ( angle / 2 )<a href="#Miter_Limit">Miter Limit</a> default value is 4.
Cary Clark4c06f5e2017-08-04 12:48:24 -04002323The default may be changed at compile time by setting <a href="undocumented#SkPaintDefaults_MiterLimit">SkPaintDefaults MiterLimit</a>
Cary Clark7cfcbca2018-01-04 16:11:51 -05002324in "SkUserConfig.h" or as a define supplied by the build environment.
Cary Clark12799e12017-07-28 15:18:29 -04002325
2326Here are some miter limits and the angles that triggers them.
2327
2328| miter limit | angle in degrees |
2329| --- | --- |
2330| 10 | 11.48 |
2331| 9 | 12.76 |
2332| 8 | 14.36 |
2333| 7 | 16.43 |
2334| 6 | 19.19 |
2335| 5 | 23.07 |
2336| 4 | 28.96 |
2337| 3 | 38.94 |
2338| 2 | 60 |
2339| 1 | 180 |
2340
2341### Example
2342
2343<div><fiddle-embed name="5de2de0f00354e59074a9bb1a42d5a63"><div>This example draws a stroked corner and the miter length beneath.
2344When the miter limit is decreased slightly, the miter join is replaced
2345by a bevel join.</div></fiddle-embed></div>
2346
Cary Clark493df1f2017-08-25 13:14:33 -04002347<a name="SkPaint_getStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002348## getStrokeMiter
2349
Cary Clarka560c472017-11-27 10:44:06 -05002350<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002351SkScalar getStrokeMiter() const
2352</pre>
2353
2354The limit at which a sharp corner is drawn beveled.
2355
2356### Return Value
2357
Cary Clark8cc16c72017-08-25 11:51:49 -04002358zero and greater <a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002359
2360### Example
2361
2362<div><fiddle-embed name="50da74a43b725f07a914df588c867d36">
2363
2364#### Example Output
2365
2366~~~~
2367default miter limit == 4
2368~~~~
2369
2370</fiddle-embed></div>
2371
2372### See Also
2373
Cary Clark8cc16c72017-08-25 11:51:49 -04002374<a href="#Miter_Limit">Miter Limit</a> <a href="#SkPaint_setStrokeMiter">setStrokeMiter</a> <a href="#SkPaint_Join">Join</a>
Cary Clark12799e12017-07-28 15:18:29 -04002375
2376---
2377
Cary Clark493df1f2017-08-25 13:14:33 -04002378<a name="SkPaint_setStrokeMiter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002379## setStrokeMiter
2380
Cary Clarka560c472017-11-27 10:44:06 -05002381<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002382void setStrokeMiter(SkScalar miter)
2383</pre>
2384
2385The limit at which a sharp corner is drawn beveled.
2386Valid values are zero and greater.
Cary Clark8cc16c72017-08-25 11:51:49 -04002387Has no effect if <a href="#SkPaint_setStrokeMiter_miter">miter</a> is less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04002388
2389### Parameters
2390
Cary Clark8cc16c72017-08-25 11:51:49 -04002391<table> <tr> <td><a name="SkPaint_setStrokeMiter_miter"> <code><strong>miter </strong></code> </a></td> <td>
2392zero and greater <a href="#Miter_Limit">Miter Limit</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04002393 </tr>
2394</table>
2395
2396### Example
2397
2398<div><fiddle-embed name="700b284dbc97785c6a9c9636088713ad">
2399
2400#### Example Output
2401
2402~~~~
2403default miter limit == 8
2404~~~~
2405
2406</fiddle-embed></div>
2407
2408### See Also
2409
Cary Clark8cc16c72017-08-25 11:51:49 -04002410<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 -04002411
2412---
2413
Cary Clark08895c42018-02-01 09:37:32 -05002414## <a name="Stroke_Cap"></a> Stroke Cap
Cary Clark12799e12017-07-28 15:18:29 -04002415
Cary Clark8cc16c72017-08-25 11:51:49 -04002416## <a name="SkPaint_Cap"></a> Enum SkPaint::Cap
Cary Clark12799e12017-07-28 15:18:29 -04002417
Cary Clarka560c472017-11-27 10:44:06 -05002418<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002419enum <a href="#SkPaint_Cap">Cap</a> {
2420<a href="#SkPaint_kButt_Cap">kButt Cap</a>,
2421<a href="#SkPaint_kRound_Cap">kRound Cap</a>,
2422<a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002423
Cary Clark8cc16c72017-08-25 11:51:49 -04002424<a href="#SkPaint_kLast_Cap">kLast Cap</a> = <a href="#SkPaint_kSquare_Cap">kSquare Cap</a>,
2425<a href="#SkPaint_kDefault_Cap">kDefault Cap</a> = <a href="#SkPaint_kButt_Cap">kButt Cap</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002426};
Cary Clark6fc50412017-09-21 12:31:06 -04002427
Cary Clark8cc16c72017-08-25 11:51:49 -04002428static 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 -04002429
Cary Clark8cc16c72017-08-25 11:51:49 -04002430<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 -04002431
2432### Constants
2433
2434<table>
2435 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002436 <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 -04002437 </tr>
2438 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002439 <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 -04002440and end.</td>
2441 </tr>
2442 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002443 <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 -04002444and end. The square sides are parallel to the initial and final direction
2445of the stroke.</td>
2446 </tr>
2447 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002448 <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 -04002449 </tr>
2450 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002451 <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>.
2452<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 -04002453 </tr>
2454 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002455 <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.
2456May be used to verify that <a href="#Stroke_Cap">Stroke Cap</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002457 </tr>
2458
Cary Clark7cfcbca2018-01-04 16:11:51 -05002459Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002460follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002461
Cary Clark8cc16c72017-08-25 11:51:49 -04002462If 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 -04002463visible beginning and end.
2464
Cary Clark8cc16c72017-08-25 11:51:49 -04002465<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 -04002466
Cary Clark8cc16c72017-08-25 11:51:49 -04002467<a href="#SkPaint_kButt_Cap">kButt Cap</a> and <a href="SkPath_Reference#Zero_Length">Zero Length Contour</a> is not drawn.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002468<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 -04002469at the contour point.
Cary Clark8cc16c72017-08-25 11:51:49 -04002470<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
2471<a href="#Stroke_Width">Stroke Width</a> at the contour point.
Cary Clark12799e12017-07-28 15:18:29 -04002472
Cary Clark8cc16c72017-08-25 11:51:49 -04002473<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 -04002474
2475</table>
2476
2477### Example
2478
Cary Clark2ade9972017-11-02 17:49:34 -04002479<div><fiddle-embed name="2bffb6384cc20077e632e7d01da045ca"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002480
Cary Clark493df1f2017-08-25 13:14:33 -04002481<a name="SkPaint_getStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002482## getStrokeCap
2483
Cary Clarka560c472017-11-27 10:44:06 -05002484<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002485Cap getStrokeCap() const
2486</pre>
2487
2488The geometry drawn at the beginning and end of strokes.
2489
2490### Return Value
2491
Cary Clark8cc16c72017-08-25 11:51:49 -04002492one 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 -04002493
2494### Example
2495
2496<div><fiddle-embed name="aabf9baee8e026fae36fca30e955512b">
2497
2498#### Example Output
2499
2500~~~~
2501kButt_Cap == default stroke cap
2502~~~~
2503
2504</fiddle-embed></div>
2505
2506### See Also
2507
Cary Clark8cc16c72017-08-25 11:51:49 -04002508<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_setStrokeCap">setStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002509
2510---
2511
Cary Clark493df1f2017-08-25 13:14:33 -04002512<a name="SkPaint_setStrokeCap"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002513## setStrokeCap
2514
Cary Clarka560c472017-11-27 10:44:06 -05002515<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002516void setStrokeCap(Cap cap)
2517</pre>
2518
2519The geometry drawn at the beginning and end of strokes.
2520
2521### Parameters
2522
Cary Clark8cc16c72017-08-25 11:51:49 -04002523<table> <tr> <td><a name="SkPaint_setStrokeCap_cap"> <code><strong>cap </strong></code> </a></td> <td>
2524one 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>;
2525has no effect if <a href="#SkPaint_setStrokeCap_cap">cap</a> is not valid</td>
Cary Clark12799e12017-07-28 15:18:29 -04002526 </tr>
2527</table>
2528
2529### Example
2530
2531<div><fiddle-embed name="de83fbd848a4625345b4b87a6e55d98a">
2532
2533#### Example Output
2534
2535~~~~
2536kRound_Cap == paint.getStrokeCap()
2537~~~~
2538
2539</fiddle-embed></div>
2540
2541### See Also
2542
Cary Clark8cc16c72017-08-25 11:51:49 -04002543<a href="#Stroke_Cap">Stroke Cap</a> <a href="#SkPaint_getStrokeCap">getStrokeCap</a>
Cary Clark12799e12017-07-28 15:18:29 -04002544
2545---
2546
Cary Clark08895c42018-02-01 09:37:32 -05002547## <a name="Stroke_Join"></a> Stroke Join
2548
Cary Clark8cc16c72017-08-25 11:51:49 -04002549<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 -04002550
Cary Clark7cfcbca2018-01-04 16:11:51 -05002551Stroke describes the area covered by a pen of <a href="#Stroke_Width">Stroke Width</a> as it
Cary Clarkbc5697d2017-10-04 14:31:33 -04002552follows the <a href="#Contour">Path Contour</a>, moving parallel to the contour direction.
Cary Clark12799e12017-07-28 15:18:29 -04002553
2554If the contour direction changes abruptly, because the tangent direction leading
2555to the end of a curve within the contour does not match the tangent direction of
Cary Clark8cc16c72017-08-25 11:51:49 -04002556the following curve, the pair of curves meet at <a href="#Stroke_Join">Stroke Join</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002557
2558### Example
2559
Cary Clark2ade9972017-11-02 17:49:34 -04002560<div><fiddle-embed name="917c44b504d3f9308571fd3835d90a0d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04002561
Cary Clark8cc16c72017-08-25 11:51:49 -04002562## <a name="SkPaint_Join"></a> Enum SkPaint::Join
Cary Clark12799e12017-07-28 15:18:29 -04002563
Cary Clarka560c472017-11-27 10:44:06 -05002564<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04002565enum <a href="#SkPaint_Join">Join</a> {
2566<a href="#SkPaint_kMiter_Join">kMiter Join</a>,
2567<a href="#SkPaint_kRound_Join">kRound Join</a>,
2568<a href="#SkPaint_kBevel_Join">kBevel Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002569
Cary Clark8cc16c72017-08-25 11:51:49 -04002570<a href="#SkPaint_kLast_Join">kLast Join</a> = <a href="#SkPaint_kBevel_Join">kBevel Join</a>,
2571<a href="#SkPaint_kDefault_Join">kDefault Join</a> = <a href="#SkPaint_kMiter_Join">kMiter Join</a>,
Cary Clark12799e12017-07-28 15:18:29 -04002572};
Cary Clark6fc50412017-09-21 12:31:06 -04002573
Cary Clark8cc16c72017-08-25 11:51:49 -04002574static 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 -04002575
Cary Clark8cc16c72017-08-25 11:51:49 -04002576<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 -04002577affects the four corners of a stroked rectangle, and the connected segments in a
2578stroked path.
2579
2580Choose miter join to draw sharp corners. Choose round join to draw a circle with a
2581radius equal to the stroke width on top of the corner. Choose bevel join to minimally
2582connect the thick strokes.
2583
Cary Clark7cfcbca2018-01-04 16:11:51 -05002584The fill path constructed to describe the stroked path respects the join setting but may
Cary Clark12799e12017-07-28 15:18:29 -04002585not contain the actual join. For instance, a fill path constructed with round joins does
2586not necessarily include circles at each connected segment.
2587
2588### Constants
2589
2590<table>
2591 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002592 <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>.
2593If 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 -04002594 </tr>
2595 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002596 <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 -04002597 </tr>
2598 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002599 <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 -04002600 </tr>
2601 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002602 <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 -04002603 </tr>
2604 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002605 <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>.
2606<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 -04002607 </tr>
2608 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04002609 <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.
2610May be used to verify that <a href="#Stroke_Join">Stroke Join</a> is a legal value.</td>
Cary Clark12799e12017-07-28 15:18:29 -04002611 </tr>
2612</table>
2613
2614### Example
2615
2616<div><fiddle-embed name="3b1aebacc21c1836a52876b9b0b3905e"></fiddle-embed></div>
2617
2618### See Also
2619
Cary Clark8cc16c72017-08-25 11:51:49 -04002620<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 -04002621
2622
2623
Cary Clark493df1f2017-08-25 13:14:33 -04002624<a name="SkPaint_getStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002625## getStrokeJoin
2626
Cary Clarka560c472017-11-27 10:44:06 -05002627<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002628Join getStrokeJoin() const
2629</pre>
2630
Cary Clark0c5f5462017-12-15 11:21:51 -05002631The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002632
2633### Return Value
2634
Cary Clark8cc16c72017-08-25 11:51:49 -04002635one 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 -04002636
2637### Example
2638
2639<div><fiddle-embed name="31bf751d0a8ddf176b871810820d8199">
2640
2641#### Example Output
2642
2643~~~~
2644kMiter_Join == default stroke join
2645~~~~
2646
2647</fiddle-embed></div>
2648
2649### See Also
2650
Cary Clark8cc16c72017-08-25 11:51:49 -04002651<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_setStrokeJoin">setStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002652
2653---
2654
Cary Clark493df1f2017-08-25 13:14:33 -04002655<a name="SkPaint_setStrokeJoin"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002656## setStrokeJoin
2657
Cary Clarka560c472017-11-27 10:44:06 -05002658<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002659void setStrokeJoin(Join join)
2660</pre>
2661
Cary Clark0c5f5462017-12-15 11:21:51 -05002662The geometry drawn at the corners of strokes.
Cary Clark12799e12017-07-28 15:18:29 -04002663
2664### Parameters
2665
Cary Clark8cc16c72017-08-25 11:51:49 -04002666<table> <tr> <td><a name="SkPaint_setStrokeJoin_join"> <code><strong>join </strong></code> </a></td> <td>
2667one 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 -04002668otherwise, has no effect</td>
Cary Clark12799e12017-07-28 15:18:29 -04002669 </tr>
2670</table>
2671
2672### Example
2673
2674<div><fiddle-embed name="48d963ad4286eddf680f9c511eb6da91">
2675
2676#### Example Output
2677
2678~~~~
2679kMiter_Join == paint.getStrokeJoin()
2680~~~~
2681
2682</fiddle-embed></div>
2683
2684### See Also
2685
Cary Clark8cc16c72017-08-25 11:51:49 -04002686<a href="#Stroke_Join">Stroke Join</a> <a href="#SkPaint_getStrokeJoin">getStrokeJoin</a>
Cary Clark12799e12017-07-28 15:18:29 -04002687
2688---
2689
2690### See Also
2691
Cary Clark8cc16c72017-08-25 11:51:49 -04002692<a href="#Miter_Limit">Miter Limit</a>
Cary Clark12799e12017-07-28 15:18:29 -04002693
Cary Clark08895c42018-02-01 09:37:32 -05002694## <a name="Fill_Path"></a> Fill Path
2695
Cary Clark8cc16c72017-08-25 11:51:49 -04002696<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 -04002697
Cary Clark8cc16c72017-08-25 11:51:49 -04002698If <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 -04002699replaces the destination <a href="SkPath_Reference#Path">Path</a>. Otherwise, the source <a href="SkPath_Reference#Path">Path</a> is replaces the
2700destination <a href="SkPath_Reference#Path">Path</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002701
Cary Clark4c06f5e2017-08-04 12:48:24 -04002702Fill <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
2703the <a href="undocumented#Path_Effect">Path Effect</a> is not required to do so.
Cary Clark12799e12017-07-28 15:18:29 -04002704
Cary Clark7cfcbca2018-01-04 16:11:51 -05002705If <a href="#SkPaint_Style">Style</a> is <a href="#SkPaint_kStroke_Style">kStroke Style</a> or <a href="#SkPaint_kStrokeAndFill_Style">kStrokeAndFill Style</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04002706and <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>,
2707and <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 -04002708
Cary Clark7cfcbca2018-01-04 16:11:51 -05002709Fill <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 -04002710
Cary Clark8cc16c72017-08-25 11:51:49 -04002711If 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>
2712returns false since <a href="#Hairline">Hairline</a> has no filled equivalent.
Cary Clark12799e12017-07-28 15:18:29 -04002713
Cary Clark493df1f2017-08-25 13:14:33 -04002714<a name="SkPaint_getFillPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002715## getFillPath
2716
Cary Clarka560c472017-11-27 10:44:06 -05002717<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
2718bool getFillPath(const SkPath& src, SkPath* dst, const SkRect* cullRect, SkScalar resScale = 1) const
Cary Clark12799e12017-07-28 15:18:29 -04002719</pre>
2720
2721The filled equivalent of the stroked path.
2722
2723### Parameters
2724
Cary Clark8cc16c72017-08-25 11:51:49 -04002725<table> <tr> <td><a name="SkPaint_getFillPath_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002726<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002727 </tr> <tr> <td><a name="SkPaint_getFillPath_dst"> <code><strong>dst </strong></code> </a></td> <td>
2728resulting <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>
2729 </tr> <tr> <td><a name="SkPaint_getFillPath_cullRect"> <code><strong>cullRect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002730optional limit passed to <a href="undocumented#Path_Effect">Path Effect</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002731 </tr> <tr> <td><a name="SkPaint_getFillPath_resScale"> <code><strong>resScale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04002732if > 1, increase precision, else if (0 < res < 1) reduce precision
2733to favor speed and size</td>
2734 </tr>
2735</table>
2736
2737### Return Value
2738
Cary Clark8cc16c72017-08-25 11:51:49 -04002739true 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 -04002740
2741### Example
2742
Cary Clarkce101242017-09-01 15:51:02 -04002743<div><fiddle-embed name="cedd6233848198e1fca4d1e14816baaf"><div>A very small <a href="#Quad">Quad</a> stroke is turned into a filled path with increasing levels of precision.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002744At the lowest precision, the <a href="#Quad">Quad</a> stroke is approximated by a rectangle.
Cary Clark12799e12017-07-28 15:18:29 -04002745At the highest precision, the filled path has high fidelity compared to the original stroke.</div></fiddle-embed></div>
2746
2747---
2748
Cary Clark2dc84ad2018-01-26 12:56:22 -05002749<a name="SkPaint_getFillPath_2"></a>
2750
Cary Clarka560c472017-11-27 10:44:06 -05002751<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002752bool getFillPath(const SkPath& src, SkPath* dst) const
2753</pre>
2754
2755The filled equivalent of the stroked path.
2756
Cary Clark8cc16c72017-08-25 11:51:49 -04002757Replaces <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>.
2758<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 -04002759
2760### Parameters
2761
Cary Clark8cc16c72017-08-25 11:51:49 -04002762<table> <tr> <td><a name="SkPaint_getFillPath_2_src"> <code><strong>src </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002763<a href="SkPath_Reference#Path">Path</a> read to create a filled version</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04002764 </tr> <tr> <td><a name="SkPaint_getFillPath_2_dst"> <code><strong>dst </strong></code> </a></td> <td>
2765resulting <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 -04002766 </tr>
2767</table>
2768
2769### Return Value
2770
Cary Clark8cc16c72017-08-25 11:51:49 -04002771true 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 -04002772
2773### Example
2774
2775<div><fiddle-embed name="e6d8ca0cc17e0b475bd54dd995825468"></fiddle-embed></div>
2776
2777---
2778
2779### See Also
2780
Cary Clark8cc16c72017-08-25 11:51:49 -04002781<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 -04002782
Cary Clark08895c42018-02-01 09:37:32 -05002783## <a name="Shader_Methods"></a> Shader Methods
2784
Cary Clark4c06f5e2017-08-04 12:48:24 -04002785<a href="undocumented#Shader">Shader</a> defines the colors used when drawing a shape.
2786<a href="undocumented#Shader">Shader</a> may be an image, a gradient, or a computed fill.
Cary Clark7cfcbca2018-01-04 16:11:51 -05002787If <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 -04002788
Cary Clark8cc16c72017-08-25 11:51:49 -04002789<a href="undocumented#Shader">Shader</a> is modulated by <a href="#Alpha">Color Alpha</a> component of <a href="undocumented#Color">Color</a>.
2790If <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 -04002791the fill.
2792
Cary Clark8cc16c72017-08-25 11:51:49 -04002793The 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 -04002794
2795### Example
2796
2797<div><fiddle-embed name="c015dc2010c15e1c00b4f7330232b0f7"></fiddle-embed></div>
2798
Cary Clark8cc16c72017-08-25 11:51:49 -04002799If <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 -04002800
2801### Example
2802
2803<div><fiddle-embed name="9673be7720ba3adcdae42ddc1565b588"></fiddle-embed></div>
2804
Cary Clark493df1f2017-08-25 13:14:33 -04002805<a name="SkPaint_getShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002806## getShader
2807
Cary Clarka560c472017-11-27 10:44:06 -05002808<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002809SkShader* getShader() const
2810</pre>
2811
2812Optional colors used when filling a path, such as a gradient.
2813
Cary Clark4c06f5e2017-08-04 12:48:24 -04002814Does not alter <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a>.
Cary Clark12799e12017-07-28 15:18:29 -04002815
2816### Return Value
2817
Cary Clark4c06f5e2017-08-04 12:48:24 -04002818<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002819
2820### Example
2821
2822<div><fiddle-embed name="09f15b9fd88882850da2d235eb86292f">
2823
2824#### Example Output
2825
2826~~~~
2827nullptr == shader
2828nullptr != shader
2829~~~~
2830
2831</fiddle-embed></div>
2832
2833---
2834
Cary Clark493df1f2017-08-25 13:14:33 -04002835<a name="SkPaint_refShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002836## refShader
2837
Cary Clarka560c472017-11-27 10:44:06 -05002838<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002839sk_sp&lt;SkShader&gt; refShader() const
Cary Clark12799e12017-07-28 15:18:29 -04002840</pre>
2841
2842Optional colors used when filling a path, such as a gradient.
2843
Cary Clark4c06f5e2017-08-04 12:48:24 -04002844Increases <a href="undocumented#Shader">Shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002845
2846### Return Value
2847
Cary Clark4c06f5e2017-08-04 12:48:24 -04002848<a href="undocumented#Shader">Shader</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002849
2850### Example
2851
2852<div><fiddle-embed name="53da0295972a418cbc9607bbb17feaa8">
2853
2854#### Example Output
2855
2856~~~~
2857shader unique: true
2858shader unique: false
2859~~~~
2860
2861</fiddle-embed></div>
2862
2863---
2864
Cary Clark493df1f2017-08-25 13:14:33 -04002865<a name="SkPaint_setShader"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002866## setShader
2867
Cary Clarka560c472017-11-27 10:44:06 -05002868<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002869void setShader(sk_sp&lt;SkShader&gt; shader)
Cary Clark12799e12017-07-28 15:18:29 -04002870</pre>
2871
2872Optional colors used when filling a path, such as a gradient.
2873
Cary Clarkd0530ba2017-09-14 11:25:39 -04002874Sets <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 -04002875Increments <a href="#SkPaint_setShader_shader">shader</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002876
2877### Parameters
2878
Cary Clark8cc16c72017-08-25 11:51:49 -04002879<table> <tr> <td><a name="SkPaint_setShader_shader"> <code><strong>shader </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002880how geometry is filled with color; if nullptr, <a href="undocumented#Color">Color</a> is used instead</td>
Cary Clark12799e12017-07-28 15:18:29 -04002881 </tr>
2882</table>
2883
2884### Example
2885
2886<div><fiddle-embed name="77e64d5bae9b1ba037fd99252bb4aa58"></fiddle-embed></div>
2887
2888---
2889
Cary Clark08895c42018-02-01 09:37:32 -05002890## <a name="Color_Filter_Methods"></a> Color Filter Methods
2891
Cary Clark4c06f5e2017-08-04 12:48:24 -04002892<a href="undocumented#Color_Filter">Color Filter</a> alters the color used when drawing a shape.
2893<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 -04002894If <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 -04002895
Cary Clark8cc16c72017-08-25 11:51:49 -04002896The 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 -04002897
2898### Example
2899
2900<div><fiddle-embed name="5abde56ca2f89a18b8e231abd1b57c56"></fiddle-embed></div>
2901
Cary Clark493df1f2017-08-25 13:14:33 -04002902<a name="SkPaint_getColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002903## getColorFilter
2904
Cary Clarka560c472017-11-27 10:44:06 -05002905<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04002906SkColorFilter* getColorFilter() const
2907</pre>
2908
Cary Clark4c06f5e2017-08-04 12:48:24 -04002909Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2910Does 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 -04002911
2912### Return Value
2913
Cary Clark4c06f5e2017-08-04 12:48:24 -04002914<a href="undocumented#Color_Filter">Color Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04002915
2916### Example
2917
2918<div><fiddle-embed name="093bdc627d6b59002670fd290931f6c9">
2919
2920#### Example Output
2921
2922~~~~
2923nullptr == color filter
2924nullptr != color filter
2925~~~~
2926
2927</fiddle-embed></div>
2928
2929---
2930
Cary Clark493df1f2017-08-25 13:14:33 -04002931<a name="SkPaint_refColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002932## refColorFilter
2933
Cary Clarka560c472017-11-27 10:44:06 -05002934<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002935sk_sp&lt;SkColorFilter&gt; refColorFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04002936</pre>
2937
Cary Clark4c06f5e2017-08-04 12:48:24 -04002938Returns <a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr.
2939Increases <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 -04002940
2941### Return Value
2942
Cary Clark4c06f5e2017-08-04 12:48:24 -04002943<a href="undocumented#Color_Filter">Color Filter</a> if set, or nullptr
Cary Clark12799e12017-07-28 15:18:29 -04002944
2945### Example
2946
2947<div><fiddle-embed name="b588c95fa4c86ddbc4b0546762f08297">
2948
2949#### Example Output
2950
2951~~~~
2952color filter unique: true
2953color filter unique: false
2954~~~~
2955
2956</fiddle-embed></div>
2957
2958---
2959
Cary Clark493df1f2017-08-25 13:14:33 -04002960<a name="SkPaint_setColorFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04002961## setColorFilter
2962
Cary Clarka560c472017-11-27 10:44:06 -05002963<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04002964void setColorFilter(sk_sp&lt;SkColorFilter&gt; colorFilter)
Cary Clark12799e12017-07-28 15:18:29 -04002965</pre>
2966
Cary Clark6fc50412017-09-21 12:31:06 -04002967Sets <a href="undocumented#Color_Filter">Color Filter</a> to filter, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous
2968<a href="undocumented#Color_Filter">Color Filter</a>. Pass nullptr to clear <a href="undocumented#Color_Filter">Color Filter</a>.
2969
2970Increments filter <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04002971
2972### Parameters
2973
Cary Clark8cc16c72017-08-25 11:51:49 -04002974<table> <tr> <td><a name="SkPaint_setColorFilter_colorFilter"> <code><strong>colorFilter </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04002975<a href="undocumented#Color_Filter">Color Filter</a> to apply to subsequent draw</td>
Cary Clark12799e12017-07-28 15:18:29 -04002976 </tr>
2977</table>
2978
2979### Example
2980
2981<div><fiddle-embed name="c7b786dc9b3501cd0eaba47494b6fa31"></fiddle-embed></div>
2982
2983---
2984
Cary Clark08895c42018-02-01 09:37:32 -05002985## <a name="Blend_Mode_Methods"></a> Blend Mode Methods
2986
Cary Clark4c06f5e2017-08-04 12:48:24 -04002987<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 -04002988The default setting, <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>, draws the source color
Cary Clark12799e12017-07-28 15:18:29 -04002989over the destination color.
2990
2991### Example
2992
2993<div><fiddle-embed name="73092d4d06faecea3c204d852a4dd8a8"></fiddle-embed></div>
2994
2995### See Also
2996
Cary Clark4c06f5e2017-08-04 12:48:24 -04002997<a href="undocumented#Blend_Mode">Blend Mode</a>
Cary Clark12799e12017-07-28 15:18:29 -04002998
Cary Clark493df1f2017-08-25 13:14:33 -04002999<a name="SkPaint_getBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003000## getBlendMode
3001
Cary Clarka560c472017-11-27 10:44:06 -05003002<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003003SkBlendMode getBlendMode() const
3004</pre>
3005
Cary Clark4c06f5e2017-08-04 12:48:24 -04003006Returns <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003007By default, returns <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003008
3009### Return Value
3010
3011mode used to combine source color with destination color
3012
3013### Example
3014
3015<div><fiddle-embed name="4ec1864b8203d52c0810e8605092f45c">
3016
3017#### Example Output
3018
3019~~~~
3020kSrcOver == getBlendMode
3021kSrcOver != getBlendMode
3022~~~~
3023
3024</fiddle-embed></div>
3025
3026---
3027
Cary Clark493df1f2017-08-25 13:14:33 -04003028<a name="SkPaint_isSrcOver"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003029## isSrcOver
3030
Cary Clarka560c472017-11-27 10:44:06 -05003031<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003032bool isSrcOver() const
3033</pre>
3034
Cary Clark8cc16c72017-08-25 11:51:49 -04003035Returns 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 -04003036
3037### Return Value
3038
Cary Clark8cc16c72017-08-25 11:51:49 -04003039true if <a href="undocumented#Blend_Mode">Blend Mode</a> is <a href="#SkBlendMode_kSrcOver">SkBlendMode::kSrcOver</a>
Cary Clark12799e12017-07-28 15:18:29 -04003040
3041### Example
3042
3043<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3044
3045#### Example Output
3046
3047~~~~
3048isSrcOver == true
3049isSrcOver != true
3050~~~~
3051
3052</fiddle-embed></div>
3053
3054---
3055
Cary Clark493df1f2017-08-25 13:14:33 -04003056<a name="SkPaint_setBlendMode"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003057## setBlendMode
3058
Cary Clarka560c472017-11-27 10:44:06 -05003059<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003060void setBlendMode(SkBlendMode mode)
3061</pre>
3062
Cary Clark7cfcbca2018-01-04 16:11:51 -05003063Sets <a href="undocumented#Blend_Mode">Blend Mode</a> to <a href="#SkPaint_setBlendMode_mode">mode</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003064Does not check for valid input.
3065
3066### Parameters
3067
Cary Clark8cc16c72017-08-25 11:51:49 -04003068<table> <tr> <td><a name="SkPaint_setBlendMode_mode"> <code><strong>mode </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003069<a href="undocumented#SkBlendMode">SkBlendMode</a> used to combine source color and destination</td>
Cary Clark12799e12017-07-28 15:18:29 -04003070 </tr>
3071</table>
3072
3073### Example
3074
3075<div><fiddle-embed name="257c9473db7a2b3a0fb2b9e2431e59a6">
3076
3077#### Example Output
3078
3079~~~~
3080isSrcOver == true
3081isSrcOver != true
3082~~~~
3083
3084</fiddle-embed></div>
3085
3086---
3087
Cary Clark08895c42018-02-01 09:37:32 -05003088## <a name="Path_Effect_Methods"></a> Path Effect Methods
3089
Cary Clark4c06f5e2017-08-04 12:48:24 -04003090<a href="undocumented#Path_Effect">Path Effect</a> modifies the path geometry before drawing it.
3091<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 -04003092If <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 -04003093
3094### Example
3095
3096<div><fiddle-embed name="8cf5684b187d60f09e11c4a48993ea39"></fiddle-embed></div>
3097
3098### See Also
3099
Cary Clark4c06f5e2017-08-04 12:48:24 -04003100<a href="undocumented#Path_Effect">Path Effect</a>
Cary Clark12799e12017-07-28 15:18:29 -04003101
Cary Clark493df1f2017-08-25 13:14:33 -04003102<a name="SkPaint_getPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003103## getPathEffect
3104
Cary Clarka560c472017-11-27 10:44:06 -05003105<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003106SkPathEffect* getPathEffect() const
3107</pre>
3108
Cary Clark4c06f5e2017-08-04 12:48:24 -04003109Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3110Does 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 -04003111
3112### Return Value
3113
Cary Clark4c06f5e2017-08-04 12:48:24 -04003114<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003115
3116### Example
3117
3118<div><fiddle-embed name="211a1b14bfa6c4332082c8eab4fbc5fd">
3119
3120#### Example Output
3121
3122~~~~
3123nullptr == path effect
3124nullptr != path effect
3125~~~~
3126
3127</fiddle-embed></div>
3128
3129---
3130
Cary Clark493df1f2017-08-25 13:14:33 -04003131<a name="SkPaint_refPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003132## refPathEffect
3133
Cary Clarka560c472017-11-27 10:44:06 -05003134<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003135sk_sp&lt;SkPathEffect&gt; refPathEffect() const
Cary Clark12799e12017-07-28 15:18:29 -04003136</pre>
3137
Cary Clark4c06f5e2017-08-04 12:48:24 -04003138Returns <a href="undocumented#Path_Effect">Path Effect</a> if set, or nullptr.
3139Increases <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 -04003140
3141### Return Value
3142
Cary Clark4c06f5e2017-08-04 12:48:24 -04003143<a href="undocumented#Path_Effect">Path Effect</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003144
3145### Example
3146
Cary Clarka560c472017-11-27 10:44:06 -05003147<div><fiddle-embed name="f56039b94c702c2704c8c5100e623aca">
Cary Clark12799e12017-07-28 15:18:29 -04003148
3149#### Example Output
3150
3151~~~~
3152path effect unique: true
3153path effect unique: false
3154~~~~
3155
3156</fiddle-embed></div>
3157
3158---
3159
Cary Clark493df1f2017-08-25 13:14:33 -04003160<a name="SkPaint_setPathEffect"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003161## setPathEffect
3162
Cary Clarka560c472017-11-27 10:44:06 -05003163<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003164void setPathEffect(sk_sp&lt;SkPathEffect&gt; pathEffect)
Cary Clark12799e12017-07-28 15:18:29 -04003165</pre>
3166
Cary Clark6fc50412017-09-21 12:31:06 -04003167Sets <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
3168<a href="undocumented#Path_Effect">Path Effect</a>. Pass nullptr to leave the path geometry unaltered.
3169
3170Increments <a href="#SkPaint_setPathEffect_pathEffect">pathEffect</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003171
3172### Parameters
3173
Cary Clark8cc16c72017-08-25 11:51:49 -04003174<table> <tr> <td><a name="SkPaint_setPathEffect_pathEffect"> <code><strong>pathEffect </strong></code> </a></td> <td>
Cary Clark4c06f5e2017-08-04 12:48:24 -04003175replace <a href="SkPath_Reference#Path">Path</a> with a modification when drawn</td>
Cary Clark12799e12017-07-28 15:18:29 -04003176 </tr>
3177</table>
3178
3179### Example
3180
3181<div><fiddle-embed name="52dd55074ca0b7d520d04e750ca2a0d7"></fiddle-embed></div>
3182
3183---
3184
Cary Clark08895c42018-02-01 09:37:32 -05003185## <a name="Mask_Filter_Methods"></a> Mask Filter Methods
3186
Cary Clarkce101242017-09-01 15:51:02 -04003187<a href="undocumented#Mask_Filter">Mask Filter</a> uses coverage of the shape drawn to create <a href="undocumented#Mask_Alpha">Mask Alpha</a>.
Update Docs949cfd42018-01-22 05:50:26 +00003188<a href="undocumented#Mask_Filter">Mask Filter</a> takes a <a href="undocumented#Mask">Mask</a>, and returns a <a href="undocumented#Mask">Mask</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003189
3190<a href="undocumented#Mask_Filter">Mask Filter</a> may change the geometry and transparency of the shape, such as
3191creating 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
3192modifying the draw.
Cary Clark12799e12017-07-28 15:18:29 -04003193
3194### Example
3195
3196<div><fiddle-embed name="320b04ea1e1291d49f1e61994a0410fe"></fiddle-embed></div>
3197
Cary Clark493df1f2017-08-25 13:14:33 -04003198<a name="SkPaint_getMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003199## getMaskFilter
3200
Cary Clarka560c472017-11-27 10:44:06 -05003201<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003202SkMaskFilter* getMaskFilter() const
3203</pre>
3204
Cary Clark4c06f5e2017-08-04 12:48:24 -04003205Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
3206Does 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 -04003207
3208### Return Value
3209
Cary Clark4c06f5e2017-08-04 12:48:24 -04003210<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003211
3212### Example
3213
3214<div><fiddle-embed name="8cd53ece8fc83e4560599ace094b0f16">
3215
3216#### Example Output
3217
3218~~~~
3219nullptr == mask filter
3220nullptr != mask filter
3221~~~~
3222
3223</fiddle-embed></div>
3224
3225---
3226
Cary Clark493df1f2017-08-25 13:14:33 -04003227<a name="SkPaint_refMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003228## refMaskFilter
3229
Cary Clarka560c472017-11-27 10:44:06 -05003230<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003231sk_sp&lt;SkMaskFilter&gt; refMaskFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003232</pre>
3233
Cary Clark4c06f5e2017-08-04 12:48:24 -04003234Returns <a href="undocumented#Mask_Filter">Mask Filter</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003235
Cary Clark4c06f5e2017-08-04 12:48:24 -04003236Increases <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 -04003237
3238### Return Value
3239
Cary Clark4c06f5e2017-08-04 12:48:24 -04003240<a href="undocumented#Mask_Filter">Mask Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003241
3242### Example
3243
3244<div><fiddle-embed name="35a397dce5d44658ee4e9e9dfb9fee22">
3245
3246#### Example Output
3247
3248~~~~
3249mask filter unique: true
3250mask filter unique: false
3251~~~~
3252
3253</fiddle-embed></div>
3254
3255---
3256
Cary Clark493df1f2017-08-25 13:14:33 -04003257<a name="SkPaint_setMaskFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003258## setMaskFilter
3259
Cary Clarka560c472017-11-27 10:44:06 -05003260<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003261void setMaskFilter(sk_sp&lt;SkMaskFilter&gt; maskFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003262</pre>
3263
Cary Clark6fc50412017-09-21 12:31:06 -04003264Sets <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
3265<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
3266<a href="undocumented#Mask_Alpha">Mask Alpha</a> unaltered.
3267
Cary Clark6fc50412017-09-21 12:31:06 -04003268Increments <a href="#SkPaint_setMaskFilter_maskFilter">maskFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003269
3270### Parameters
3271
Cary Clark8cc16c72017-08-25 11:51:49 -04003272<table> <tr> <td><a name="SkPaint_setMaskFilter_maskFilter"> <code><strong>maskFilter </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003273modifies clipping mask generated from drawn geometry</td>
3274 </tr>
3275</table>
3276
3277### Example
3278
3279<div><fiddle-embed name="62c5a826692f85c3de3bab65e9e97aa9"></fiddle-embed></div>
3280
3281---
3282
Cary Clark08895c42018-02-01 09:37:32 -05003283## <a name="Typeface_Methods"></a> Typeface Methods
3284
Cary Clark4c06f5e2017-08-04 12:48:24 -04003285<a href="undocumented#Typeface">Typeface</a> identifies the font used when drawing and measuring text.
3286<a href="undocumented#Typeface">Typeface</a> may be specified by name, from a file, or from a data stream.
3287The default <a href="undocumented#Typeface">Typeface</a> defers to the platform-specific default font
Cary Clark12799e12017-07-28 15:18:29 -04003288implementation.
3289
3290### Example
3291
Ben Wagner700ff172017-11-08 15:37:22 -05003292<div><fiddle-embed name="1a7a5062725139760962582f599f1b97"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003293
Cary Clark493df1f2017-08-25 13:14:33 -04003294<a name="SkPaint_getTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003295## getTypeface
3296
Cary Clarka560c472017-11-27 10:44:06 -05003297<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003298SkTypeface* getTypeface() const
3299</pre>
3300
Cary Clark4c06f5e2017-08-04 12:48:24 -04003301Returns <a href="undocumented#Typeface">Typeface</a> if set, or nullptr.
Cary Clark6fc50412017-09-21 12:31:06 -04003302Increments <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003303
3304### Return Value
3305
Cary Clark4c06f5e2017-08-04 12:48:24 -04003306<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003307
3308### Example
3309
Cary Clark71961fb2018-01-05 14:21:59 -05003310<div><fiddle-embed name="5ce718e5a184baaac80e7098d7dad67b">
Cary Clark12799e12017-07-28 15:18:29 -04003311
3312#### Example Output
3313
3314~~~~
3315nullptr == typeface
3316nullptr != typeface
3317~~~~
3318
3319</fiddle-embed></div>
3320
3321---
3322
Cary Clark493df1f2017-08-25 13:14:33 -04003323<a name="SkPaint_refTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003324## refTypeface
3325
Cary Clarka560c472017-11-27 10:44:06 -05003326<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003327sk_sp&lt;SkTypeface&gt; refTypeface() const
Cary Clark12799e12017-07-28 15:18:29 -04003328</pre>
3329
Cary Clark4c06f5e2017-08-04 12:48:24 -04003330Increases <a href="undocumented#Typeface">Typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003331
3332### Return Value
3333
Cary Clark4c06f5e2017-08-04 12:48:24 -04003334<a href="undocumented#Typeface">Typeface</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003335
3336### Example
3337
Cary Clark71961fb2018-01-05 14:21:59 -05003338<div><fiddle-embed name="4bf8ed109c4b46d8a05c8b7763c1982c">
Cary Clark12799e12017-07-28 15:18:29 -04003339
3340#### Example Output
3341
3342~~~~
3343typeface1 != typeface2
3344typeface1 == typeface2
3345~~~~
3346
3347</fiddle-embed></div>
3348
3349---
3350
Cary Clark493df1f2017-08-25 13:14:33 -04003351<a name="SkPaint_setTypeface"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003352## setTypeface
3353
Cary Clarka560c472017-11-27 10:44:06 -05003354<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003355void setTypeface(sk_sp&lt;SkTypeface&gt; typeface)
Cary Clark12799e12017-07-28 15:18:29 -04003356</pre>
3357
Cary Clark7cfcbca2018-01-04 16:11:51 -05003358Sets <a href="undocumented#Typeface">Typeface</a> to <a href="#SkPaint_setTypeface_typeface">typeface</a>, decreasing <a href="undocumented#Reference_Count">Reference Count</a> of the previous <a href="undocumented#Typeface">Typeface</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003359Pass nullptr to clear <a href="undocumented#Typeface">Typeface</a> and use the default <a href="#SkPaint_setTypeface_typeface">typeface</a>. Increments
3360<a href="#SkPaint_setTypeface_typeface">typeface</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003361
3362### Parameters
3363
Cary Clark8cc16c72017-08-25 11:51:49 -04003364<table> <tr> <td><a name="SkPaint_setTypeface_typeface"> <code><strong>typeface </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003365font and style used to draw text</td>
3366 </tr>
3367</table>
3368
3369### Example
3370
Cary Clark71961fb2018-01-05 14:21:59 -05003371<div><fiddle-embed name="0e6fbb7773cd925b274552f4cd1abef2"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003372
3373---
3374
Cary Clark08895c42018-02-01 09:37:32 -05003375## <a name="Image_Filter_Methods"></a> Image Filter Methods
3376
Cary Clark8cc16c72017-08-25 11:51:49 -04003377<a href="undocumented#Image_Filter">Image Filter</a> operates on the pixel representation of the shape, as modified by <a href="#Paint">Paint</a>
3378with <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 -04003379which is drawn to the device using the set <a href="undocumented#Blend_Mode">Blend Mode</a>.
Cary Clark6fc50412017-09-21 12:31:06 -04003380
Cary Clark4c06f5e2017-08-04 12:48:24 -04003381<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 -04003382can 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 -04003383<a href="undocumented#Image_Filter">Image Filter</a> operates independently of and can be used in combination with
Update Docs949cfd42018-01-22 05:50:26 +00003384<a href="undocumented#Mask_Filter">Mask Filter</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003385
3386### Example
3387
Cary Clarka560c472017-11-27 10:44:06 -05003388<div><fiddle-embed name="0b2eec148d6397d6231e1fa0b3d1496d"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04003389
Cary Clark493df1f2017-08-25 13:14:33 -04003390<a name="SkPaint_getImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003391## getImageFilter
3392
Cary Clarka560c472017-11-27 10:44:06 -05003393<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003394SkImageFilter* getImageFilter() const
3395</pre>
3396
Cary Clark4c06f5e2017-08-04 12:48:24 -04003397Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3398Does 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 -04003399
3400### Return Value
3401
Cary Clark4c06f5e2017-08-04 12:48:24 -04003402<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003403
3404### Example
3405
Cary Clarka560c472017-11-27 10:44:06 -05003406<div><fiddle-embed name="7b8118ff57fcb84e6bc82380d155b62e">
Cary Clark12799e12017-07-28 15:18:29 -04003407
3408#### Example Output
3409
3410~~~~
3411nullptr == image filter
3412nullptr != image filter
3413~~~~
3414
3415</fiddle-embed></div>
3416
3417---
3418
Cary Clark493df1f2017-08-25 13:14:33 -04003419<a name="SkPaint_refImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003420## refImageFilter
3421
Cary Clarka560c472017-11-27 10:44:06 -05003422<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003423sk_sp&lt;SkImageFilter&gt; refImageFilter() const
Cary Clark12799e12017-07-28 15:18:29 -04003424</pre>
3425
Cary Clark4c06f5e2017-08-04 12:48:24 -04003426Returns <a href="undocumented#Image_Filter">Image Filter</a> if set, or nullptr.
3427Increases <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 -04003428
3429### Return Value
3430
Cary Clark4c06f5e2017-08-04 12:48:24 -04003431<a href="undocumented#Image_Filter">Image Filter</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003432
3433### Example
3434
3435<div><fiddle-embed name="13f09088b569251547107d14ae989dc1">
3436
3437#### Example Output
3438
3439~~~~
3440image filter unique: true
3441image filter unique: false
3442~~~~
3443
3444</fiddle-embed></div>
3445
3446---
3447
Cary Clark493df1f2017-08-25 13:14:33 -04003448<a name="SkPaint_setImageFilter"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003449## setImageFilter
3450
Cary Clarka560c472017-11-27 10:44:06 -05003451<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003452void setImageFilter(sk_sp&lt;SkImageFilter&gt; imageFilter)
Cary Clark12799e12017-07-28 15:18:29 -04003453</pre>
3454
Cary Clark6fc50412017-09-21 12:31:06 -04003455Sets <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
3456<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 -04003457on drawing.
Cary Clark6fc50412017-09-21 12:31:06 -04003458
Cary Clark6fc50412017-09-21 12:31:06 -04003459Increments <a href="#SkPaint_setImageFilter_imageFilter">imageFilter</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003460
3461### Parameters
3462
Cary Clark8cc16c72017-08-25 11:51:49 -04003463<table> <tr> <td><a name="SkPaint_setImageFilter_imageFilter"> <code><strong>imageFilter </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05003464how <a href="SkImage_Reference#Image">Image</a> is sampled when transformed</td>
Cary Clark12799e12017-07-28 15:18:29 -04003465 </tr>
3466</table>
3467
3468### Example
3469
3470<div><fiddle-embed name="6679d6e4ec632715ee03e68391bd7f9a"></fiddle-embed></div>
3471
3472---
3473
Cary Clark08895c42018-02-01 09:37:32 -05003474## <a name="Draw_Looper_Methods"></a> Draw Looper Methods
3475
Cary Clark4c06f5e2017-08-04 12:48:24 -04003476<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 -04003477to another to construct the draw.
Cary Clark6fc50412017-09-21 12:31:06 -04003478
Cary Clark4c06f5e2017-08-04 12:48:24 -04003479<a href="undocumented#Draw_Looper">Draw Looper</a> draws one or more times, modifying the canvas and paint each time.
3480<a href="undocumented#Draw_Looper">Draw Looper</a> may be used to draw multiple colors or create a colored shadow.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003481Set <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 -04003482
3483### Example
3484
3485<div><fiddle-embed name="84ec12a36e50df5ac565cc7a75ffbe9f"></fiddle-embed></div>
3486
Cary Clark493df1f2017-08-25 13:14:33 -04003487<a name="SkPaint_getDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003488## getDrawLooper
3489
Cary Clarka560c472017-11-27 10:44:06 -05003490<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003491SkDrawLooper* getDrawLooper() const
3492</pre>
3493
Cary Clark4c06f5e2017-08-04 12:48:24 -04003494Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3495Does 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 -04003496
3497### Return Value
3498
Cary Clark4c06f5e2017-08-04 12:48:24 -04003499<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003500
3501### Example
3502
3503<div><fiddle-embed name="af4c5acc7a91e7f23c2af48018903ad4">
3504
3505#### Example Output
3506
3507~~~~
3508nullptr == draw looper
3509nullptr != draw looper
3510~~~~
3511
3512</fiddle-embed></div>
3513
3514---
3515
Cary Clark493df1f2017-08-25 13:14:33 -04003516<a name="SkPaint_refDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003517## refDrawLooper
3518
Cary Clarka560c472017-11-27 10:44:06 -05003519<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003520sk_sp&lt;SkDrawLooper&gt; refDrawLooper() const
Cary Clark12799e12017-07-28 15:18:29 -04003521</pre>
3522
Cary Clark4c06f5e2017-08-04 12:48:24 -04003523Returns <a href="undocumented#Draw_Looper">Draw Looper</a> if set, or nullptr.
3524Increases <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 -04003525
3526### Return Value
3527
Cary Clark4c06f5e2017-08-04 12:48:24 -04003528<a href="undocumented#Draw_Looper">Draw Looper</a> if previously set, nullptr otherwise
Cary Clark12799e12017-07-28 15:18:29 -04003529
3530### Example
3531
3532<div><fiddle-embed name="2a3782c33f04ed17a725d0e449c6f7c3">
3533
3534#### Example Output
3535
3536~~~~
3537draw looper unique: true
3538draw looper unique: false
3539~~~~
3540
3541</fiddle-embed></div>
3542
3543---
3544
Cary Clark493df1f2017-08-25 13:14:33 -04003545<a name="SkPaint_getLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003546## getLooper
3547
Cary Clarka560c472017-11-27 10:44:06 -05003548<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003549SkDrawLooper* getLooper() const
3550</pre>
3551
Cary Clark12799e12017-07-28 15:18:29 -04003552---
3553
Cary Clark493df1f2017-08-25 13:14:33 -04003554<a name="SkPaint_setDrawLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003555## setDrawLooper
3556
Cary Clarka560c472017-11-27 10:44:06 -05003557<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003558void setDrawLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003559</pre>
3560
Cary Clark6fc50412017-09-21 12:31:06 -04003561Sets <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
3562<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
3563drawing unaltered.
3564
3565Increments <a href="#SkPaint_setDrawLooper_drawLooper">drawLooper</a> <a href="undocumented#Reference_Count">Reference Count</a> by one.
Cary Clark12799e12017-07-28 15:18:29 -04003566
3567### Parameters
3568
Cary Clark8cc16c72017-08-25 11:51:49 -04003569<table> <tr> <td><a name="SkPaint_setDrawLooper_drawLooper"> <code><strong>drawLooper </strong></code> </a></td> <td>
Cary Clarka523d2d2017-08-30 08:58:10 -04003570iterates through drawing one or more time, altering <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003571 </tr>
3572</table>
3573
3574### Example
3575
3576<div><fiddle-embed name="bf10f838b330f0a3a3266d42ea68a638"></fiddle-embed></div>
3577
3578---
3579
Cary Clark493df1f2017-08-25 13:14:33 -04003580<a name="SkPaint_setLooper"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003581## setLooper
3582
Cary Clarka560c472017-11-27 10:44:06 -05003583<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clarkbc5697d2017-10-04 14:31:33 -04003584void setLooper(sk_sp&lt;SkDrawLooper&gt; drawLooper)
Cary Clark12799e12017-07-28 15:18:29 -04003585</pre>
3586
Cary Clark12799e12017-07-28 15:18:29 -04003587---
3588
Cary Clark08895c42018-02-01 09:37:32 -05003589## <a name="Text_Align"></a> Text Align
Cary Clark12799e12017-07-28 15:18:29 -04003590
Cary Clark8cc16c72017-08-25 11:51:49 -04003591## <a name="SkPaint_Align"></a> Enum SkPaint::Align
Cary Clark12799e12017-07-28 15:18:29 -04003592
Cary Clarka560c472017-11-27 10:44:06 -05003593<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003594enum <a href="#SkPaint_Align">Align</a> {
3595<a href="#SkPaint_kLeft_Align">kLeft Align</a>,
3596<a href="#SkPaint_kCenter_Align">kCenter Align</a>,
3597<a href="#SkPaint_kRight_Align">kRight Align</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003598};</pre>
3599
Cary Clark8cc16c72017-08-25 11:51:49 -04003600<a href="#SkPaint_Align">Align</a> adjusts the text relative to the text position.
Cary Clarkce101242017-09-01 15:51:02 -04003601<a href="#SkPaint_Align">Align</a> affects <a href="#Glyph">Glyphs</a> drawn with: <a href="#SkCanvas_drawText">SkCanvas::drawText</a>, <a href="#SkCanvas_drawPosText">SkCanvas::drawPosText</a>,
Cary Clark7cfcbca2018-01-04 16:11:51 -05003602<a href="#SkCanvas_drawPosTextH">SkCanvas::drawPosTextH</a>, <a href="#SkCanvas_drawTextOnPath">SkCanvas::drawTextOnPath</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04003603<a href="#SkCanvas_drawTextOnPathHV">SkCanvas::drawTextOnPathHV</a>, <a href="#SkCanvas_drawTextRSXform">SkCanvas::drawTextRSXform</a>, <a href="#SkCanvas_drawTextBlob">SkCanvas::drawTextBlob</a>,
Cary Clark7cfcbca2018-01-04 16:11:51 -05003604and <a href="#SkCanvas_drawString">SkCanvas::drawString</a>;
Cary Clarkce101242017-09-01 15:51:02 -04003605as 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 -04003606
3607The text position is set by the font for both horizontal and vertical text.
3608Typically, for horizontal text, the position is to the left side of the glyph on the
3609base line; and for vertical text, the position is the horizontal center of the glyph
3610at the caps height.
3611
Cary Clark7cfcbca2018-01-04 16:11:51 -05003612<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 -04003613using the metrics returned by the font.
3614
Cary Clark8cc16c72017-08-25 11:51:49 -04003615<a href="#SkPaint_Align">Align</a> defaults to <a href="#SkPaint_kLeft_Align">kLeft Align</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003616
3617### Constants
3618
3619<table>
3620 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003621 <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 -04003622 </tr>
3623 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003624 <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
3625half 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 -04003626 </tr>
3627 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003628 <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,
3629and 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 -04003630 </tr>
3631
3632</table>
3633
Cary Clark8cc16c72017-08-25 11:51:49 -04003634## <a name="SkPaint__anonymous_2"></a> Enum SkPaint::_anonymous_2
Cary Clark12799e12017-07-28 15:18:29 -04003635
Cary Clarka560c472017-11-27 10:44:06 -05003636<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003637enum {
Cary Clark8cc16c72017-08-25 11:51:49 -04003638<a href="#SkPaint_kAlignCount">kAlignCount</a> = 3,
Cary Clark12799e12017-07-28 15:18:29 -04003639};</pre>
3640
3641### Constants
3642
3643<table>
3644 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003645 <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 -04003646 </tr>
3647
3648</table>
3649
3650### Example
3651
3652<div><fiddle-embed name="702617fd9ebc3f12e30081b5db93e8a8"><div>Each position separately moves the glyph in drawPosText.</div></fiddle-embed></div>
3653
3654### Example
3655
Cary Clark8cc16c72017-08-25 11:51:49 -04003656<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 -04003657
Cary Clark493df1f2017-08-25 13:14:33 -04003658<a name="SkPaint_getTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003659## getTextAlign
3660
Cary Clarka560c472017-11-27 10:44:06 -05003661<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003662Align getTextAlign() const
3663</pre>
3664
Cary Clark8cc16c72017-08-25 11:51:49 -04003665Returns <a href="#Text_Align">Text Align</a>.
3666Returns <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 -04003667
3668### Return Value
3669
3670text placement relative to position
3671
3672### Example
3673
3674<div><fiddle-embed name="2df932f526e810f74c89d30ec3f4c947">
3675
3676#### Example Output
3677
3678~~~~
3679kLeft_Align == default
3680~~~~
3681
3682</fiddle-embed></div>
3683
3684---
3685
Cary Clark493df1f2017-08-25 13:14:33 -04003686<a name="SkPaint_setTextAlign"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003687## setTextAlign
3688
Cary Clarka560c472017-11-27 10:44:06 -05003689<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003690void setTextAlign(Align align)
3691</pre>
3692
Cary Clark8cc16c72017-08-25 11:51:49 -04003693Sets <a href="#Text_Align">Text Align</a> to <a href="#SkPaint_setTextAlign_align">align</a>.
3694Has no effect if <a href="#SkPaint_setTextAlign_align">align</a> is an invalid value.
Cary Clark12799e12017-07-28 15:18:29 -04003695
3696### Parameters
3697
Cary Clark8cc16c72017-08-25 11:51:49 -04003698<table> <tr> <td><a name="SkPaint_setTextAlign_align"> <code><strong>align </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003699text placement relative to position</td>
3700 </tr>
3701</table>
3702
3703### Example
3704
Cary Clark4c06f5e2017-08-04 12:48:24 -04003705<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 -04003706alignment out of range has no effect.</div></fiddle-embed></div>
3707
3708---
3709
Cary Clark08895c42018-02-01 09:37:32 -05003710## <a name="Text_Size"></a> Text Size
3711
Cary Clark8cc16c72017-08-25 11:51:49 -04003712<a href="#Text_Size">Text Size</a> adjusts the overall text size in points.
3713<a href="#Text_Size">Text Size</a> can be set to any positive value or zero.
3714<a href="#Text_Size">Text Size</a> defaults to 12.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003715Set <a href="undocumented#SkPaintDefaults_TextSize">SkPaintDefaults TextSize</a> at compile time to change the default setting.
Cary Clark12799e12017-07-28 15:18:29 -04003716
3717### Example
3718
3719<div><fiddle-embed name="91c9a3e498bb9412e4522a95d076ed5f"></fiddle-embed></div>
3720
Cary Clark493df1f2017-08-25 13:14:33 -04003721<a name="SkPaint_getTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003722## getTextSize
3723
Cary Clarka560c472017-11-27 10:44:06 -05003724<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003725SkScalar getTextSize() const
3726</pre>
3727
Cary Clark8cc16c72017-08-25 11:51:49 -04003728Returns <a href="#Text_Size">Text Size</a> in points.
Cary Clark12799e12017-07-28 15:18:29 -04003729
3730### Return Value
3731
3732typographic height of text
3733
3734### Example
3735
3736<div><fiddle-embed name="983e2a71ba72d4ba8c945420040b8f1c"></fiddle-embed></div>
3737
3738---
3739
Cary Clark493df1f2017-08-25 13:14:33 -04003740<a name="SkPaint_setTextSize"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003741## setTextSize
3742
Cary Clarka560c472017-11-27 10:44:06 -05003743<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003744void setTextSize(SkScalar textSize)
3745</pre>
3746
Cary Clark8cc16c72017-08-25 11:51:49 -04003747Sets <a href="#Text_Size">Text Size</a> in points.
3748Has 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 -04003749
3750### Parameters
3751
Cary Clark8cc16c72017-08-25 11:51:49 -04003752<table> <tr> <td><a name="SkPaint_setTextSize_textSize"> <code><strong>textSize </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003753typographic height of text</td>
3754 </tr>
3755</table>
3756
3757### Example
3758
3759<div><fiddle-embed name="6510c9e2f57b83c47e67829e7a68d493"></fiddle-embed></div>
3760
3761---
3762
Cary Clark08895c42018-02-01 09:37:32 -05003763## <a name="Text_Scale_X"></a> Text Scale X
3764
Cary Clark8cc16c72017-08-25 11:51:49 -04003765<a href="#Text_Scale_X">Text Scale X</a> adjusts the text horizontal scale.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003766<a href="undocumented#Text">Text</a> scaling approximates condensed and expanded type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003767is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003768<a href="#Text_Scale_X">Text Scale X</a> can be set to any value.
3769<a href="#Text_Scale_X">Text Scale X</a> defaults to 1.
Cary Clark12799e12017-07-28 15:18:29 -04003770
3771### Example
3772
3773<div><fiddle-embed name="d13d787c1e36f515319fc998411c1d91"></fiddle-embed></div>
3774
Cary Clark493df1f2017-08-25 13:14:33 -04003775<a name="SkPaint_getTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003776## getTextScaleX
3777
Cary Clarka560c472017-11-27 10:44:06 -05003778<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003779SkScalar getTextScaleX() const
3780</pre>
3781
Cary Clark8cc16c72017-08-25 11:51:49 -04003782Returns <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003783Default value is 1.
3784
3785### Return Value
3786
3787text horizontal scale
3788
3789### Example
3790
3791<div><fiddle-embed name="5dc8e58f6910cb8e4de9ed60f888188b"></fiddle-embed></div>
3792
3793---
3794
Cary Clark493df1f2017-08-25 13:14:33 -04003795<a name="SkPaint_setTextScaleX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003796## setTextScaleX
3797
Cary Clarka560c472017-11-27 10:44:06 -05003798<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003799void setTextScaleX(SkScalar scaleX)
3800</pre>
3801
Cary Clark8cc16c72017-08-25 11:51:49 -04003802Sets <a href="#Text_Scale_X">Text Scale X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003803Default value is 1.
3804
3805### Parameters
3806
Cary Clark8cc16c72017-08-25 11:51:49 -04003807<table> <tr> <td><a name="SkPaint_setTextScaleX_scaleX"> <code><strong>scaleX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003808text horizontal scale</td>
3809 </tr>
3810</table>
3811
3812### Example
3813
3814<div><fiddle-embed name="a75bbdb8bb866b125c4c1dd5e967d470"></fiddle-embed></div>
3815
3816---
3817
Cary Clark08895c42018-02-01 09:37:32 -05003818## <a name="Text_Skew_X"></a> Text Skew X
3819
Cary Clark8cc16c72017-08-25 11:51:49 -04003820<a href="#Text_Skew_X">Text Skew X</a> adjusts the text horizontal slant.
Cary Clark4c06f5e2017-08-04 12:48:24 -04003821<a href="undocumented#Text">Text</a> skewing approximates italic and oblique type faces when the actual face
Cary Clark12799e12017-07-28 15:18:29 -04003822is not available.
Cary Clark8cc16c72017-08-25 11:51:49 -04003823<a href="#Text_Skew_X">Text Skew X</a> can be set to any value.
3824<a href="#Text_Skew_X">Text Skew X</a> defaults to 0.
Cary Clark12799e12017-07-28 15:18:29 -04003825
3826### Example
3827
3828<div><fiddle-embed name="aff208b0aab265f273045b27e683c17c"></fiddle-embed></div>
3829
Cary Clark493df1f2017-08-25 13:14:33 -04003830<a name="SkPaint_getTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003831## getTextSkewX
3832
Cary Clarka560c472017-11-27 10:44:06 -05003833<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003834SkScalar getTextSkewX() const
3835</pre>
3836
Cary Clark8cc16c72017-08-25 11:51:49 -04003837Returns <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003838Default value is zero.
3839
3840### Return Value
3841
3842additional shear in x-axis relative to y-axis
3843
3844### Example
3845
3846<div><fiddle-embed name="11c10f466dae0d1639dbb9f6a0040218"></fiddle-embed></div>
3847
3848---
3849
Cary Clark493df1f2017-08-25 13:14:33 -04003850<a name="SkPaint_setTextSkewX"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003851## setTextSkewX
3852
Cary Clarka560c472017-11-27 10:44:06 -05003853<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003854void setTextSkewX(SkScalar skewX)
3855</pre>
3856
Cary Clark8cc16c72017-08-25 11:51:49 -04003857Sets <a href="#Text_Skew_X">Text Skew X</a>.
Cary Clark12799e12017-07-28 15:18:29 -04003858Default value is zero.
3859
3860### Parameters
3861
Cary Clark8cc16c72017-08-25 11:51:49 -04003862<table> <tr> <td><a name="SkPaint_setTextSkewX_skewX"> <code><strong>skewX </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04003863additional shear in x-axis relative to y-axis</td>
3864 </tr>
3865</table>
3866
3867### Example
3868
3869<div><fiddle-embed name="6bd705a6e0c5f8ee24f302fe531bfabc"></fiddle-embed></div>
3870
3871---
3872
Cary Clark08895c42018-02-01 09:37:32 -05003873## <a name="Text_Encoding"></a> Text Encoding
Cary Clark12799e12017-07-28 15:18:29 -04003874
Cary Clark8cc16c72017-08-25 11:51:49 -04003875## <a name="SkPaint_TextEncoding"></a> Enum SkPaint::TextEncoding
Cary Clark12799e12017-07-28 15:18:29 -04003876
Cary Clarka560c472017-11-27 10:44:06 -05003877<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04003878enum <a href="#SkPaint_TextEncoding">TextEncoding</a> {
3879<a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>,
3880<a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>,
3881<a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>,
3882<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
Cary Clark12799e12017-07-28 15:18:29 -04003883};</pre>
3884
Cary Clark6fc50412017-09-21 12:31:06 -04003885<a href="#SkPaint_TextEncoding">TextEncoding</a> determines whether text specifies character codes and their encoded
Cary Clark7cfcbca2018-01-04 16:11:51 -05003886size, or glyph indices. Characters are encoded as specified by the <a href="http://unicode.org/standard/standard.html">Unicode standard</a> .
Cary Clark6fc50412017-09-21 12:31:06 -04003887
Cary Clarka560c472017-11-27 10:44:06 -05003888Character codes encoded size are specified by UTF-8, UTF-16, or UTF-32.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003889All character code formats are able to represent all of Unicode, differing only
Cary Clark12799e12017-07-28 15:18:29 -04003890in the total storage required.
3891
Cary Clark7cfcbca2018-01-04 16:11:51 -05003892<a href="https://tools.ietf.org/html/rfc3629">UTF-8 (RFC 3629)</a> encodes each character as one or more 8-bit bytes.
Cary Clark6fc50412017-09-21 12:31:06 -04003893
Cary Clark7cfcbca2018-01-04 16:11:51 -05003894<a href="https://tools.ietf.org/html/rfc2781">UTF-16 (RFC 2781)</a> encodes each character as one or two 16-bit words.
Cary Clark6fc50412017-09-21 12:31:06 -04003895
Cary Clark7cfcbca2018-01-04 16:11:51 -05003896<a href="http://www.unicode.org/versions/Unicode5.0.0/ch03.pdf">UTF-32</a> encodes each character as one 32-bit word.
Cary Clark12799e12017-07-28 15:18:29 -04003897
Cary Clark7cfcbca2018-01-04 16:11:51 -05003898<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 -04003899A glyph index is a 16-bit word.
3900
Cary Clark8cc16c72017-08-25 11:51:49 -04003901<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 -04003902
3903### Constants
3904
3905<table>
3906 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003907 <td><a name="SkPaint_kUTF8_TextEncoding"> <code><strong>SkPaint::kUTF8_TextEncoding </strong></code> </a></td><td>0</td><td>Uses bytes to represent UTF-8 or ASCII.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003908 </tr>
3909 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003910 <td><a name="SkPaint_kUTF16_TextEncoding"> <code><strong>SkPaint::kUTF16_TextEncoding </strong></code> </a></td><td>1</td><td>Uses two byte words to represent most of Unicode.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003911 </tr>
3912 <tr>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003913 <td><a name="SkPaint_kUTF32_TextEncoding"> <code><strong>SkPaint::kUTF32_TextEncoding </strong></code> </a></td><td>2</td><td>Uses four byte words to represent all of Unicode.</td>
Cary Clark12799e12017-07-28 15:18:29 -04003914 </tr>
3915 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04003916 <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 -04003917 </tr>
3918
3919</table>
3920
3921### Example
3922
Cary Clarka560c472017-11-27 10:44:06 -05003923<div><fiddle-embed name="b29294e7f29d160a1b46abf2dcec9d2a"><div>First line is encoded in UTF-8.
3924Second line is encoded in UTF-16.
3925Third line is encoded in UTF-32.
Cary Clark12799e12017-07-28 15:18:29 -04003926Fourth line has 16 bit glyph indices.</div></fiddle-embed></div>
3927
Cary Clark493df1f2017-08-25 13:14:33 -04003928<a name="SkPaint_getTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003929## getTextEncoding
3930
Cary Clarka560c472017-11-27 10:44:06 -05003931<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003932TextEncoding getTextEncoding() const
3933</pre>
3934
Cary Clark8cc16c72017-08-25 11:51:49 -04003935Returns <a href="#Text_Encoding">Text Encoding</a>.
3936<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 -04003937
3938### Return Value
3939
Cary Clark7cfcbca2018-01-04 16:11:51 -05003940one of: <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>, <a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>, <a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>, or
Cary Clark8cc16c72017-08-25 11:51:49 -04003941<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>
Cary Clark12799e12017-07-28 15:18:29 -04003942
3943### Example
3944
3945<div><fiddle-embed name="70ad28bbf7668b38474d7f225e3540bc">
3946
3947#### Example Output
3948
3949~~~~
3950kUTF8_TextEncoding == text encoding
3951kGlyphID_TextEncoding == text encoding
3952~~~~
3953
3954</fiddle-embed></div>
3955
3956---
3957
Cary Clark493df1f2017-08-25 13:14:33 -04003958<a name="SkPaint_setTextEncoding"></a>
Cary Clark12799e12017-07-28 15:18:29 -04003959## setTextEncoding
3960
Cary Clarka560c472017-11-27 10:44:06 -05003961<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04003962void setTextEncoding(TextEncoding encoding)
3963</pre>
3964
Cary Clark7cfcbca2018-01-04 16:11:51 -05003965Sets <a href="#Text_Encoding">Text Encoding</a> to <a href="#SkPaint_setTextEncoding_encoding">encoding</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04003966<a href="#Text_Encoding">Text Encoding</a> determines how character code points are mapped to font glyph indices.
3967Invalid values for <a href="#SkPaint_setTextEncoding_encoding">encoding</a> are ignored.
Cary Clark12799e12017-07-28 15:18:29 -04003968
3969### Parameters
3970
Cary Clark8cc16c72017-08-25 11:51:49 -04003971<table> <tr> <td><a name="SkPaint_setTextEncoding_encoding"> <code><strong>encoding </strong></code> </a></td> <td>
Cary Clark7cfcbca2018-01-04 16:11:51 -05003972one of: <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a>, <a href="#SkPaint_kUTF16_TextEncoding">kUTF16 TextEncoding</a>, <a href="#SkPaint_kUTF32_TextEncoding">kUTF32 TextEncoding</a>, or
Cary Clark8cc16c72017-08-25 11:51:49 -04003973<a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04003974 </tr>
Cary Clarkbad5ad72017-08-03 17:14:08 -04003975#
3976
Cary Clark12799e12017-07-28 15:18:29 -04003977</table>
3978
3979### Example
3980
3981<div><fiddle-embed name="329b92fbc35151dee9aa0c0e70107665">
3982
3983#### Example Output
3984
3985~~~~
39864 != text encoding
3987~~~~
3988
3989</fiddle-embed></div>
3990
3991---
3992
Cary Clark08895c42018-02-01 09:37:32 -05003993## <a name="Font_Metrics"></a> Font Metrics
3994
Cary Clarkce101242017-09-01 15:51:02 -04003995<a href="#Font_Metrics">Font Metrics</a> describe dimensions common to the <a href="#Glyph">Glyphs</a> in <a href="undocumented#Typeface">Typeface</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05003996The 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 -04003997<a href="#Paint">Paint</a> settings other than <a href="#Text_Size">Text Size</a> into account.
Cary Clark12799e12017-07-28 15:18:29 -04003998
Cary Clark4c06f5e2017-08-04 12:48:24 -04003999<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 -04004000X-axis values to the left of the glyph are negative, and to the right of the left glyph edge
4001are positive.
4002Y-axis values above the baseline are negative, and below the baseline are positive.
4003
4004### Example
4005
Ben Wagnere5806492017-11-09 12:08:31 -05004006<div><fiddle-embed name="2bfa3783719fcd769af177a1b244e171"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004007
Cary Clark8cc16c72017-08-25 11:51:49 -04004008# <a name="SkPaint_FontMetrics"></a> Struct SkPaint::FontMetrics
Cary Clarke4aa3712017-09-15 02:56:12 -04004009
Cary Clarka560c472017-11-27 10:44:06 -05004010<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004011struct <a href="#SkPaint_FontMetrics">FontMetrics</a> {
4012enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4013<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4014<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4015<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4016<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004017};
4018
Cary Clark8cc16c72017-08-25 11:51:49 -04004019uint32_t <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>;
4020<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fTop">fTop</a>;
4021<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAscent">fAscent</a>;
4022<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fDescent">fDescent</a>;
4023<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fBottom">fBottom</a>;
4024<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fLeading">fLeading</a>;
4025<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fAvgCharWidth">fAvgCharWidth</a>;
4026<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fMaxCharWidth">fMaxCharWidth</a>;
4027<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMin">fXMin</a>;
4028<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXMax">fXMax</a>;
4029<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fXHeight">fXHeight</a>;
4030<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fCapHeight">fCapHeight</a>;
4031<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlineThickness">fUnderlineThickness</a>;
4032<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fUnderlinePosition">fUnderlinePosition</a>;
4033<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutThickness">fStrikeoutThickness</a>;
4034<a href="undocumented#SkScalar">SkScalar</a> <a href="#SkPaint_FontMetrics_fStrikeoutPosition">fStrikeoutPosition</a>;
Cary Clark12799e12017-07-28 15:18:29 -04004035
Cary Clark8cc16c72017-08-25 11:51:49 -04004036bool <a href="#SkPaint_FontMetrics_hasUnderlineThickness">hasUnderlineThickness(SkScalar* thickness)</a> const;
4037bool <a href="#SkPaint_FontMetrics_hasUnderlinePosition">hasUnderlinePosition(SkScalar* position)</a> const;
4038bool <a href="#SkPaint_FontMetrics_hasStrikeoutThickness">hasStrikeoutThickness(SkScalar* thickness)</a> const;
4039bool <a href="#SkPaint_FontMetrics_hasStrikeoutPosition">hasStrikeoutPosition(SkScalar* position)</a> const;
Cary Clark12799e12017-07-28 15:18:29 -04004040};</pre>
4041
Cary Clark154beea2017-10-26 07:58:48 -04004042<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
4043computed by <a href="undocumented#Font_Manager">Font Manager</a> using <a href="undocumented#Typeface">Typeface</a>. Values are set to zero if they are
4044not available.
4045
Ben Wagnere5806492017-11-09 12:08:31 -05004046All vertical values relative to the baseline are given y-down. As such, zero is on the
4047baseline, negative values are above the baseline, and positive values are below the
4048baseline.
4049
Cary Clark154beea2017-10-26 07:58:48 -04004050<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
4051are valid, since their value may be zero.
Ben Wagnere5806492017-11-09 12:08:31 -05004052
Cary Clark154beea2017-10-26 07:58:48 -04004053<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
4054are valid, since their value may be zero.
4055
Cary Clark8cc16c72017-08-25 11:51:49 -04004056## <a name="SkPaint_FontMetrics_FontMetricsFlags"></a> Enum SkPaint::FontMetrics::FontMetricsFlags
Cary Clark12799e12017-07-28 15:18:29 -04004057
Cary Clarka560c472017-11-27 10:44:06 -05004058<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark8cc16c72017-08-25 11:51:49 -04004059enum <a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> {
4060<a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> = 1 << 0,
4061<a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> = 1 << 1,
4062<a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> = 1 << 2,
4063<a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> = 1 << 3,
Cary Clark12799e12017-07-28 15:18:29 -04004064};</pre>
4065
Cary Clark154beea2017-10-26 07:58:48 -04004066<a href="#SkPaint_FontMetrics_FontMetricsFlags">FontMetricsFlags</a> are set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a> when underline and strikeout metrics are valid;
4067the underline or strikeout metric may be valid and zero.
4068Fonts with embedded bitmaps may not have valid underline or strikeout metrics.
4069
Cary Clark12799e12017-07-28 15:18:29 -04004070### Constants
4071
4072<table>
4073 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004074 <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 -04004075 </tr>
4076 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004077 <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 -04004078 </tr>
4079 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004080 <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 -04004081 </tr>
4082 <tr>
Cary Clark8cc16c72017-08-25 11:51:49 -04004083 <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 -04004084 </tr>
4085
4086</table>
4087
Cary Clark8cc16c72017-08-25 11:51:49 -04004088<a name="SkPaint_FontMetrics_fFlags"> <code><strong>uint32_t fFlags</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004089
Cary Clark8cc16c72017-08-25 11:51:49 -04004090<a href="#SkPaint_FontMetrics_fFlags">fFlags</a> is set when underline metrics are valid.
Cary Clark12799e12017-07-28 15:18:29 -04004091
Cary Clark8cc16c72017-08-25 11:51:49 -04004092<a name="SkPaint_FontMetrics_fTop"> <code><strong>SkScalar fTop</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004093
Ben Wagnere5806492017-11-09 12:08:31 -05004094Greatest extent above the baseline for any glyph.
4095Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004096
Cary Clark8cc16c72017-08-25 11:51:49 -04004097<a name="SkPaint_FontMetrics_fAscent"> <code><strong>SkScalar fAscent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004098
4099Recommended distance above the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004100Typically less than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004101
Cary Clark8cc16c72017-08-25 11:51:49 -04004102<a name="SkPaint_FontMetrics_fDescent"> <code><strong>SkScalar fDescent</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004103
4104Recommended distance below the baseline to reserve for a line of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004105Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004106
Cary Clark8cc16c72017-08-25 11:51:49 -04004107<a name="SkPaint_FontMetrics_fBottom"> <code><strong>SkScalar fBottom</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004108
Ben Wagnere5806492017-11-09 12:08:31 -05004109Greatest extent below the baseline for any glyph.
4110Typically greater than zero.
Cary Clark12799e12017-07-28 15:18:29 -04004111
Cary Clark8cc16c72017-08-25 11:51:49 -04004112<a name="SkPaint_FontMetrics_fLeading"> <code><strong>SkScalar fLeading</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004113
4114Recommended distance to add between lines of text.
Ben Wagnere5806492017-11-09 12:08:31 -05004115Typically greater than or equal to zero.
Cary Clark12799e12017-07-28 15:18:29 -04004116
Cary Clark8cc16c72017-08-25 11:51:49 -04004117<a name="SkPaint_FontMetrics_fAvgCharWidth"> <code><strong>SkScalar fAvgCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004118
4119Average character width, if it is available.
4120Zero if no average width is stored in the font.
4121
Cary Clark8cc16c72017-08-25 11:51:49 -04004122<a name="SkPaint_FontMetrics_fMaxCharWidth"> <code><strong>SkScalar fMaxCharWidth</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004123
4124Maximum character width.
4125
Cary Clark8cc16c72017-08-25 11:51:49 -04004126<a name="SkPaint_FontMetrics_fXMin"> <code><strong>SkScalar fXMin</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004127
Ben Wagnere5806492017-11-09 12:08:31 -05004128Minimum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004129Typically less than zero.
4130
Cary Clark8cc16c72017-08-25 11:51:49 -04004131<a name="SkPaint_FontMetrics_fXMax"> <code><strong>SkScalar fXMax</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004132
Cary Clarkce101242017-09-01 15:51:02 -04004133Maximum bounding box x value for all <a href="#Glyph">Glyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004134Typically greater than zero.
4135
Cary Clark8cc16c72017-08-25 11:51:49 -04004136<a name="SkPaint_FontMetrics_fXHeight"> <code><strong>SkScalar fXHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004137
4138Height of a lower-case 'x'.
4139May be zero if no lower-case height is stored in the font.
4140
Cary Clark8cc16c72017-08-25 11:51:49 -04004141<a name="SkPaint_FontMetrics_fCapHeight"> <code><strong>SkScalar fCapHeight</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004142
4143Height of an upper-case letter.
4144May be zero if no upper-case height is stored in the font.
4145
Cary Clark8cc16c72017-08-25 11:51:49 -04004146<a name="SkPaint_FontMetrics_fUnderlineThickness"> <code><strong>SkScalar fUnderlineThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004147
Ben Wagnere5806492017-11-09 12:08:31 -05004148Underline thickness.
4149
4150If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlineThicknessIsValid_Flag">kUnderlineThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004151If <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 -04004152
Cary Clark8cc16c72017-08-25 11:51:49 -04004153<a name="SkPaint_FontMetrics_fUnderlinePosition"> <code><strong>SkScalar fUnderlinePosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004154
Ben Wagnere5806492017-11-09 12:08:31 -05004155Position of the top of the underline stroke relative to the baseline.
4156Typically positive when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004157
Cary Clark8cc16c72017-08-25 11:51:49 -04004158If the metric is valid, the <a href="#SkPaint_FontMetrics_kUnderlinePositionIsValid_Flag">kUnderlinePositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4159If <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 -04004160
Cary Clark8cc16c72017-08-25 11:51:49 -04004161<a name="SkPaint_FontMetrics_fStrikeoutThickness"> <code><strong>SkScalar fStrikeoutThickness</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004162
Ben Wagnere5806492017-11-09 12:08:31 -05004163Strikeout thickness.
4164
4165If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutThicknessIsValid_Flag">kStrikeoutThicknessIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004166If <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 -04004167
Cary Clark8cc16c72017-08-25 11:51:49 -04004168<a name="SkPaint_FontMetrics_fStrikeoutPosition"> <code><strong>SkScalar fStrikeoutPosition</strong></code> </a>
Cary Clark12799e12017-07-28 15:18:29 -04004169
Ben Wagnere5806492017-11-09 12:08:31 -05004170Position of the bottom of the strikeout stroke relative to the baseline.
4171Typically negative when valid.
Cary Clark12799e12017-07-28 15:18:29 -04004172
Cary Clark8cc16c72017-08-25 11:51:49 -04004173If the metric is valid, the <a href="#SkPaint_FontMetrics_kStrikeoutPositionIsValid_Flag">kStrikeoutPositionIsValid Flag</a> is set in <a href="#SkPaint_FontMetrics_fFlags">fFlags</a>.
4174If <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 -04004175
Cary Clark493df1f2017-08-25 13:14:33 -04004176<a name="SkPaint_FontMetrics_hasUnderlineThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004177## hasUnderlineThickness
4178
Cary Clarka560c472017-11-27 10:44:06 -05004179<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004180bool hasUnderlineThickness(SkScalar* thickness) const
4181</pre>
4182
Ben Wagnere5806492017-11-09 12:08:31 -05004183If <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 -04004184<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,
4185return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlineThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004186
4187### Parameters
4188
Cary Clark8cc16c72017-08-25 11:51:49 -04004189<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlineThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004190storage for underline width</td>
4191 </tr>
4192</table>
4193
4194### Return Value
4195
4196true if font specifies underline width
4197
4198---
4199
Cary Clark493df1f2017-08-25 13:14:33 -04004200<a name="SkPaint_FontMetrics_hasUnderlinePosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004201## hasUnderlinePosition
4202
Cary Clarka560c472017-11-27 10:44:06 -05004203<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004204bool hasUnderlinePosition(SkScalar* position) const
4205</pre>
4206
Ben Wagnere5806492017-11-09 12:08:31 -05004207If <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 -04004208<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,
4209return false, and ignore <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004210
4211### Parameters
4212
Cary Clark8cc16c72017-08-25 11:51:49 -04004213<table> <tr> <td><a name="SkPaint_FontMetrics_hasUnderlinePosition_position"> <code><strong>position </strong></code> </a></td> <td>
4214storage for underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004215 </tr>
4216</table>
4217
4218### Return Value
4219
Cary Clark8cc16c72017-08-25 11:51:49 -04004220true if font specifies underline <a href="#SkPaint_FontMetrics_hasUnderlinePosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004221
4222---
4223
Cary Clark493df1f2017-08-25 13:14:33 -04004224<a name="SkPaint_FontMetrics_hasStrikeoutThickness"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004225## hasStrikeoutThickness
4226
Cary Clarka560c472017-11-27 10:44:06 -05004227<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004228bool hasStrikeoutThickness(SkScalar* thickness) const
4229</pre>
4230
Ben Wagnere5806492017-11-09 12:08:31 -05004231If <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 -04004232<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,
4233return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutThickness_thickness">thickness</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004234
4235### Parameters
4236
Cary Clark8cc16c72017-08-25 11:51:49 -04004237<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutThickness_thickness"> <code><strong>thickness </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004238storage for strikeout width</td>
4239 </tr>
4240</table>
4241
4242### Return Value
4243
4244true if font specifies strikeout width
4245
4246---
4247
Cary Clark493df1f2017-08-25 13:14:33 -04004248<a name="SkPaint_FontMetrics_hasStrikeoutPosition"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004249## hasStrikeoutPosition
4250
Cary Clarka560c472017-11-27 10:44:06 -05004251<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004252bool hasStrikeoutPosition(SkScalar* position) const
4253</pre>
4254
Ben Wagnere5806492017-11-09 12:08:31 -05004255If <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 -04004256<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,
4257return false, and ignore <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004258
4259### Parameters
4260
Cary Clark8cc16c72017-08-25 11:51:49 -04004261<table> <tr> <td><a name="SkPaint_FontMetrics_hasStrikeoutPosition_position"> <code><strong>position </strong></code> </a></td> <td>
4262storage for strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004263 </tr>
4264</table>
4265
4266### Return Value
4267
Cary Clark8cc16c72017-08-25 11:51:49 -04004268true if font specifies strikeout <a href="#SkPaint_FontMetrics_hasStrikeoutPosition_position">position</a>
Cary Clark12799e12017-07-28 15:18:29 -04004269
4270---
4271
Cary Clark493df1f2017-08-25 13:14:33 -04004272<a name="SkPaint_getFontMetrics"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004273## getFontMetrics
4274
Cary Clarka560c472017-11-27 10:44:06 -05004275<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004276SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const
4277</pre>
4278
Cary Clark8cc16c72017-08-25 11:51:49 -04004279Returns <a href="#Font_Metrics">Font Metrics</a> associated with <a href="undocumented#Typeface">Typeface</a>.
4280The 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 -04004281descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004282If <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>.
4283Results are scaled by <a href="#Text_Size">Text Size</a> but does not take into account
4284dimensions 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>,
4285<a href="#Style_Stroke">Style Stroke</a>, and <a href="undocumented#Path_Effect">Path Effect</a>.
4286Results 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 -04004287is ignored.
4288
4289### Parameters
4290
Cary Clark8cc16c72017-08-25 11:51:49 -04004291<table> <tr> <td><a name="SkPaint_getFontMetrics_metrics"> <code><strong>metrics </strong></code> </a></td> <td>
4292storage for <a href="#Font_Metrics">Font Metrics</a> from <a href="undocumented#Typeface">Typeface</a>; may be nullptr</td>
4293 </tr> <tr> <td><a name="SkPaint_getFontMetrics_scale"> <code><strong>scale </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004294additional multiplier for returned values</td>
4295 </tr>
4296</table>
4297
4298### Return Value
4299
4300recommended spacing between lines
4301
4302### Example
4303
4304<div><fiddle-embed name="b899d84caba6607340322d317992d070"></fiddle-embed></div>
4305
4306### See Also
4307
Cary Clark8cc16c72017-08-25 11:51:49 -04004308<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 -04004309
4310---
4311
Cary Clark493df1f2017-08-25 13:14:33 -04004312<a name="SkPaint_getFontSpacing"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004313## getFontSpacing
4314
Cary Clarka560c472017-11-27 10:44:06 -05004315<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004316SkScalar getFontSpacing() const
4317</pre>
4318
4319Returns the recommended spacing between lines: the sum of metrics
4320descent, ascent, and leading.
Cary Clark8cc16c72017-08-25 11:51:49 -04004321Result is scaled by <a href="#Text_Size">Text Size</a> but does not take into account
Cary Clark4c06f5e2017-08-04 12:48:24 -04004322dimensions required by stroking and <a href="undocumented#Path_Effect">Path Effect</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004323Returns the same result as <a href="#SkPaint_getFontMetrics">getFontMetrics</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004324
4325### Return Value
4326
4327recommended spacing between lines
4328
4329### Example
4330
4331<div><fiddle-embed name="424741e26e1b174e43087d67422ce14f">
4332
4333#### Example Output
4334
4335~~~~
4336textSize: 12 fontSpacing: 13.9688
4337textSize: 18 fontSpacing: 20.9531
4338textSize: 24 fontSpacing: 27.9375
4339textSize: 32 fontSpacing: 37.25
4340~~~~
4341
4342</fiddle-embed></div>
4343
4344---
4345
Cary Clark493df1f2017-08-25 13:14:33 -04004346<a name="SkPaint_getFontBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004347## getFontBounds
4348
Cary Clarka560c472017-11-27 10:44:06 -05004349<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004350SkRect getFontBounds() const
4351</pre>
4352
Cary Clarkce101242017-09-01 15:51:02 -04004353Returns the union of bounds of all <a href="#Glyph">Glyphs</a>.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004354Returned dimensions are computed by <a href="undocumented#Font_Manager">Font Manager</a> from font data,
Cary Clark8cc16c72017-08-25 11:51:49 -04004355ignoring <a href="#SkPaint_Hinting">Hinting</a>. Includes <a href="#Text_Size">Text Size</a>, <a href="#Text_Scale_X">Text Scale X</a>,
4356and <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 -04004357
Cary Clark8cc16c72017-08-25 11:51:49 -04004358If <a href="#Text_Size">Text Size</a> is large, <a href="#Text_Scale_X">Text Scale X</a> is one, and <a href="#Text_Skew_X">Text Skew X</a> is zero,
Cary Clark7cfcbca2018-01-04 16:11:51 -05004359returns the same bounds as <a href="#Font_Metrics">Font Metrics</a> { <a href="#SkPaint_FontMetrics_fXMin">FontMetrics::fXMin</a>,
Cary Clark8cc16c72017-08-25 11:51:49 -04004360<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 -04004361
4362### Return Value
4363
Cary Clarkce101242017-09-01 15:51:02 -04004364union of bounds of all <a href="#Glyph">Glyphs</a>
Cary Clark12799e12017-07-28 15:18:29 -04004365
4366### Example
4367
4368<div><fiddle-embed name="facaddeec7943bc491988e345e27e65f">
4369
4370#### Example Output
4371
4372~~~~
4373metrics bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4374font bounds = { -12.2461, -14.7891, 21.5215, 5.55469 }
4375~~~~
4376
4377</fiddle-embed></div>
4378
4379---
4380
Cary Clark493df1f2017-08-25 13:14:33 -04004381<a name="SkPaint_textToGlyphs"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004382## textToGlyphs
4383
Cary Clarka560c472017-11-27 10:44:06 -05004384<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004385int textToGlyphs(const void* text, size_t byteLength, SkGlyphID glyphs[]) const
4386</pre>
4387
Cary Clark8cc16c72017-08-25 11:51:49 -04004388Converts <a href="#SkPaint_textToGlyphs_text">text</a> into glyph indices.
4389Returns the number of glyph indices represented by <a href="#SkPaint_textToGlyphs_text">text</a>.
4390<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>.
4391<a href="#SkPaint_textToGlyphs_glyphs">glyphs</a> may be nullptr, to compute the glyph count.
Cary Clark12799e12017-07-28 15:18:29 -04004392
Cary Clarkbc5697d2017-10-04 14:31:33 -04004393Does not check <a href="#SkPaint_textToGlyphs_text">text</a> for valid character codes or valid glyph indices.
Cary Clark12799e12017-07-28 15:18:29 -04004394
Cary Clark8cc16c72017-08-25 11:51:49 -04004395If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> equals zero, returns zero.
4396If <a href="#SkPaint_textToGlyphs_byteLength">byteLength</a> includes a partial character, the partial character is ignored.
Cary Clark12799e12017-07-28 15:18:29 -04004397
Cary Clark8cc16c72017-08-25 11:51:49 -04004398If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kUTF8_TextEncoding">kUTF8 TextEncoding</a> and
Cary Clarka560c472017-11-27 10:44:06 -05004399<a href="#SkPaint_textToGlyphs_text">text</a> contains an invalid UTF-8 sequence, zero is returned.
Cary Clark12799e12017-07-28 15:18:29 -04004400
4401### Parameters
4402
Cary Clark8cc16c72017-08-25 11:51:49 -04004403<table> <tr> <td><a name="SkPaint_textToGlyphs_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004404character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004405 </tr> <tr> <td><a name="SkPaint_textToGlyphs_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004406length of character storage in bytes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004407 </tr> <tr> <td><a name="SkPaint_textToGlyphs_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004408storage for glyph indices; may be nullptr</td>
4409 </tr>
4410</table>
4411
4412### Return Value
4413
Cary Clark8cc16c72017-08-25 11:51:49 -04004414number 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 -04004415
4416### Example
4417
4418<div><fiddle-embed name="343e9471a7f7b5f09abdc3b44983433b"></fiddle-embed></div>
4419
4420---
4421
Cary Clark493df1f2017-08-25 13:14:33 -04004422<a name="SkPaint_countText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004423## countText
4424
Cary Clarka560c472017-11-27 10:44:06 -05004425<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004426int countText(const void* text, size_t byteLength) const
4427</pre>
4428
Cary Clarkce101242017-09-01 15:51:02 -04004429Returns the number of <a href="#Glyph">Glyphs</a> in <a href="#SkPaint_countText_text">text</a>.
4430Uses <a href="#Text_Encoding">Text Encoding</a> to count the <a href="#Glyph">Glyphs</a>.
Cary Clark8cc16c72017-08-25 11:51:49 -04004431Returns the same result as <a href="#SkPaint_textToGlyphs">textToGlyphs</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004432
4433### Parameters
4434
Cary Clark8cc16c72017-08-25 11:51:49 -04004435<table> <tr> <td><a name="SkPaint_countText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004436character storage encoded with <a href="#Text_Encoding">Text Encoding</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004437 </tr> <tr> <td><a name="SkPaint_countText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004438length of character storage in bytes</td>
4439 </tr>
4440</table>
4441
4442### Return Value
4443
Cary Clarkce101242017-09-01 15:51:02 -04004444number 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 -04004445
4446### Example
4447
4448<div><fiddle-embed name="85436c71aab5410767fc688ab0573e09">
4449
4450#### Example Output
4451
4452~~~~
4453count = 5
4454~~~~
4455
4456</fiddle-embed></div>
4457
4458---
4459
Cary Clark493df1f2017-08-25 13:14:33 -04004460<a name="SkPaint_containsText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004461## containsText
4462
Cary Clarka560c472017-11-27 10:44:06 -05004463<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004464bool containsText(const void* text, size_t byteLength) const
4465</pre>
4466
Cary Clark7cfcbca2018-01-04 16:11:51 -05004467Returns true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index.
Cary Clark8cc16c72017-08-25 11:51:49 -04004468Returns false if any characters in <a href="#SkPaint_containsText_text">text</a> are not supported in
Cary Clark4c06f5e2017-08-04 12:48:24 -04004469<a href="undocumented#Typeface">Typeface</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004470
Cary Clark8cc16c72017-08-25 11:51:49 -04004471If <a href="#Text_Encoding">Text Encoding</a> is <a href="#SkPaint_kGlyphID_TextEncoding">kGlyphID TextEncoding</a>,
4472returns true if all glyph indices in <a href="#SkPaint_containsText_text">text</a> are non-zero;
4473does 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 -04004474
Cary Clarkce101242017-09-01 15:51:02 -04004475Returns true if <a href="#SkPaint_containsText_byteLength">byteLength</a> is zero.
Cary Clark12799e12017-07-28 15:18:29 -04004476
4477### Parameters
4478
Cary Clark8cc16c72017-08-25 11:51:49 -04004479<table> <tr> <td><a name="SkPaint_containsText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004480array of characters or <a href="#Glyph">Glyphs</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004481 </tr> <tr> <td><a name="SkPaint_containsText_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4482number of bytes in <a href="#SkPaint_containsText_text">text</a> array</td>
Cary Clark12799e12017-07-28 15:18:29 -04004483 </tr>
4484</table>
4485
4486### Return Value
4487
Cary Clark8cc16c72017-08-25 11:51:49 -04004488true if all <a href="#SkPaint_containsText_text">text</a> corresponds to a non-zero glyph index
Cary Clark12799e12017-07-28 15:18:29 -04004489
4490### Example
4491
Cary Clark8cc16c72017-08-25 11:51:49 -04004492<div><fiddle-embed name="9202369019552f09cd4bec7f3046fee4"><div><a href="#SkPaint_containsText">containsText</a> succeeds for degree symbol, but cannot find a glyph index
Cary Clark7cfcbca2018-01-04 16:11:51 -05004493corresponding to the Unicode surrogate code point.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004494
4495#### Example Output
4496
4497~~~~
44980x00b0 == has char
44990xd800 != has char
4500~~~~
4501
4502</fiddle-embed></div>
4503
4504### Example
4505
Cary Clark8cc16c72017-08-25 11:51:49 -04004506<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 -04004507that it corresponds to an entry in <a href="undocumented#Typeface">Typeface</a>.</div>
Cary Clark12799e12017-07-28 15:18:29 -04004508
4509#### Example Output
4510
4511~~~~
45120x01ff == has glyph
45130x0000 != has glyph
45140xffff == has glyph
4515~~~~
4516
4517</fiddle-embed></div>
4518
4519### See Also
4520
Cary Clark8cc16c72017-08-25 11:51:49 -04004521<a href="#SkPaint_setTextEncoding">setTextEncoding</a> <a href="undocumented#Typeface">Typeface</a>
Cary Clark12799e12017-07-28 15:18:29 -04004522
4523---
4524
Cary Clark493df1f2017-08-25 13:14:33 -04004525<a name="SkPaint_glyphsToUnichars"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004526## glyphsToUnichars
4527
Cary Clarka560c472017-11-27 10:44:06 -05004528<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004529void glyphsToUnichars(const SkGlyphID glyphs[], int count, SkUnichar text[]) const
4530</pre>
4531
Cary Clark7cfcbca2018-01-04 16:11:51 -05004532Converts <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> into <a href="#SkPaint_glyphsToUnichars_text">text</a> if possible.
4533<a href="undocumented#Glyph">Glyph</a> values without direct Unicode equivalents are mapped to zero.
Cary Clark4c06f5e2017-08-04 12:48:24 -04004534Uses the <a href="undocumented#Typeface">Typeface</a>, but is unaffected
Cary Clark8cc16c72017-08-25 11:51:49 -04004535by <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 -04004536
Cary Clark7cfcbca2018-01-04 16:11:51 -05004537Only supported on platforms that use FreeType as the <a href="#Engine">Font Engine</a>.
Cary Clark12799e12017-07-28 15:18:29 -04004538
4539### Parameters
4540
Cary Clark8cc16c72017-08-25 11:51:49 -04004541<table> <tr> <td><a name="SkPaint_glyphsToUnichars_glyphs"> <code><strong>glyphs </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004542array of indices into font</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004543 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_count"> <code><strong>count </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004544length of glyph array</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004545 </tr> <tr> <td><a name="SkPaint_glyphsToUnichars_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004546storage for character codes, one per glyph</td>
4547 </tr>
4548</table>
4549
4550### Example
4551
Cary Clark7cfcbca2018-01-04 16:11:51 -05004552<div><fiddle-embed name="c12686b0b3e0a87d0a248bbfc57e9492"><div>Convert UTF-8 <a href="#SkPaint_glyphsToUnichars_text">text</a> to <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a>; then convert <a href="#SkPaint_glyphsToUnichars_glyphs">glyphs</a> to Unichar code points.</div></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004553
4554---
4555
Cary Clark08895c42018-02-01 09:37:32 -05004556## <a name="Measure_Text"></a> Measure Text
Cary Clark12799e12017-07-28 15:18:29 -04004557
Cary Clark493df1f2017-08-25 13:14:33 -04004558<a name="SkPaint_measureText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004559## measureText
4560
Cary Clarka560c472017-11-27 10:44:06 -05004561<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004562SkScalar measureText(const void* text, size_t length, SkRect* bounds) const
4563</pre>
4564
Cary Clark8cc16c72017-08-25 11:51:49 -04004565Returns the advance width of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4566and the height of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4567The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_text">text</a>.
4568Uses <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,
4569and <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
4570<a href="undocumented#Path_Effect">Path Effect</a> to scale the metrics and <a href="#SkPaint_measureText_bounds">bounds</a>.
4571Returns the bounding box of <a href="#SkPaint_measureText_text">text</a> if <a href="#SkPaint_measureText_bounds">bounds</a> is not nullptr.
4572The 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 -04004573
4574### Parameters
4575
Cary Clark8cc16c72017-08-25 11:51:49 -04004576<table> <tr> <td><a name="SkPaint_measureText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004577character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004578 </tr> <tr> <td><a name="SkPaint_measureText_length"> <code><strong>length </strong></code> </a></td> <td>
4579number of bytes of <a href="#SkPaint_measureText_text">text</a> to measure</td>
4580 </tr> <tr> <td><a name="SkPaint_measureText_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004581returns bounding box relative to (0, 0) if not nullptr</td>
4582 </tr>
4583</table>
4584
4585### Return Value
4586
4587advance width or height
4588
4589### Example
4590
4591<div><fiddle-embed name="06084f609184470135a9cd9ebc5af149"></fiddle-embed></div>
4592
4593---
4594
Cary Clark2dc84ad2018-01-26 12:56:22 -05004595<a name="SkPaint_measureText_2"></a>
4596
Cary Clarka560c472017-11-27 10:44:06 -05004597<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004598SkScalar measureText(const void* text, size_t length) const
4599</pre>
4600
Cary Clark8cc16c72017-08-25 11:51:49 -04004601Returns the advance width of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear,
4602and the height of <a href="#SkPaint_measureText_2_text">text</a> if <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set.
4603The advance is the normal distance to move before drawing additional <a href="#SkPaint_measureText_2_text">text</a>.
4604Uses <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,
4605and <a href="#Text_Size">Text Size</a> to scale the metrics.
4606Does 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 -04004607
4608### Parameters
4609
Cary Clark8cc16c72017-08-25 11:51:49 -04004610<table> <tr> <td><a name="SkPaint_measureText_2_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004611character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004612 </tr> <tr> <td><a name="SkPaint_measureText_2_length"> <code><strong>length </strong></code> </a></td> <td>
4613number of bytes of <a href="#SkPaint_measureText_2_text">text</a> to measure</td>
Cary Clark12799e12017-07-28 15:18:29 -04004614 </tr>
4615</table>
4616
4617### Return Value
4618
4619advance width or height
4620
4621### Example
4622
4623<div><fiddle-embed name="f1139a5ddd17fd47c2f45f6e642cac76">
4624
4625#### Example Output
4626
4627~~~~
4628default width = 5
4629double width = 10
4630~~~~
4631
4632</fiddle-embed></div>
4633
4634---
4635
Cary Clark493df1f2017-08-25 13:14:33 -04004636<a name="SkPaint_breakText"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004637## breakText
4638
Cary Clarka560c472017-11-27 10:44:06 -05004639<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004640size_t breakText(const void* text, size_t length, SkScalar maxWidth,
Cary Clark73fa9722017-08-29 17:36:51 -04004641 SkScalar* measuredWidth = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004642</pre>
4643
Cary Clark8cc16c72017-08-25 11:51:49 -04004644Returns the bytes of <a href="#SkPaint_breakText_text">text</a> that fit within <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4645If <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
4646equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4647If <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
4648equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4649Measures only while the advance is less than or equal to <a href="#SkPaint_breakText_maxWidth">maxWidth</a>.
4650Returns the advance or the <a href="#SkPaint_breakText_text">text</a> fragment in <a href="#SkPaint_breakText_measuredWidth">measuredWidth</a> if it not nullptr.
4651Uses <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,
4652and <a href="#Text_Size">Text Size</a> to scale the metrics.
4653Does 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 -04004654
4655### Parameters
4656
Cary Clark8cc16c72017-08-25 11:51:49 -04004657<table> <tr> <td><a name="SkPaint_breakText_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004658character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004659 </tr> <tr> <td><a name="SkPaint_breakText_length"> <code><strong>length </strong></code> </a></td> <td>
4660number of bytes of <a href="#SkPaint_breakText_text">text</a> to measure</td>
4661 </tr> <tr> <td><a name="SkPaint_breakText_maxWidth"> <code><strong>maxWidth </strong></code> </a></td> <td>
4662advance limit; <a href="#SkPaint_breakText_text">text</a> is measured while advance is less than <a href="#SkPaint_breakText_maxWidth">maxWidth</a></td>
4663 </tr> <tr> <td><a name="SkPaint_breakText_measuredWidth"> <code><strong>measuredWidth </strong></code> </a></td> <td>
4664returns 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 -04004665 </tr>
4666</table>
4667
4668### Return Value
4669
Cary Clark8cc16c72017-08-25 11:51:49 -04004670bytes 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 -04004671
4672### Example
4673
Cary Clark4c06f5e2017-08-04 12:48:24 -04004674<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 -04004675<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 -04004676
4677---
4678
Cary Clark493df1f2017-08-25 13:14:33 -04004679<a name="SkPaint_getTextWidths"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004680## getTextWidths
4681
Cary Clarka560c472017-11-27 10:44:06 -05004682<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4683int getTextWidths(const void* text, size_t byteLength, SkScalar widths[], SkRect bounds[] = nullptr) const
Cary Clark12799e12017-07-28 15:18:29 -04004684</pre>
4685
Cary Clark8cc16c72017-08-25 11:51:49 -04004686Retrieves the advance and <a href="#SkPaint_getTextWidths_bounds">bounds</a> for each glyph in <a href="#SkPaint_getTextWidths_text">text</a>, and returns
4687the glyph count in <a href="#SkPaint_getTextWidths_text">text</a>.
4688Both <a href="#SkPaint_getTextWidths_widths">widths</a> and <a href="#SkPaint_getTextWidths_bounds">bounds</a> may be nullptr.
4689If <a href="#SkPaint_getTextWidths_widths">widths</a> is not nullptr, <a href="#SkPaint_getTextWidths_widths">widths</a> must be an array of glyph count entries.
Cary Clark7cfcbca2018-01-04 16:11:51 -05004690if <a href="#SkPaint_getTextWidths_bounds">bounds</a> is not nullptr, <a href="#SkPaint_getTextWidths_bounds">bounds</a> must be an array of glyph count entries.
Cary Clark8cc16c72017-08-25 11:51:49 -04004691If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is clear, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the horizontal advance.
4692If <a href="#SkPaint_kVerticalText_Flag">kVerticalText Flag</a> is set, <a href="#SkPaint_getTextWidths_widths">widths</a> returns the vertical advance.
4693Uses <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,
4694and <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>.
4695Does not scale the advance by <a href="#Fake_Bold">Fake Bold</a> or <a href="undocumented#Path_Effect">Path Effect</a>.
4696Does 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 -04004697
4698### Parameters
4699
Cary Clark8cc16c72017-08-25 11:51:49 -04004700<table> <tr> <td><a name="SkPaint_getTextWidths_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004701character codes or glyph indices to be measured</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004702 </tr> <tr> <td><a name="SkPaint_getTextWidths_byteLength"> <code><strong>byteLength </strong></code> </a></td> <td>
4703number of bytes of <a href="#SkPaint_getTextWidths_text">text</a> to measure</td>
4704 </tr> <tr> <td><a name="SkPaint_getTextWidths_widths"> <code><strong>widths </strong></code> </a></td> <td>
4705returns <a href="#SkPaint_getTextWidths_text">text</a> advances for each glyph; may be nullptr</td>
4706 </tr> <tr> <td><a name="SkPaint_getTextWidths_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
4707returns <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 -04004708 </tr>
4709</table>
4710
4711### Return Value
4712
Cary Clark8cc16c72017-08-25 11:51:49 -04004713glyph count in <a href="#SkPaint_getTextWidths_text">text</a>
Cary Clark12799e12017-07-28 15:18:29 -04004714
4715### Example
4716
Cary Clarkce101242017-09-01 15:51:02 -04004717<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 -04004718The 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 -04004719
4720---
4721
Cary Clark08895c42018-02-01 09:37:32 -05004722## <a name="Text_Path"></a> Text Path
4723
Cary Clarkce101242017-09-01 15:51:02 -04004724<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 -04004725
Cary Clark493df1f2017-08-25 13:14:33 -04004726<a name="SkPaint_getTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004727## getTextPath
4728
Cary Clarka560c472017-11-27 10:44:06 -05004729<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4730void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004731</pre>
4732
Cary Clark8cc16c72017-08-25 11:51:49 -04004733Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getTextPath_text">text</a>.
4734Uses <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,
4735and <a href="#Text_Size">Text Size</a>, <a href="#Fake_Bold">Fake Bold</a>, and <a href="undocumented#Path_Effect">Path Effect</a> to scale and modify the glyph paths.
4736All of the glyph paths are stored in <a href="#SkPaint_getTextPath_path">path</a>.
4737Uses <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 -04004738
4739### Parameters
4740
Cary Clark8cc16c72017-08-25 11:51:49 -04004741<table> <tr> <td><a name="SkPaint_getTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004742character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004743 </tr> <tr> <td><a name="SkPaint_getTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4744number of bytes of <a href="#SkPaint_getTextPath_text">text</a></td>
4745 </tr> <tr> <td><a name="SkPaint_getTextPath_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004746<a href="#SkPaint_getTextPath_x">x</a>-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004747 </tr> <tr> <td><a name="SkPaint_getTextPath_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004748<a href="#SkPaint_getTextPath_y">y</a>-coordinate of the origin of the <a href="#SkPaint_getTextPath_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004749 </tr> <tr> <td><a name="SkPaint_getTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004750geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004751 </tr>
4752</table>
4753
4754### Example
4755
Cary Clark4c06f5e2017-08-04 12:48:24 -04004756<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 -04004757the offset location. The result is rendered with one draw call.</div></fiddle-embed></div>
4758
4759---
4760
Cary Clark493df1f2017-08-25 13:14:33 -04004761<a name="SkPaint_getPosTextPath"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004762## getPosTextPath
4763
Cary Clarka560c472017-11-27 10:44:06 -05004764<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4765void getPosTextPath(const void* text, size_t length, const SkPoint pos[], SkPath* path) const
Cary Clark12799e12017-07-28 15:18:29 -04004766</pre>
4767
Cary Clark8cc16c72017-08-25 11:51:49 -04004768Returns the geometry as <a href="SkPath_Reference#Path">Path</a> equivalent to the drawn <a href="#SkPaint_getPosTextPath_text">text</a>.
4769Uses <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,
4770and <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.
4771All of the glyph paths are stored in <a href="#SkPaint_getPosTextPath_path">path</a>.
4772Uses <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>.
4773<a href="#SkPaint_getPosTextPath_pos">pos</a> contains a position for each glyph.
Cary Clark12799e12017-07-28 15:18:29 -04004774
4775### Parameters
4776
Cary Clark8cc16c72017-08-25 11:51:49 -04004777<table> <tr> <td><a name="SkPaint_getPosTextPath_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004778character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004779 </tr> <tr> <td><a name="SkPaint_getPosTextPath_length"> <code><strong>length </strong></code> </a></td> <td>
4780number of bytes of <a href="#SkPaint_getPosTextPath_text">text</a></td>
4781 </tr> <tr> <td><a name="SkPaint_getPosTextPath_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004782positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004783 </tr> <tr> <td><a name="SkPaint_getPosTextPath_path"> <code><strong>path </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004784geometry of the <a href="#Glyph">Glyphs</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04004785 </tr>
4786</table>
4787
4788### Example
4789
Cary Clarkce101242017-09-01 15:51:02 -04004790<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 -04004791
4792---
4793
Cary Clark08895c42018-02-01 09:37:32 -05004794## <a name="Text_Intercepts"></a> Text Intercepts
4795
Cary Clarkce101242017-09-01 15:51:02 -04004796<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 -04004797of lines parallel to the text advance. <a href="#Text_Intercepts">Text Intercepts</a> permits creating a
Cary Clark7cfcbca2018-01-04 16:11:51 -05004798underline that skips Descenders.
Cary Clark12799e12017-07-28 15:18:29 -04004799
Cary Clark493df1f2017-08-25 13:14:33 -04004800<a name="SkPaint_getTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004801## getTextIntercepts
4802
Cary Clarka560c472017-11-27 10:44:06 -05004803<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004804int getTextIntercepts(const void* text, size_t length, SkScalar x, SkScalar y,
4805 const SkScalar bounds[2], SkScalar* intervals) const
4806</pre>
4807
Cary Clark8cc16c72017-08-25 11:51:49 -04004808Returns the number of <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextIntercepts_bounds">bounds</a>.
4809<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 -04004810The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004811the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004812Uses <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,
4813and <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.
4814Uses <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>.
4815Pass nullptr for <a href="#SkPaint_getTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4816<a href="#SkPaint_getTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004817
4818### Parameters
4819
Cary Clark8cc16c72017-08-25 11:51:49 -04004820<table> <tr> <td><a name="SkPaint_getTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004821character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004822 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4823number of bytes of <a href="#SkPaint_getTextIntercepts_text">text</a></td>
4824 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_x"> <code><strong>x </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004825<a href="#SkPaint_getTextIntercepts_x">x</a>-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004826 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_y"> <code><strong>y </strong></code> </a></td> <td>
Cary Clarka560c472017-11-27 10:44:06 -05004827<a href="#SkPaint_getTextIntercepts_y">y</a>-coordinate of the origin of the <a href="#SkPaint_getTextIntercepts_text">text</a></td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004828 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004829lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004830 </tr> <tr> <td><a name="SkPaint_getTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004831returned intersections; may be nullptr</td>
4832 </tr>
4833</table>
4834
4835### Return Value
4836
4837number of intersections; may be zero
4838
4839### Example
4840
Cary Clarkce101242017-09-01 15:51:02 -04004841<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 -04004842
4843---
4844
Cary Clark493df1f2017-08-25 13:14:33 -04004845<a name="SkPaint_getPosTextIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004846## getPosTextIntercepts
4847
Cary Clarka560c472017-11-27 10:44:06 -05004848<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004849int getPosTextIntercepts(const void* text, size_t length, const SkPoint pos[],
4850 const SkScalar bounds[2], SkScalar* intervals) const
4851</pre>
4852
Cary Clark8cc16c72017-08-25 11:51:49 -04004853Returns the number of <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextIntercepts_bounds">bounds</a>.
4854<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 -04004855The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004856the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004857Uses <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,
4858and <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.
4859Uses <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>.
4860Pass nullptr for <a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> to determine the size of the interval array.
4861<a href="#SkPaint_getPosTextIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004862
4863### Parameters
4864
Cary Clark8cc16c72017-08-25 11:51:49 -04004865<table> <tr> <td><a name="SkPaint_getPosTextIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004866character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004867 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4868number of bytes of <a href="#SkPaint_getPosTextIntercepts_text">text</a></td>
4869 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_pos"> <code><strong>pos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004870positions of each glyph</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004871 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004872lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004873 </tr> <tr> <td><a name="SkPaint_getPosTextIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004874returned intersections; may be nullptr</td>
4875 </tr>
4876</table>
4877
4878### Return Value
4879
Cary Clarka523d2d2017-08-30 08:58:10 -04004880number of intersections; may be zero
Cary Clark12799e12017-07-28 15:18:29 -04004881
4882### Example
4883
Cary Clarkce101242017-09-01 15:51:02 -04004884<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 -04004885
4886---
4887
Cary Clark493df1f2017-08-25 13:14:33 -04004888<a name="SkPaint_getPosTextHIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004889## getPosTextHIntercepts
4890
Cary Clarka560c472017-11-27 10:44:06 -05004891<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4892int getPosTextHIntercepts(const void* text, size_t length, const SkScalar xpos[], SkScalar constY,
4893 const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004894</pre>
4895
Cary Clark8cc16c72017-08-25 11:51:49 -04004896Returns the number of <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getPosTextHIntercepts_bounds">bounds</a>.
4897<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 -04004898The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004899the string.
Cary Clark8cc16c72017-08-25 11:51:49 -04004900Uses <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,
4901and <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.
4902Uses <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>.
4903Pass nullptr for <a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> to determine the size of the interval array.
4904<a href="#SkPaint_getPosTextHIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004905
4906### Parameters
4907
Cary Clark8cc16c72017-08-25 11:51:49 -04004908<table> <tr> <td><a name="SkPaint_getPosTextHIntercepts_text"> <code><strong>text </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004909character codes or glyph indices</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004910 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_length"> <code><strong>length </strong></code> </a></td> <td>
4911number of bytes of <a href="#SkPaint_getPosTextHIntercepts_text">text</a></td>
4912 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_xpos"> <code><strong>xpos </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004913positions of each glyph in x</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004914 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_constY"> <code><strong>constY </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004915position of each glyph in y</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004916 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004917lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004918 </tr> <tr> <td><a name="SkPaint_getPosTextHIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004919returned intersections; may be nullptr</td>
4920 </tr>
4921</table>
4922
4923### Return Value
4924
4925number of intersections; may be zero
4926
4927### Example
4928
Cary Clark4c06f5e2017-08-04 12:48:24 -04004929<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 -04004930
4931---
4932
Cary Clark493df1f2017-08-25 13:14:33 -04004933<a name="SkPaint_getTextBlobIntercepts"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004934## getTextBlobIntercepts
4935
Cary Clarka560c472017-11-27 10:44:06 -05004936<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
4937int getTextBlobIntercepts(const SkTextBlob* blob, const SkScalar bounds[2], SkScalar* intervals) const
Cary Clark12799e12017-07-28 15:18:29 -04004938</pre>
4939
Cary Clark8cc16c72017-08-25 11:51:49 -04004940Returns the number of <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> that intersect <a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a>.
4941<a href="#SkPaint_getTextBlobIntercepts_bounds">bounds</a> describes a pair of lines parallel to the text advance.
Cary Clarkce101242017-09-01 15:51:02 -04004942The return count is zero or a multiple of two, and is at most twice the number of <a href="#Glyph">Glyphs</a> in
Cary Clark7cfcbca2018-01-04 16:11:51 -05004943the string.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004944Uses <a href="undocumented#Typeface">Typeface</a> to get the glyph paths,
Cary Clark8cc16c72017-08-25 11:51:49 -04004945and <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 -04004946Uses run array and <a href="#Text_Align">Text Align</a> to position <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a>.
Cary Clark3cd22cc2017-12-01 11:49:58 -05004947<a href="#Text_Encoding">Text Encoding</a> must be set to <a href="#SkPaint_kGlyphID_TextEncoding">SkPaint::kGlyphID TextEncoding</a>.
4948
Cary Clark8cc16c72017-08-25 11:51:49 -04004949Pass nullptr for <a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> to determine the size of the interval array.
4950<a href="#SkPaint_getTextBlobIntercepts_intervals">intervals</a> are cached to improve performance for multiple calls.
Cary Clark12799e12017-07-28 15:18:29 -04004951
4952### Parameters
4953
Cary Clark8cc16c72017-08-25 11:51:49 -04004954<table> <tr> <td><a name="SkPaint_getTextBlobIntercepts_blob"> <code><strong>blob </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04004955<a href="#Glyph">Glyphs</a>, positions, and text paint attributes</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004956 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_bounds"> <code><strong>bounds </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004957lower and upper line parallel to the advance</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04004958 </tr> <tr> <td><a name="SkPaint_getTextBlobIntercepts_intervals"> <code><strong>intervals </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04004959returned intersections; may be nullptr</td>
4960 </tr>
4961</table>
4962
4963### Return Value
4964
4965number of intersections; may be zero
4966
4967### Example
4968
Cary Clark3cd22cc2017-12-01 11:49:58 -05004969<div><fiddle-embed name="71959a66b2290d70003887c0de339266"></fiddle-embed></div>
Cary Clark12799e12017-07-28 15:18:29 -04004970
4971---
4972
Cary Clark493df1f2017-08-25 13:14:33 -04004973<a name="SkPaint_nothingToDraw"></a>
Cary Clark12799e12017-07-28 15:18:29 -04004974## nothingToDraw
4975
Cary Clarka560c472017-11-27 10:44:06 -05004976<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04004977bool nothingToDraw() const
4978</pre>
4979
Cary Clark8cc16c72017-08-25 11:51:49 -04004980Returns true if <a href="#Paint">Paint</a> prevents all drawing;
4981otherwise, the <a href="#Paint">Paint</a> may or may not allow drawing.
Cary Clark12799e12017-07-28 15:18:29 -04004982
Cary Clarkce101242017-09-01 15:51:02 -04004983Returns true if, for example, <a href="undocumented#Blend_Mode">Blend Mode</a> combined with <a href="#Alpha">Color Alpha</a> computes a
4984new <a href="#Alpha">Alpha</a> of zero.
Cary Clark12799e12017-07-28 15:18:29 -04004985
4986### Return Value
4987
Cary Clark8cc16c72017-08-25 11:51:49 -04004988true if <a href="#Paint">Paint</a> prevents all drawing
Cary Clark12799e12017-07-28 15:18:29 -04004989
4990### Example
4991
4992<div><fiddle-embed name="fc5a771b915ac341f56554f01d282831">
4993
4994#### Example Output
4995
4996~~~~
4997initial nothing to draw: false
4998blend dst nothing to draw: true
4999blend src over nothing to draw: false
5000alpha 0 nothing to draw: true
5001~~~~
5002
5003</fiddle-embed></div>
5004
5005---
5006
Cary Clark08895c42018-02-01 09:37:32 -05005007## <a name="Fast_Bounds"></a> Fast Bounds
5008
Cary Clark8cc16c72017-08-25 11:51:49 -04005009<a href="#Fast_Bounds">Fast Bounds</a> methods conservatively outset a drawing bounds by additional area
5010<a href="#Paint">Paint</a> may draw to.
Cary Clark12799e12017-07-28 15:18:29 -04005011
Cary Clark493df1f2017-08-25 13:14:33 -04005012<a name="SkPaint_canComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005013## canComputeFastBounds
5014
Cary Clarka560c472017-11-27 10:44:06 -05005015<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005016bool canComputeFastBounds() const
5017</pre>
5018
Cary Clark8cc16c72017-08-25 11:51:49 -04005019Returns true if <a href="#Paint">Paint</a> does not include elements requiring extensive computation
5020to 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 -04005021always returns false.
5022
5023### Return Value
5024
Cary Clark8cc16c72017-08-25 11:51:49 -04005025true if <a href="#Paint">Paint</a> allows for fast computation of bounds
Cary Clark12799e12017-07-28 15:18:29 -04005026
5027---
5028
Cary Clark493df1f2017-08-25 13:14:33 -04005029<a name="SkPaint_computeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005030## computeFastBounds
5031
Cary Clarka560c472017-11-27 10:44:06 -05005032<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005033const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const
5034</pre>
5035
Cary Clark8cc16c72017-08-25 11:51:49 -04005036Only call this if <a href="#SkPaint_canComputeFastBounds">canComputeFastBounds</a> returned true. This takes a
Cary Clark12799e12017-07-28 15:18:29 -04005037raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
Cary Clark8cc16c72017-08-25 11:51:49 -04005038effects 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 -04005039parameter. It returns the adjusted bounds that can then be used
Cary Clark8cc16c72017-08-25 11:51:49 -04005040for <a href="#SkCanvas_quickReject">SkCanvas::quickReject</a> tests.
Cary Clark12799e12017-07-28 15:18:29 -04005041
Cary Clarkbc5697d2017-10-04 14:31:33 -04005042The 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 -04005043should 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 -04005044use 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 -04005045<a href="SkRect_Reference#Rect">Rect</a>.
Cary Clark12799e12017-07-28 15:18:29 -04005046
5047### Parameters
5048
Cary Clark8cc16c72017-08-25 11:51:49 -04005049<table> <tr> <td><a name="SkPaint_computeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5050geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5051 </tr> <tr> <td><a name="SkPaint_computeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005052computed bounds of geometry; may not be nullptr</td>
5053 </tr>
5054</table>
5055
5056### Return Value
5057
5058fast computed bounds
5059
5060---
5061
Cary Clark493df1f2017-08-25 13:14:33 -04005062<a name="SkPaint_computeFastStrokeBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005063## computeFastStrokeBounds
5064
Cary Clarka560c472017-11-27 10:44:06 -05005065<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark12799e12017-07-28 15:18:29 -04005066const SkRect& computeFastStrokeBounds(const SkRect& orig, SkRect* storage) const
5067</pre>
5068
5069### Parameters
5070
Cary Clark8cc16c72017-08-25 11:51:49 -04005071<table> <tr> <td><a name="SkPaint_computeFastStrokeBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5072geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5073 </tr> <tr> <td><a name="SkPaint_computeFastStrokeBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005074computed bounds of geometry</td>
5075 </tr>
5076</table>
5077
5078### Return Value
5079
5080fast computed bounds
5081
5082---
5083
Cary Clark493df1f2017-08-25 13:14:33 -04005084<a name="SkPaint_doComputeFastBounds"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005085## doComputeFastBounds
5086
Cary Clarka560c472017-11-27 10:44:06 -05005087<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
5088const SkRect& doComputeFastBounds(const SkRect& orig, SkRect* storage, Style style) const
Cary Clark12799e12017-07-28 15:18:29 -04005089</pre>
5090
Cary Clarkce101242017-09-01 15:51:02 -04005091Computes the bounds, overriding the <a href="#Paint">Paint</a> <a href="#SkPaint_Style">Style</a>. This can be used to
5092account for additional width required by stroking <a href="#SkPaint_doComputeFastBounds_orig">orig</a>, without
5093altering <a href="#SkPaint_Style">Style</a> set to fill.
Cary Clark12799e12017-07-28 15:18:29 -04005094
5095### Parameters
5096
Cary Clark8cc16c72017-08-25 11:51:49 -04005097<table> <tr> <td><a name="SkPaint_doComputeFastBounds_orig"> <code><strong>orig </strong></code> </a></td> <td>
5098geometry modified by <a href="#Paint">Paint</a> when drawn</td>
5099 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_storage"> <code><strong>storage </strong></code> </a></td> <td>
Cary Clark12799e12017-07-28 15:18:29 -04005100computed bounds of geometry</td>
Cary Clark8cc16c72017-08-25 11:51:49 -04005101 </tr> <tr> <td><a name="SkPaint_doComputeFastBounds_style"> <code><strong>style </strong></code> </a></td> <td>
5102overrides <a href="#SkPaint_Style">Style</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005103 </tr>
5104</table>
5105
5106### Return Value
5107
5108fast computed bounds
5109
5110---
5111
Cary Clark493df1f2017-08-25 13:14:33 -04005112<a name="SkPaint_toString"></a>
Cary Clark12799e12017-07-28 15:18:29 -04005113## toString
5114
Cary Clarka560c472017-11-27 10:44:06 -05005115<pre style="padding: 1em 1em 1em 1em;width: 62.5em; background-color: #f0f0f0">
Cary Clark2dc84ad2018-01-26 12:56:22 -05005116void toString(SkString* str) const
Cary Clark12799e12017-07-28 15:18:29 -04005117</pre>
5118
Cary Clarkce101242017-09-01 15:51:02 -04005119Creates string representation of <a href="#Paint">Paint</a>. The representation is read by
5120internal debugging tools. The interface and implementation may be
Cary Clark7cfcbca2018-01-04 16:11:51 -05005121suppressed by defining SK_IGNORE_TO_STRING.
Cary Clark12799e12017-07-28 15:18:29 -04005122
5123### Parameters
5124
Cary Clark8cc16c72017-08-25 11:51:49 -04005125<table> <tr> <td><a name="SkPaint_toString_str"> <code><strong>str </strong></code> </a></td> <td>
Cary Clarkce101242017-09-01 15:51:02 -04005126storage for string representation of <a href="#Paint">Paint</a></td>
Cary Clark12799e12017-07-28 15:18:29 -04005127 </tr>
5128</table>
5129
5130### Example
5131
5132<div><fiddle-embed name="5670c04b4562908169a776c48c92d104">
5133
5134#### Example Output
5135
5136~~~~
5137text size = 12
5138~~~~
5139
5140</fiddle-embed></div>
5141
Cary Clark2ade9972017-11-02 17:49:34 -04005142### See Also
5143
5144<a href="#SkPathEffect_toString">SkPathEffect::toString</a> <a href="#SkMaskFilter_toString">SkMaskFilter::toString</a> <a href="#SkColorFilter_toString">SkColorFilter::toString</a> <a href="#SkImageFilter_toString">SkImageFilter::toString</a>
5145
Cary Clark12799e12017-07-28 15:18:29 -04005146---
5147